Asignación de origen de eventos de Lambda - AWS Lambda

Asignación de origen de eventos de Lambda

Una asignación de origen de eventos es un recurso de 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 asignaciones de origen de eventos para 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 Command Line Interface (AWS CLI) o AWS SDK, 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 cola de DynamoDB especificada mediante su 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 --maximum-batching-window-in-seconds 5 --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": 5, "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 }

Comportamiento de procesamiento por lotes

Las asignaciones de origen de eventos leen elementos de un origen de eventos de destino. De forma predeterminada, una asignación de origen de eventos agrupa los registros en una sola carga que Lambda envía a su función. Para ajustar el comportamiento de procesamiento por lotes, puede configurar un plazo de procesamiento por lotes (MaximumBatchingWindowInSeconds) y un tamaño del lote (BatchSize). Un periodo de procesamiento por lotes es la cantidad de tiempo máxima para recopilar registros en una sola carga. El tamaño del lote es el número máximo de registros de un solo lote. Lambda invoca su función cuando se cumple uno de los tres criterios siguientes:

  • El plazo de procesamiento por lotes alcanza su valor máximo. El comportamiento del plazo de procesamiento por lotes varía en función del origen de eventos específico.

    • Para los orígenes de eventos de Kinesis, DynamoDB y Amazon SQS: el plazo de procesamiento por lotes predeterminado es de 0 segundos. Esto significa que Lambda envía lotes a la función lo más rápido posible. Si configura MaximumBatchingWindowInSeconds, el siguiente plazo de procesamiento por lotes comienza tan pronto como se complete la invocación de la función anterior.

    • Para los orígenes de eventos de Amazon MSK, autoadministrados de Apache Kafka y Amazon MQ: el plazo de procesamiento por lotes predeterminado es de 500 ms. Puede configurar MaximumBatchingWindowInSeconds como cualquier valor entre 0 segundos y 300 segundos, en incrementos de segundos. Un plazo de procesamiento por lotes comienza en cuanto llega el primer registro.

      nota

      Como solo puede cambiar MaximumBatchingWindowInSeconds en incrementos de segundos, no puede volver al plazo de procesamiento por lotes predeterminado de 500 ms después de haberlo cambiado. Para restaurar el plazo de procesamiento por lotes predeterminado, debe crear una nueva asignación de origen de eventos.

  • Se cumple el tamaño del lote. El tamaño mínimo del lote es 1. El tamaño predeterminado y máximo del lote depende del origen de eventos. Para obtener más información sobre estos valores, consulte la especificación de BatchSize para la operación de la API de CreateEventSourceMapping.

  • El tamaño de la carga alcanza los 6 MB. Este límite no se puede modificar.

En el siguiente diagrama se ilustran estas tres condiciones. Supongamos que un plazo de procesamiento por lotes comienza a los t = 7 segundos. En el primer escenario, el plazo de procesamiento por lotes alcanza su máximo de 40 segundos a los t = 47 segundos después de acumular 5 registros. En el segundo escenario, el tamaño del lote llega a 10 antes de que venza el plazo de procesamiento por lotes, por lo que el plazo de procesamiento por lotes finaliza antes de tiempo. En el tercer escenario, se alcanza el tamaño máximo de la carga antes de que venza el plazo de procesamiento por lotes, por lo que el plazo de procesamiento por lotes finaliza antes de tiempo.


        Un plazo de procesamiento por lotes vence cuando se cumple uno de los tres criterios siguientes: el plazo de procesamiento por lotes alcanza su valor máximo, se cumple el tamaño del lote o el tamaño de la carga alcanza los 6 MB.

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 secuencia de Kinesis. 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 hasta que vence el plazo de procesamiento por lotes actual.

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 del flujo y se pueden procesar a través de otras funciones o consumidores.

De forma predeterminada, si su función devuelve un error, la asignación de origen de eventos vuelve a procesar todo el lote hasta que la función se complete correctamente o los elementos del lote venzan. Para garantizar el procesamiento en orden, la asignación de origen de eventos mantiene en pausa el procesamiento de la partición afectada 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 la asignación de origen de eventos procesa simultáneamente varias claves de partición en la misma partición.

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 es compatible con los siguientesDestinos para mapeos de orígenes 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 se produce un error, Lambda devuelve los lotes a la cola como elementos individuales y puede procesarlos en un grupo 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 la 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 Lambda no puede procesarlos.

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.