Uso de Lambda con Amazon DocumentDB - AWS Lambda

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de Lambda con Amazon DocumentDB

Puede utilizar una función de Lambda para procesar eventos en un flujo de cambios de Amazon DocumentDB (con compatibilidad con MongoDB) si configura un clúster de Amazon DocumentDB como origen de eventos. A continuación, puede automatizar las cargas de trabajo basadas en eventos al invocar la función de Lambda cada vez que los datos cambien en su clúster de Amazon DocumentDB.

nota

Lambda solo es compatible con la versión 4.0 y 5.0 de Amazon DocumentDB. Lambda no es compatible con la versión 3.6.

Asimismo, en el caso de las asignaciones de orígenes de eventos, Lambda solo es compatible con clústeres basados en instancias y clústeres regionales. Lambda no admite clústeres elásticos ni clústeres globales. Esta limitación no se aplica cuando se utiliza Lambda como cliente para conectarse a Amazon DocumentDB. Lambda puede conectarse a todos los tipos de clústeres para realizar operaciones CRUD.

Lambda procesa los eventos de los flujos de cambios de Amazon DocumentDB de forma secuencial en el orden en que llegan. Por este motivo, la función solo puede gestionar una invocación simultánea desde DocumentDB a la vez. Para monitorear su función, puede realizar un seguimiento de sus métricas de simultaneidad.

aviso

Las asignaciones de orígenes de eventos de Lambda procesan cada evento al menos una vez y puede producirse un procesamiento duplicado de lotes. 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 el Centro de conocimientos de AWS.

Ejemplo de evento de Amazon DocumentDB

{ "eventSourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:canaryclusterb2a659a2-qo5tcmqkcl03", "events": [ { "event": { "_id": { "_data": "0163eeb6e7000000090100000009000041e1" }, "clusterTime": { "$timestamp": { "t": 1676588775, "i": 9 } }, "documentKey": { "_id": { "$oid": "63eeb6e7d418cd98afb1c1d7" } }, "fullDocument": { "_id": { "$oid": "63eeb6e7d418cd98afb1c1d7" }, "anyField": "sampleValue" }, "ns": { "db": "test_database", "coll": "test_collection" }, "operationType": "insert" } } ], "eventSource": "aws:docdb" }

Para obtener más información sobre los eventos de este ejemplo y sus formas, consulte Eventos de cambio en el sitio web de la documentación de MongoDB.

Requisitos previos y permisos

Antes de utilizar Amazon DocumentDB como un origen de eventos para su función de Lambda, tenga en cuenta los siguientes requisitos previos. Debe hacer lo siguiente:

  • Tener un clúster de Amazon DocumentDB existente en la misma Cuenta de AWS y Región de AWS que su función. Si no dispone de un clúster existente, puede crearlo mediante los pasos de Introducción a Amazon DocumentDB en la Guía para desarrolladores de Amazon DocumentDB. Como alternativa, el primer conjunto de pasos en Tutorial: Uso de AWS Lambda con Amazon DocumentDB Streams lo guiará para crear un clúster de DocumentDB con todos los requisitos previos necesarios.

  • Permitir que Lambda tenga acceso a los recursos de Amazon Virtual Private Cloud (Amazon VPC) asociados a su clúster de Amazon DocumentDB. Para obtener más información, consulte Configuración de red.

  • Habilitar TLS en su clúster de Amazon DocumentDB. Este es el valor predeterminado. Si deshabilita TLS, Lambda no podrá comunicarse con el clúster.

  • Activar los flujos de cambios en su clúster de Amazon DocumentDB. Para obtener más información, consulte Uso de flujos de cambios de Amazon DocumentDB en la Guía para desarrolladores de Amazon DocumentDB.

  • Proporcionar a Lambda las credenciales para acceder a su clúster de Amazon DocumentDB. Al configurar el origen de eventos, proporcione la clave de AWS Secrets Manager que contiene los detalles de autenticación (nombre de usuario y contraseña) necesarios para acceder al clúster. Para proporcionar esta clave durante la configuración, puede realizar uno de los siguientes procedimientos:

    • Si está utilizando la consola de Lambda para la configuración, proporcione la clave en el campo Clave del administrador de secretos.

    • Si está utilizando la AWS Command Line Interface (AWS CLI), introduzca esta clave en la opción source-access-configurations. Puede incluir esta opción con los comandos create-event-source-mapping o update-event-source-mapping. Por ejemplo:

      aws lambda create-event-source-mapping \ ... --source-access-configurations '[{"Type":"BASIC_AUTH","URI":"arn:aws:secretsmanager:us-west-2:123456789012:secret:DocDBSecret-AbC4E6"}]' \ ...
  • Conceder permisos a Lambda para administrar los recursos relacionados con el flujo de Amazon DocumentDB. Agregue los siguientes permisos de forma manual al rol de ejecución de su función:

  • Mantener el tamaño de los eventos del flujo de cambios de Amazon DocumentDB que envíe a Lambda por debajo de 6 MB. Lambda admite tamaños de carga de hasta 6 MB. Si el flujo de cambios intenta enviar a Lambda un evento de más de 6 MB, Lambda elimina el mensaje y emite la métrica OversizedRecordCount. Lambda emite todas las métricas dentro de lo posible.

nota

Si bien las funciones de Lambda suelen tener un límite de tiempo de espera máximo de 15 minutos, las asignaciones de orígenes de eventos para Amazon MSK, Apache Kafka autoadministrado, Amazon DocumentDB y Amazon MQ para ActiveMQ y RabbitMQ solo admiten funciones con límites de tiempo de espera máximos de 14 minutos. Esta restricción garantiza que la asignación de orígenes de eventos pueda gestionar correctamente los errores y reintentos de las funciones.

Configuración de red

Lambda debe tener acceso a los recursos de Amazon VPC asociados a su clúster de Amazon DocumentDB. De forma predeterminada, el puerto del clúster de Amazon DocumentDB es 27017, pero puede cambiarlo. Si cambia el puerto, modifique la configuración del grupo de seguridad en consecuencia. Si configuró un secreto en Secrets Manager para autenticar Lambda con los clústeres, implemente también un punto de conexión de VPC para Secrets Manager.

De manera alternativa, asegúrese de que la VPC asociada a su clúster de Amazon DocumentDB incluya una puerta de enlace de NAT por subred pública. Para obtener más información, consulte Acceso a Internet y a los servicios para funciones conectadas a la VPC.

Configure sus grupos de seguridad de Amazon VPC con las siguientes reglas (como mínimo):

  • Reglas de entrada

    • Para los grupos de seguridad que especifique en el origen de eventos, permita todo el tráfico en el puerto del clúster de Amazon DocumentDB (27017 de forma predeterminada).

    • (Solo puntos de conexión de VPC) Para los grupos de seguridad asociados a los puntos de conexión de VPC, permita todo el tráfico en el puerto 443 desde los grupos de seguridad que especifique para el origen de eventos.

  • Reglas de salida

    • Para todos los destinos, permita todo el tráfico en el puerto 443.

    • Para los grupos de seguridad que especifique en el origen de eventos, permita todo el tráfico en el puerto del clúster de Amazon DocumentDB (27017 de forma predeterminada).

Creación de una asignación de orígenes de eventos de Amazon DocumentDB (consola)

Para configurar una función de Lambda que lea desde un flujo de cambios de un clúster de Amazon DocumentDB, cree una asignación de orígenes de eventos. En esta sección, se describe cómo hacer esto desde la consola. Para obtener las instrucciones de AWS SDK y la AWS CLI, consulte Creación de una asignación de orígenes de eventos de Amazon DocumentDB (SDK o CLI).

Para crear una asignación de orígenes de eventos de Amazon DocumentDB (consola)
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija el nombre de una función.

  3. En Descripción general de la función, elija Agregar desencadenador.

  4. En Configuración del desencadenador, seleccione DocumentDB de la lista desplegable.

  5. Configure las opciones requeridas y luego elija Agregar.

Lambda admite las siguientes opciones para los orígenes de eventos de Amazon DocumentDB:

  • Clúster de DocumentDB: seleccione un clúster de Amazon DocumentDB.

  • Activar el desencadenador: elija si desea activar el desencadenador de forma inmediata. Si marca esta casilla, la función comenzará a recibir tráfico de forma inmediata del flujo de cambios de Amazon DocumentDB que se especificó al crear la asignación de orígenes de eventos. Recomendamos desmarcar la casilla para crear la asignación de orígenes de eventos en un estado desactivado para realizar pruebas. Tras la creación, puede activar la asignación de orígenes de eventos en cualquier momento.

  • Nombre de base de datos: introduzca el nombre de una base de datos dentro del clúster a consumir.

  • (Opcional) Nombre de la colección: ingrese el nombre de la colección dentro de la base de datos que se va a consumir. Si no especifica una colección, Lambda escucha todos los eventos de cada colección en la base de datos.

  • Tamaño del lote: establezca el número máximo de mensajes que se recuperarán en un solo lote, con un máximo de 10 000. El tamaño predeterminado del lote es de 100.

  • Posición inicial: elija la posición en el flujo desde la que desea comenzar a leer los registros.

    • Más recientes: procesa solo los registros nuevos que se agreguen al flujo principal. La función comienza a procesar registros solo después de que Lambda termina de crear el origen de eventos. Esto significa que es posible que se eliminen algunos registros hasta que el origen de eventos se haya creado correctamente.

    • Horizonte de supresión: procesar todos los registros del flujo. Lambda utiliza la duración de retención de registros de su clúster para determinar desde dónde comenzar a leer los eventos. En concreto, Lambda comienza a leer desde current_time - log_retention_duration. Su flujo de cambios ya debe estar activo antes de esta marca de tiempo para que Lambda lea de forma correcta todos los eventos.

    • En marca temporal: procesar los registros comenzando a partir de un momento determinado. Su flujo de cambios ya debe estar activo antes de la marca de tiempo especificada para que Lambda lea de forma correcta todos los eventos.

  • Autenticación: elija el método de autenticación para acceder a los agentes en su clúster.

    • BASIC_AUTH: con la autenticación básica, debe proporcionar la clave de Secrets Manager que contiene las credenciales para acceder al clúster.

  • Clave de Secrets Manager: elija la clave de Secrets Manager que contiene los detalles de autenticación (nombre de usuario y contraseña) necesarios para acceder al clúster de Amazon DocumentDB.

  • (Opcional) Intervalo de lote: la cantidad de tiempo máxima para recopilar registros antes de invocar la función, arriba de 300.

  • (Opcional) Configuración completa del documento: para las operaciones de actualización de los documentos, elija lo que desea enviar al flujo. El valor predeterminado es Default, lo que significa que, para cada evento de flujo de cambios, Amazon DocumentDB envía solo un delta que describe los cambios realizados. Para obtener más información sobre este campo, consulte FullDocument en la documentación de la API de Javadocs para MongoDB.

    • Predeterminado: Lambda envía solo un documento parcial que describe los cambios realizados.

    • UpdateLookup: Lambda envía un delta que describe los cambios, junto con una copia del documento completo.

Creación de una asignación de orígenes de eventos de Amazon DocumentDB (SDK o CLI)

Para crear o administrar una asignación de orígenes de eventos de Amazon DocumentDB con AWS SDK, puede utilizar las siguientes operaciones de la API:

Para crear la asignación de orígenes de eventos con la AWS CLI, use el comando create-event-source-mapping. En el siguiente ejemplo, se utiliza este comando para asignar una función denominada my-function a un flujo de cambios de Amazon DocumentDB. El origen del evento se especifica mediante un nombre de recurso de Amazon (ARN) con un tamaño de lote de 500, que comienza desde una marca temporal en tiempo Unix. El comando también especifica la clave de Secrets Manager que Lambda utiliza para conectarse a Amazon DocumentDB. Además, incluye parámetros document-db-event-source-config que especifican la base de datos y la colección desde la que se va a leer.

aws lambda create-event-source-mapping --function-name my-function \ --event-source-arn arn:aws:rds:us-west-2:123456789012:cluster:privatecluster7de2-epzcyvu4pjoy --batch-size 500 \ --starting-position AT_TIMESTAMP \ --starting-position-timestamp 1541139109 \ --source-access-configurations '[{"Type":"BASIC_AUTH","URI":"arn:aws:secretsmanager:us-east-1:123456789012:secret:DocDBSecret-BAtjxi"}]' \ --document-db-event-source-config '{"DatabaseName":"test_database", "CollectionName": "test_collection"}' \

Debería ver un resultado con un aspecto similar al siguiente:

{ "UUID": "2b733gdc-8ac3-cdf5-af3a-1827b3b11284", "BatchSize": 500, "DocumentDBEventSourceConfig": { "CollectionName": "test_collection", "DatabaseName": "test_database", "FullDocument": "Default" }, "MaximumBatchingWindowInSeconds": 0, "EventSourceArn": "arn:aws:rds:us-west-2:123456789012:cluster:privatecluster7de2-epzcyvu4pjoy", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "LastModified": 1541348195.412, "LastProcessingResult": "No records processed", "State": "Creating", "StateTransitionReason": "User action" }

Tras la creación, puede utilizar el comando update-event-source-mapping para actualizar la configuración relacionada con el origen de eventos de Amazon DocumentDB. El siguiente comando actualiza el tamaño del lote a 1000 y el intervalo del lote a 10 segundos. Para este comando, necesita el UUID de la asignación de orígenes de eventos, que puede recuperar mediante el comando list-event-source-mapping o desde la consola de Lambda.

aws lambda update-event-source-mapping --function-name my-function \ --uuid f89f8514-cdd9-4602-9e1f-01a5b77d449b \ --batch-size 1000 \ --batch-window 10

Debería ver esta salida con un aspecto similar al siguiente:

{ "UUID": "2b733gdc-8ac3-cdf5-af3a-1827b3b11284", "BatchSize": 500, "DocumentDBEventSourceConfig": { "CollectionName": "test_collection", "DatabaseName": "test_database", "FullDocument": "Default" }, "MaximumBatchingWindowInSeconds": 0, "EventSourceArn": "arn:aws:rds:us-west-2:123456789012:cluster:privatecluster7de2-epzcyvu4pjoy", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "LastModified": 1541359182.919, "LastProcessingResult": "OK", "State": "Updating", "StateTransitionReason": "User action" }

Lambda actualiza la configuración de forma asíncrona, por lo que es posible que no vea estos cambios en la salida hasta que se complete el proceso. Para ver la configuración actual de la asignación de orígenes de eventos, utilice el comando get-event-source-mapping.

aws lambda get-event-source-mapping --uuid f89f8514-cdd9-4602-9e1f-01a5b77d449b

Debería ver esta salida con un aspecto similar al siguiente:

{ "UUID": "2b733gdc-8ac3-cdf5-af3a-1827b3b11284", "DocumentDBEventSourceConfig": { "CollectionName": "test_collection", "DatabaseName": "test_database", "FullDocument": "Default" }, "BatchSize": 1000, "MaximumBatchingWindowInSeconds": 10, "EventSourceArn": "arn:aws:rds:us-west-2:123456789012:cluster:privatecluster7de2-epzcyvu4pjoy", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "LastModified": 1541359182.919, "LastProcessingResult": "OK", "State": "Enabled", "StateTransitionReason": "User action" }

Para eliminar la asignación de orígenes de eventos de Amazon DocumentDB, utilice el comando delete-event-source-mapping.

aws lambda delete-event-source-mapping \ --uuid 2b733gdc-8ac3-cdf5-af3a-1827b3b11284

Posiciones iniciales de flujos y sondeo

Tenga en cuenta que el sondeo de flujos durante la creación y las actualizaciones de la asignación de orígenes de eventos es, en última instancia, coherente.

  • Durante la creación de la asignación de orígenes de eventos, es posible que se demore varios minutos en iniciar el sondeo de los eventos del flujo.

  • Durante las actualizaciones de la asignación de orígenes de eventos, es posible que se demore varios minutos en detener y reiniciar el sondeo de los eventos del flujo.

Este comportamiento significa que, si especifica LATEST como posición inicial del flujo, la asignación de orígenes de eventos podría omitir eventos durante la creación o las actualizaciones. Para garantizar que no se pierda ningún evento, especifique la posición inicial del flujo como TRIM_HORIZON o AT_TIMESTAMP.

Monitoreo del origen de eventos de Amazon DocumentDB

Para ayudarlo a monitorear el origen de eventos de Amazon DocumentDB, Lambda emite la métrica IteratorAge cuando su función termina de procesar un lote de registros. La antigüedad del iterador es la diferencia entre la marca de tiempo del evento más reciente y la marca de tiempo actual. En esencia, la métrica IteratorAge indica la antigüedad del último registro procesado del lote. Si la función está procesando nuevos eventos en este momento, puede utilizar la antigüedad del iterador para estimar la latencia entre cuando un registro se agrega y cuando la función lo procesa.

Una tendencia ascendente en IteratorAge puede indicar problemas con la función. Para obtener más información, consulte Uso de métricas de funciones de Lambda.

Lambda admite cargas de hasta 6 MB. Sin embargo, los eventos del flujo de cambios de Amazon DocumentDB pueden tener un tamaño de hasta 16 MB. Si el flujo de cambios intenta enviar a Lambda un evento de flujo de cambios de más de 6 MB, Lambda elimina el mensaje y emite la métrica OversizedRecordCount. Lambda emite todas las métricas dentro de lo posible.