View a markdown version of this page

Idempotencia - AWS Lambda

Idempotencia

Las funciones duraderas proporcionan una idempotencia integrada para los inicios de la ejecución a través de los nombres de ejecución. Cuando proporciona un nombre de ejecución, Lambda lo usa para evitar ejecuciones duplicadas y habilitar reintentos seguros de las solicitudes de invocación. De forma predeterminada, los pasos tienen una semántica de ejecución de como mínimo una vez. Durante la reproducción, el SDK devuelve los resultados comprobados sin volver a ejecutar los pasos completados, pero su lógica empresarial debe ser idempotente para gestionar los posibles reintentos antes de que se completen.

nota

Las asignaciones de orígenes de eventos (ESM) de Lambda no admiten la idempotencia en el momento del lanzamiento. Por lo tanto, cada invocación (incluidos los reintentos) inicia una nueva ejecución duradera. Para garantizar una ejecución idempotente con asignaciones de orígenes de eventos, implemente la lógica de idempotencia en el código de su función, como con Powertools para AWS Lambda o utilice una función de Lambda normal como proxy (despachador) para invocar una función duradera con una clave de idempotencia (parámetro del nombre de la ejecución).

Nombres de ejecución

Puede proporcionar un nombre de ejecución cuando invoca una función duradera. El nombre de la ejecución actúa como clave de idempotencia, lo que permite reintentar las solicitudes de invocación de forma segura sin crear ejecuciones duplicadas. Si no proporciona un nombre, Lambda genera automáticamente un identificador de ejecución único.

Los nombres de ejecución deben ser únicos dentro de su cuenta y región. Cuando invoca una función con un nombre de ejecución que ya existe, el comportamiento de Lambda depende del estado de la ejecución existente y de si la carga útil coincide.

Comportamiento de idempotencia

En la siguiente tabla, se describe cómo Lambda gestiona las solicitudes de invocación en función de si proporciona un nombre de ejecución, el estado de ejecución existente y si la carga útil coincide:

Escenario ¿Se proporcionó un nombre? Estado de ejecución existente ¿Carga útil idéntica? Comportamiento
1 No N/A N/A Nueva ejecución iniciada: Lambda genera un identificador de ejecución único e inicia una nueva ejecución.
2 Nunca existió o la retención caducó. N/A Nueva ejecución iniciada: Lambda inicia una nueva ejecución con el nombre proporcionado.
3 Ejecutar Inicio idempotente: Lambda devuelve la información de ejecución existente sin iniciar un duplicado. En el caso de las invocaciones sincrónicas, esto actúa como una reconexión a la ejecución en ejecución.
4 Ejecutar No Error: Lambda devuelve un error de DurableExecutionAlreadyExists porque ya se está ejecutando una ejecución con este nombre con una carga útil diferente.
5 Cerrado (satisfactorio, fallido, detenido o agotado el tiempo de espera) Inicio idempotente: Lambda devuelve la información de ejecución existente sin iniciar una nueva ejecución. Se devuelve el resultado de la ejecución cerrada.
6 Cerrado (satisfactorio, fallido, detenido o agotado el tiempo de espera) No Error: Lambda devuelve un error de DurableExecutionAlreadyExists porque una ejecución con este nombre ya se completó con una carga útil diferente.
Nota

Los escenarios 3 y 5 demuestran un comportamiento idempotente en el que Lambda gestiona de forma segura las solicitudes de invocación duplicadas al devolver la información de ejecución existente en lugar de crear duplicados.

Idempotencia escalonada

De forma predeterminada, los pasos tienen una semántica de ejecución de como mínimo una vez. Cuando la función se reproduce tras una espera, una devolución de llamada o un error, el SDK compara cada paso con el registro de los puntos de control. En el caso de los pasos que ya se hayan completado, el SDK devuelve el resultado del punto de control sin volver a ejecutar la lógica escalonada. Sin embargo, si un paso falla o la función se interrumpe antes de que se complete, es posible que el paso se ejecute varias veces.

La lógica empresarial en sus pasos debe ser idempotente para gestionar posibles reintentos. Utilice claves de idempotencia para asegurarse de que las operaciones como los pagos o la escritura de bases de datos se ejecuten solo una vez, incluso si se reintenta el paso. Consulte Idempotency and retries en la Guía para desarrolladores del SDK de ejecución duradera de AWS para obtener más información sobre cómo codificar la idempotencia.