View a markdown version of this page

Prácticas recomendadas para usar DynamoDB Streams con Lambda - Amazon DynamoDB

Prácticas recomendadas para usar DynamoDB Streams con Lambda

Una función AWS Lambda se ejecuta dentro de un contenedor, a saber, un entorno de ejecución aislado de las demás funciones. Cuando se ejecuta una función por primera vez, AWS Lambda crea un nuevo contenedor y comienza a ejecutar el código de la función.

Una función Lambda posee un controlador que se ejecuta una vez en cada invocación. El controlador contiene la lógica empresarial principal de la función. Por ejemplo, la función Lambda que se muestra en Paso 4: crear y probar una función Lambda tiene un controlador que puede procesar los registros de una transmisión de DynamoDB.

También puede proporcionar código de inicialización que se ejecuta una sola vez después de crear el contenedor, pero antes de que AWS Lambda ejecute el controlador por primera vez. La función Lambda que se muestra en Paso 4: crear y probar una función Lambda incluye código de inicialización que importa el SDK para JavaScript en Node.js y crea un cliente para Amazon SNS. Estos objetos únicamente deben definirse una vez, fuera del controlador.

Después de ejecutar la función, AWS Lambda puede optar por reutilizar el contenedor en invocaciones posteriores de la función. En este caso, el controlador de la función podría volver a utilizar los recursos que se han definido en el código de inicialización. (No se puede controlar durante cuánto tiempo AWS Lambda conservará el contenedor ni si este se reutilizará o no).

Para los desencadenadores de DynamoDB que utilizan AWS Lambda, recomendamos lo siguiente:

  • AWSLas instancias de los clientes de servicios de deben crearse en el código de inicialización, no en el controlador. Esto permite que AWS Lambda reutilice las conexiones existentes mientras dure la vida útil del contenedor.

  • En general, no es necesario administrar de forma explícita las conexiones ni implementar la agrupación de conexiones, porque AWS Lambda lo hace automáticamente.

Un consumidor de Lambda para un flujo de DynamoDB proporciona una entrega al menos una vez: no garantiza la entrega exactamente una vez y puede procesar el mismo registro más de una vez (por ejemplo, cuando se reintenta la invocación de una función). Esto es distinto de la garantía de DynamoDB Streams de que cada registro de transmisión aparece exactamente una vez en el flujo; esa garantía describe los registros que se almacenan en el flujo, no el número de veces que los procesa un consumidor. Para evitar problemas inesperados de procesamiento duplicado, asegúrese de que el código de la función de Lambda sea idempotente.

Para obtener más información, consulte Prácticas recomendadas para trabajar con las funciones AWS Lambda en la Guía para desarrolladores de AWS Lambda.