Asignaciones de orígenes de eventos con funciones duraderas
Las funciones duraderas funcionan con todas las asignaciones de orígenes de eventos de Lambda. Configure las asignaciones de orígenes de eventos para funciones duraderas del mismo modo que las configura para funciones estándar. Las asignaciones de orígenes de eventos sondean automáticamente los orígenes de eventos, como Amazon SQS, Kinesis y DynamoDB Streams, e invocan su función con lotes de registros.
Las asignaciones de orígenes de eventos son útiles para funciones duraderas que procesan flujos o colas con flujos de trabajo complejos de varios pasos. Por ejemplo, puede crear una función duradera que procese los mensajes de Amazon SQS con reintentos, llamadas a la API externas y aprobaciones humanas.
Cómo invocar asignaciones de orígenes de eventos con funciones duraderas
Las asignaciones de orígenes de eventos invocan funciones duraderas de forma sincrónica; por ello, esperan a que finalice la ejecución duradera completa antes de procesar el siguiente lote o marcar los registros como procesados. Si el tiempo total de la ejecución duradera supera los 15 minutos, se agota el tiempo de espera de la ejecución y se produce un error. La asignación de orígenes de eventos recibe una excepción de tiempo de espera y la gestiona de acuerdo con su configuración de reintentos.
Límite de ejecución de 15 minutos
Cuando las asignaciones de orígenes de eventos invocan funciones duraderas, la duración total de la ejecución duradera no puede superar los 15 minutos. Este límite se aplica a toda la ejecución duradera, desde el principio hasta la finalización, no solo a las invocaciones de funciones individuales.
Este límite de 15 minutos es independiente del tiempo de espera de la función de Lambda (también 15 minutos como máximo). El tiempo de espera de la función controla cuánto tiempo puede ejecutarse cada invocación individual, mientras que el tiempo de espera de la ejecución duradera controla el tiempo total transcurrido desde el inicio de la ejecución hasta su finalización.
Ejemplos de escenarios:
-
Válido: una función duradera procesa un mensaje de Amazon SQS en tres pasos, cada uno de los cuales dura 2 minutos, y luego espera 5 minutos antes de completar el último paso. Tiempo total de ejecución: 11 minutos. Esto funciona porque el total es inferior a 15 minutos.
-
Inválido: una función duradera procesa un mensaje de Amazon SQS, completa el procesamiento inicial en 2 minutos y luego espera 20 minutos por una devolución de llamada externa antes de completarlo. Tiempo total de ejecución: 22 minutos. Si se supera el límite de 15 minutos, se producirá un error.
-
Inválido: una función duradera procesa un registro de Kinesis con varias operaciones de espera que suman un total de 30 minutos entre los pasos. Aunque cada invocación individual se completa rápidamente, el tiempo total de ejecución supera los 15 minutos.
importante
Configure el tiempo de espera de la ejecución duradera en 15 minutos o menos cuando utilice asignaciones de orígenes de eventos; de lo contrario, la creación de la asignación de orígenes de eventos fallará. Si su flujo de trabajo requiere tiempos de ejecución más prolongados, utilice el patrón de funciones intermedias que se describe a continuación.
Configuración de asignaciones de orígenes de eventos
Configure las asignaciones de orígenes de eventos para funciones duraderas mediante la consola Lambda, la AWS CLI, o los AWS SDK. Todas las propiedades de la asignación de orígenes de eventos estándar se aplican a las funciones duraderas:
aws lambda create-event-source-mapping \ --function-name arn:aws:lambda:us-east-1:123456789012:function:my-durable-function:1 \ --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \ --batch-size 10 \ --maximum-batching-window-in-seconds 5
Recuerde utilizar un ARN calificado (con número de versión o alias) cuando configure las asignaciones de orígenes de eventos para funciones duraderas.
Gestión de errores con asignaciones de orígenes de eventos
Las asignaciones de orígenes de eventos proporcionan una gestión de errores integrada compatible con funciones duraderas:
-
Comportamiento de reintento: si la invocación inicial falla, la asignación de orígenes de eventos hace un reintento de acuerdo con su configuración de reintentos. Configure el número máximo de reintentos y los intervalos de reintento en función de sus requisitos.
-
Colas de mensajes fallidos: configure una cola de mensajes fallidos para capturar los registros que fallan después de todos los reintentos. Esto evita la pérdida de mensajes y permite la inspección manual de los registros fallidos.
-
Errores de lotes parciales: en el caso de Amazon SQS y Kinesis, utilice los informes de errores de lotes parciales para procesar los registros de forma individual y reintentar solo los registros fallidos.
-
Segmentado en caso de error: en el caso de Kinesis y DynamoDB Streams, habilite el segmentado en caso de error para dividir los lotes fallidos y aislar los registros problemáticos.
nota
Las funciones duraderas admiten colas de mensajes fallidos (DLQ) para la gestión de errores, pero no admiten destinos de Lambda. Configure una DLQ para capturar los registros de las invocaciones fallidas.
Para obtener información completa sobre la gestión de errores en la asignación de orígenes de eventos, consulte la asignación de orígenes de eventos.
Uso de una función intermedia para flujos de trabajo de larga duración
Si el flujo de trabajo requiere más de 15 minutos para completarse, utilice una función estándar intermedia de Lambda entre la asignación de orígenes de eventos y su función duradera. La función intermedia recibe los eventos de la asignación de orígenes de eventos e invoca la función duradera de forma asíncrona, lo que elimina el límite de ejecución de 15 minutos.
Este patrón desacopla el modelo de invocación sincrónica de la asignación de orígenes de eventos del modelo de ejecución de larga duración de la función duradera. La asignación de orígenes de eventos invoca la función intermedia, que regresa rápidamente después de iniciar la ejecución duradera. A continuación, la función duradera se ejecuta de forma independiente durante el tiempo que sea necesario (hasta 1 año).
Arquitectura
El patrón de funciones intermedias utiliza tres componentes:
-
Asignación de orígenes de eventos: sondea el origen de eventos (Amazon SQS, Kinesis, DynamoDB Streams) e invoca la función intermedia de forma sincrónica con lotes de registros.
-
Función intermedia: función estándar de Lambda que recibe eventos de la asignación de orígenes de eventos, valida y transforma los datos (si es necesario) e invoca la función duradera de forma asíncrona. Esta función se completa rápidamente (en general en menos de 1 segundo) y devuelve el control a la asignación de orígenes de eventos.
-
Función duradera: procesa el evento con una lógica compleja de varios pasos que puede ejecutarse durante períodos prolongados. Se invoca de forma asíncrona, por lo que no está limitada por el límite de 15 minutos.
Implementación
La función intermedia recibe el evento completo de la asignación de orígenes de eventos e invoca la función duradera de forma asíncrona. Utilice el parámetro del nombre de la ejecución para garantizar que se inicie una ejecución idempotente, lo que evitará que se duplique el procesamiento si la asignación de orígenes de eventos hace un reintento:
En el caso de la idempotencia en la propia función intermedia, utilice Powertools para AWS Lambda para evitar que se dupliquen las invocaciones de la función duradera si la asignación de orígenes de eventos reintenta la función intermedia.
La función duradera recibe la carga útil con el nombre de la ejecución y procesa todos los registros con una lógica de larga duración:
Consideraciones clave
Este patrón elimina el límite de ejecución de 15 minutos al desvincular la asignación de orígenes de eventos de la ejecución duradera. La función intermedia regresa inmediatamente después de iniciar la ejecución duradera, lo que permite que la asignación de orígenes de eventos continúe procesándose. A continuación, la función duradera se ejecuta de forma independiente durante el tiempo que sea necesario.
La función intermedia tiene éxito cuando invoca la función duradera, no cuando se completa la ejecución duradera. Si la ejecución duradera falla más adelante, la asignación de orígenes de eventos no hará un reintento porque ya procesó el lote correctamente. Implemente la gestión de errores en la función duradera y configure las colas de mensajes fallidos para las ejecuciones fallidas.
Utilice el parámetro del nombre de la ejecución para garantizar que se inicie una ejecución idempotente. Si la asignación de orígenes de eventos reintenta la función intermedia, la función duradera no iniciará una ejecución duplicada porque el nombre de la ejecución ya existe.
Orígenes de eventos compatibles
Las funciones duraderas admiten todos los orígenes de eventos de Lambda que utilizan asignaciones de orígenes de eventos:
Colas de Amazon SQS (estándar y FIFO)
Flujos de Kinesis
DynamoDB Streams
Amazon Managed Streaming for Apache Kafka (Amazon MSK)
Apache Kafka autoadministrado
Amazon MQ (ActiveMQ y RabbitMQ)
Flujos de cambios de Amazon DocumentDB
Todos los tipos de orígenes de eventos están sujetos al límite de ejecución duradera de 15 minutos cuando se invocan funciones duraderas.