Uso de una función de Lambda como salida - Guía para desarrolladores de Amazon Kinesis Data Analytics SQL para aplicaciones

Para proyectos nuevos, le recomendamos que utilice el nuevo servicio gestionado para Apache Flink Studio en lugar de Kinesis Data Analytics SQL for Applications. El servicio gestionado para Apache Flink Studio combina la facilidad de uso con capacidades analíticas avanzadas, lo que le permite crear aplicaciones sofisticadas de procesamiento de flujos en cuestión de minutos.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de una función de Lambda como salida

Si AWS Lambda se utiliza como destino, puede realizar más fácilmente el posprocesamiento de los resultados de SQL antes de enviarlos a un destino final. Entre las tareas de procesamiento posterior más frecuentes se incluyen las siguientes:

  • Acumulación de varias filas en un solo registro

  • Combinación de resultados actuales con resultados anteriores para procesar los datos que llegan tarde

  • Efectuar la entrega en diferentes destinos en función del tipo de información

  • Traducción del formato de los registros (por ejemplo, traducirlos a Protobuf)

  • Manipulación o transformación de cadenas

  • Enriquecimiento de datos después del procesamiento analítico

  • Procesamiento personalizado para casos de uso geoespaciales

  • Cifrado de datos

Las funciones Lambda pueden entregar información analítica a una variedad de AWS servicios y otros destinos, incluidos los siguientes:

Para obtener más información acerca de cómo crear aplicaciones de Lambda, consulte Introducción a AWS Lambda.

Permisos para utilizar Lambda como salida

Para utilizar Lambda como salida, el rol de IAM de salida de Lambda de la aplicación requiere la política de permisos siguiente:

{ "Sid": "UseLambdaFunction", "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": "FunctionARN" }

Métricas para utilizar Lambda como salida

Utiliza Amazon CloudWatch para monitorizar el número de bytes enviados, los éxitos y los errores, etc. Para obtener información sobre CloudWatch las métricas emitidas por Kinesis Data Analytics con Lambda como salida, consulte Amazon Kinesis Analytics Metrics.

Modelo de datos de entrada de eventos y modelo de respuesta de registros para utilizar Lambda como salida

Para enviar los registros de salida de Kinesis Data Analytics, la función de Lambda debe respetar los modelos de datos de entrada de eventos y de respuesta de registros.

Modelo de datos de entrada de eventos

Kinesis Data Analytics envía continuamente los registros de salida de la aplicación a la Lambda como salida con el siguiente modelo de solicitud. Dentro de la función, debe iterar por la lista y aplicar la lógica de negocio para cumplir los requisitos de salida (tales como la transformación de datos antes de enviarlos a su destino final).

Campo Descripción
invocationId El ID de invocación de Lambda (GUID aleatorio).
applicationArn El nombre de recurso de Amazon (ARN) de la aplicación de análisis de datos de Kinesis Data Analytics.
registros
Campo Descripción
recordId ID de registro (GUID aleatorio)
lambdaDeliveryRecordMetadata
Campo Descripción
retryHint Número de reintentos de entrega
datos Carga del registro de salida codificada en Base64
nota

retryHint es un valor que aumenta para cada error de entrega. Este valor no se conserva de forma duradera y se restablece si la aplicación se interrumpe.

Modelo de respuesta de registros

Cada registro enviado a la Lambda como salida (con los ID de registro) debe reconocerse con Ok o DeliveryFailed, y debe contener los parámetros siguientes. De lo contrario, Kinesis Data Analytics lo considera un error de entrega.

registros
Campo Descripción
recordId El ID de registro se transfiere desde Kinesis Data Analytics hacia Lambda durante la invocación. Cualquier discrepancia entre el ID del registro original y el ID del registro reconocido se considera un error de entrega.
result El estado de entrega del registro. Los valores posibles son los siguientes:
  • Ok: el registro se ha transformado correctamente y se ha enviado a su destino final. Kinesis Data Analytics ingiere el registro para el procesamiento de SQL.

  • DeliveryFailed: el registro no se ha entregado correctamente a su destino final por la función de Lambda como salida. Kinesis Data Analytics vuelve a intentar continuamente el envío de los registros cuya entrega no se ha realizado a la función de Lambda como salida.

Frecuencia de invocación de Lambda como salida

Una aplicación de análisis de datos de Kinesis Data Analytics almacena en búfer los registros de salida e invoca con frecuencia la función de destino de AWS Lambda .

  • Si los registros se emiten a la transmisión de destino dentro de la aplicación de análisis de datos como una ventana desplegable, la función de AWS Lambda destino se invoca por cada activador de la ventana descendente. Por ejemplo, si se utiliza una ventana de saltos de 60 segundos para emitir los registros a la secuencia en la aplicación de destino, la función de Lambda se invoca una vez cada 60 segundos.

  • Si los registros se emiten a la secuencia en la aplicación de destino dentro de la aplicación como ventana deslizante o de consulta continua, la función de destino de Lambda se invoca aproximadamente una vez por segundo.

nota

Se aplican los límites de tamaño de carga de solicitud de invocación para cada función de Lambda. Si se superan esos límites, los registros salientes se dividen y se envían a través de varias llamadas de funciones de Lambda.

Adición de una función de Lambda para su uso como salida

El siguiente procedimiento muestra cómo añadir una función de Lambda como salida para una aplicación de Kinesis Data Analytics.

  1. Inicie sesión en la consola Managed Service for Apache Flink AWS Management Console y ábrala en https://console.aws.amazon.com/kinesisanalytics.

  2. Elija la aplicación en la lista y, a continuación, elija Application details.

  3. En la sección Destination, elija Connect new destination.

  4. En el elemento Destination, elija la funciónAWS Lambda .

  5. En la sección Entregar registros a AWS Lambda, elija una función de Lambda existente o elija Crear nueva.

  6. Si va a crear una función de Lambda nueva, haga lo siguiente:

    1. Elija una de las plantillas que se proporcionan. Para obtener más información, Creación de funciones de Lambda como destinos de aplicaciones.

    2. Se abre la página Create Function (Crear función) en una nueva pestaña del navegador web. En el cuadro Name (Nombre), indique un nombre significativo para la función (por ejemplo, myLambdaFunction).

    3. Actualice la plantilla con la funcionalidad de procesamiento posterior que necesite su aplicación. Para obtener más información acerca de la creación de una función de Lambda, consulte Introducción en la Guía para desarrolladores deAWS Lambda .

    4. En la consola de Kinesis Data Analytics, en la lista función de Lambda, elija la función de Lambda que acaba de crear. Elija $LATEST para la versión de la función de Lambda.

  7. En la sección In-application stream, elija Choose an existing in-application stream. En In-application stream name, elija la secuencia de salida de la aplicación. Los resultados de la secuencia de salida seleccionada se envían a la función de salida de Lambda.

  8. Deje el resto del formulario con los valores predeterminados, y elija Save and continue.

Ahora, la aplicación envía los registros de la secuencia en la aplicación a la función de Lambda. Puedes ver los resultados de la plantilla predeterminada en la CloudWatch consola de Amazon. Monitorice la métrica AWS/KinesisAnalytics/LambdaDelivery.OkRecords para ver el número de registros entregados a la función de Lambda.

Errores comunes de Lambda como salida

A continuación se indican los motivos comunes por los que puede no efectuarse la entrega a una función de Lambda.

  • No se devuelven al servicio de Kinesis Data Analytics todos los registros (con ID de registro) de un lote enviado a la función de Lambda.

  • En la respuesta falta el campo de estado o el ID de registro.

  • Los tiempos de espera de la función de Lambda no son suficientes para ejecutar la lógica de negocio de la función de Lambda.

  • La lógica de negocio de la función de Lambda no captura todos los errores, lo que provoca tiempos de espera y resistencias que se deben a las excepciones no controladas. En ocasiones se denominan mensajes de “píldora venenosa”.

Para errores de entrega de datos, Kinesis Data Analytics sigue reintentando las invocaciones de Lambda en el mismo conjunto de registros hasta que tiene éxito. Para obtener información sobre los fallos, puedes monitorizar las siguientes CloudWatch métricas:

  • Lambda como métrica de CloudWatch salida de la aplicación Kinesis Data Analytics: indica el número de éxitos y fracasos, entre otras estadísticas. Para obtener más información, consulte Amazon Kinesis Analytics Metrics.

  • AWS Lambda CloudWatch métricas y registros de funciones.