Cómo procesa Lambda registros de orígenes de eventos basados en secuencias y colas
Una asignación de orígenes de eventos es un recurso de Lambda que lee elementos de servicios basados en secuencias y colas e invoca una función con lotes de registros. Los siguientes servicios utilizan asignaciones de orígenes de eventos para invocar las funciones de Lambda:
aviso
Las asignaciones de orígenes de eventos de Lambda procesan cada evento al menos una vez, y puede producirse un procesamiento duplicado de registros. Para evitar posibles problemas relacionados con la duplicación de eventos, le recomendamos encarecidamente que haga que el código de la función sea idempotente. Para obtener más información, consulte ¿Cómo puedo hacer que mi función de Lambda sea idempotente?
En qué se diferencian las asignaciones de orígenes de eventos de los desencadenadores directos
Algunos servicios de AWS pueden invocar directamente las funciones de Lambda mediante desencadenadores. Estos servicios envían eventos a Lambda y la función se invoca inmediatamente cuando se produce el evento especificado. Los desencadenadores son adecuados para eventos discretos y para el procesamiento en tiempo real. Al crear un desencadenador mediante la consola de Lambda, esta interactúa con el servicio de AWS correspondiente para configurar la notificación de eventos en ese servicio. En realidad, el servicio que genera los eventos es el que almacena y administra el desencadenador, no Lambda. Estos son algunos ejemplos de servicios que utilizan desencadenadores para invocar funciones de Lambda:
-
Amazon Simple Storage Service (Amazon S3): invoca una función cuando se crea, elimina o modifica un objeto en un bucket. Para obtener más información, consulte Tutorial: Uso de un desencadenador de Amazon S3 para invocar una función de Lambda.
-
Amazon Simple Notification Service (Amazon SNS): invoca una función cuando se publica un mensaje en un tema de SNS. Para obtener más información, consulte Tutorial: Uso de AWS Lambda con Amazon Simple Notification Service.
-
Amazon API Gateway: invoca una función cuando se realiza una solicitud de la API a un punto de conexión específico. Para obtener más información, consulte Invocación de una función de Lambda mediante un punto de conexión de Amazon API Gateway.
Las asignaciones de orígenes de eventos son recursos de Lambda creados y administrados dentro del servicio Lambda. Las asignaciones de orígenes de eventos están diseñados para procesar grandes volúmenes de datos o mensajes de streaming procedentes de colas. Procesar los registros de una secuencia o una cola por lotes es más eficiente que procesar los registros de forma individual.
Comportamiento de procesamiento por lotes
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 una ventana 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 predeterminado 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 los lotes a su función solo cuando se alcanza el tamaño del lote o el límite de tamaño de la carga útil. Para establecer un plazo de procesamiento por lotes, configure
MaximumBatchingWindowInSeconds
. Puede establecer este parámetro en cualquier valor entre 0 y 300 segundos, en incrementos de 1 segundo. Si configura un plazo de procesamiento por lotes, el siguiente plazo comienza tan pronto como se completa la invocación de la función anterior.En el caso de los orígenes de eventos de Amazon MSK, Apache Kafka autoadministrado, Amazon MQ y Amazon DocumentDB: el periodo 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 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.](images/batching-window.png)
API de asignación de orígenes de eventos
Para administrar un origen de eventos con la AWS Command Line Interface (AWS CLI) o AWS SDK