Mapeos de origen de eventos de AWS Lambda - AWS Lambda

Mapeos de origen de eventos de AWS Lambda

Un mapeo de origen de eventos es un recurso de AWS Lambda que lee desde un origen de eventos e invoca una función de Lambda. Puede utilizar mapeos de orígenes de eventos para procesar elementos de una transmisión o una cola en los servicios que no invocan funciones de Lambda directamente. Lambda proporciona mapeos de orígenes de eventos de los siguientes servicios.

Un mapeo de origen de eventos utiliza los permisos en el rol de ejecución de la función para leer y administrar elementos en el origen del evento. Los permisos, la estructura de eventos, los ajustes y el comportamiento de sondeo varían en función del origen de eventos. Para obtener más información, consulte el tema vinculado para el servicio que puede usar como origen de eventos.

Para administrar un origen de eventos con la AWS CLI o el SDK de AWS, puede utilizar las siguientes operaciones de la API:

En el siguiente ejemplo se utiliza la AWS CLI para asignar una función llamada my-function a una secuencia de DynamoDB especificada mediante un nombre de recurso de Amazon (ARN), con un tamaño de lote de 500.

aws lambda create-event-source-mapping --function-name my-function --batch-size 500 --starting-position LATEST \ --event-source-arn arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2019-06-10T19:26:16.525

Debería ver los siguientes datos de salida:

{ "UUID": "14e0db71-5d35-4eb5-b481-8945cf9d10c2", "BatchSize": 500, "MaximumBatchingWindowInSeconds": 0, "ParallelizationFactor": 1, "EventSourceArn": "arn:aws:dynamodb:us-east-2:123456789012:table/my-table/stream/2019-06-10T19:26:16.525", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "LastModified": 1560209851.963, "LastProcessingResult": "No records processed", "State": "Creating", "StateTransitionReason": "User action", "DestinationConfig": {}, "MaximumRecordAgeInSeconds": 604800, "BisectBatchOnFunctionError": false, "MaximumRetryAttempts": 10000 }

Los mapeos de origen de eventos leen elementos de un flujo o cola en los lotes. Incluyen varios elementos en caso de que su función los reciba. Puede configurar el tamaño del lote que el mapeo de origen de eventos envía a su función, hasta un máximo que varía según el servicio. El número de elementos en el evento puede ser menor que el tamaño del lote si no hay suficientes elementos disponibles o si el lote es demasiado grande para enviarse en un evento y tiene que dividirse.

En el ejemplo siguiente se muestra una asignación de origen de eventos que lee desde una secuencia de Kinesis. Si un lote de eventos falla todos los intentos de procesamiento, la asignación de origen de eventos envía detalles sobre el lote a una cola de SQS.


      Un mapeo de origen de eventos lee desde una Kinesis secuencia. Crea una cola de los registros localmente antes de enviarlos a la función.

El lote de eventos es el evento que Lambda envía a la función. Es un lote de registros o mensajes compilados a partir de los elementos que la asignación de origen de eventos lee desde una secuencia o cola. El tamaño del lote y otras configuraciones solo se aplican al lote de eventos.

En transmisiones, un mapeo de origen de eventos crea un iterador para cada fragmento de la transmisión y procesa los elementos de cada fragmento en orden. Puede configurar el mapeo de origen de eventos para nuevos elementos de solo lectura que aparecen en la transmisión, o para comenzar con los elementos más antiguos. Los elementos procesados no se eliminan de la transmisión y se pueden procesar a través de otras funciones o consumidores.

De forma predeterminada, si su función devuelve un error, todo el lote se procesa hasta que la función se realice correctamente o los elementos del lote caduquen. Para garantizar el procesamiento en orden, el procesamiento de los fragmentos afectadas se mantiene en pausa hasta que se resuelve el error. Puede configurar la asignación de origen de eventos para descartar eventos antiguos, restringir el número de reintentos o procesar varios lotes en paralelo. Si procesa varios lotes en paralelo, el procesamiento en orden sigue estando garantizado para cada clave de partición, pero se procesan simultáneamente varias claves de partición en el mismo fragmento.

También puede configurar la asignación de origen de eventos para enviar un registro de invocación a otro servicio cuando descarta un lote de eventos. Lambda admite los siguientes destinos para las asignaciones de origen de eventos.

  • Amazon SQS: una cola de SQS.

  • Amazon SNS: un tema de SNS.

El registro de invocación contiene detalles sobre el lote de eventos fallido en formato JSON.

El siguiente ejemplo muestra un registro de invocación para un flujo de Kinesis.

ejemplo Registro de invocación

{ "requestContext": { "requestId": "c9b8fa9f-5a7f-xmpl-af9c-0c604cde93a5", "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:myfunction", "condition": "RetryAttemptsExhausted", "approximateInvokeCount": 1 }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "version": "1.0", "timestamp": "2019-11-14T00:38:06.021Z", "KinesisBatchInfo": { "shardId": "shardId-000000000001", "startSequenceNumber": "49601189658422359378836298521827638475320189012309704722", "endSequenceNumber": "49601189658422359378836298522902373528957594348623495186", "approximateArrivalOfFirstRecord": "2019-11-14T00:38:04.835Z", "approximateArrivalOfLastRecord": "2019-11-14T00:38:05.580Z", "batchSize": 500, "streamArn": "arn:aws:kinesis:us-east-2:123456789012:stream/mystream" } }

Lambda también admite el procesamiento en orden para colas FIFO (primero en entrar, primero en salir), escalando hasta el número de grupos de mensajes activos. Para las colas estándar, los elementos no se procesan necesariamente en orden. Lambda escala para procesar una cola estándar lo más rápido posible. Cuando hay un error, los lotes se devuelven a la cola como elementos individuales y pueden procesarse en una agrupación diferente del lote original. Ocasionalmente, el mapeo de origen de eventos podría recibir el mismo elemento de la cola dos veces, incluso si no se ha producido un error de función. Lambda elimina elementos de la cola una vez que se procesan correctamente. Puede configurar la cola de origen para que envíe elementos a una cola de mensajes fallidos si no se pueden procesar.

Para obtener más información acerca de los servicios que invocan funciones de Lambda directamente, consulte Utilización de AWS Lambda con otros servicios.