Tutorial: Uso de AWS Lambda con Amazon DocumentDB Streams
En este tutorial, creará una función de Lambda básica que consuma eventos de un flujo de cambios de Amazon DocumentDB (con compatibilidad con MongoDB). Para completar este tutorial, pasará por las siguientes etapas:
-
Configure su clúster de Amazon DocumentDB, conéctese a él y active los flujos de cambios en él.
-
Cree la función de Lambda y configure el clúster de Amazon DocumentDB como origen de eventos para su función.
-
Para probar la configuración, inserte elementos en la base de datos de Amazon DocumentDB.
Creación de un clúster de Amazon DocumentDB
-
Abra la consola de Amazon DocumentDB
. En Clústeres, elija Crear. -
Cree un clúster con la siguiente configuración:
-
En Tipo de clúster, elija Clúster basado en instancias. Esta es la opción predeterminada.
-
En Configuración del clúster, asegúrese de haber seleccionado la Versión del motor 5.0.0. Esta es la opción predeterminada.
-
En Configuración de la instancia:
-
En Clase de la instancia de base de datos, seleccione Clases optimizadas para memoria. Esta es la opción predeterminada.
-
En Número de instancias de réplicas regulares, elija 1.
-
En Clase de instancia, use la selección predeterminada.
-
-
En Autenticación, ingrese un nombre de usuario para el usuario principal y, a continuación, elija Autoadministrado. Ingrese una contraseña y, a continuación, confírmela.
-
Conserve todas las otras opciones de configuración predeterminadas.
-
-
Elija Create cluster.
Crear un secreto en Secrets Manager
Mientras Amazon DocumentDB crea el clúster, cree un secreto de AWS Secrets Manager para almacenar las credenciales de la base de datos. Proporcionará este secreto cuando cree la asignación de orígenes de eventos de Lambda en un paso posterior.
Para crear un secreto en Secrets Manager
-
Abra la consola de Secrets Manager
y elija Almacenar un nuevo secreto. -
En Elegir tipo de secreto, elija las siguientes opciones:
-
En Detalles básicos:
-
Tipo de secreto: credenciales para la base de datos de Amazon DocumentDB
-
En Credenciales, ingrese el mismo nombre de usuario y la contraseña que usó para crear el clúster de Amazon DocumentDB.
-
Base de datos: elija su clúster de Amazon DocumentDB.
-
Elija Siguiente.
-
-
-
En Configurar secreto, elija las siguientes opciones:
-
Nombre del secreto:
DocumentDBSecret
-
Elija Siguiente.
-
-
Elija Siguiente.
-
Elija Almacenar.
-
Actualice la consola para comprobar que ha guardado correctamente el secreto
DocumentDBSecret
.
Anote el ARN del secreto. Lo necesitará en un paso posterior.
Conexión al clúster
Conexión al clúster de Amazon DocumentDB con AWS CloudShell
-
En la consola de administración de Amazon DocumentDB, en Clústeres, localice el clúster que ha creado. Para elegir el clúster, haga clic en la casilla de verificación situada junto a él.
-
Elija Conectarse al clúster. Aparece la pantalla Ejecutar comando de CloudShell.
-
En el campo Nombre del nuevo entorno, ingrese un nombre único, como “prueba” y elija Crear y ejecutar.
-
Escriba la contraseña cuando se le solicite. Cuando la petición se convierte en
rs0 [direct: primary] <env-name>>
, significa que se ha conectado correctamente al clúster de Amazon DocumentDB.
Activar flujos de cambios
En este tutorial, hará un seguimiento de los cambios en la colección products
de la base de datos docdbdemo
en el clúster de Amazon DocumentDB. Para ello, active los flujos de cambios.
Para crear una nueva base de datos dentro del clúster
-
Ejecute el siguiente comando para crear una nueva base de datos denominada
docdbdemo
:use docdbdemo
-
En la ventana del terminal, use el siguiente comando para insertar un registro en
docdbdemo
:db.products.insertOne({"hello":"world"})
Debería ver una salida similar a esta:
{ acknowledged: true, insertedId: ObjectId('67f85066ca526410fd531d59') }
-
A continuación, active los flujos de cambios en la colección
products
de la base de datosdocdbdemo
con el siguiente comando:db.adminCommand({modifyChangeStreams: 1, database: "docdbdemo", collection: "products", enable: true});
Debería ver un resultado con un aspecto similar al siguiente:
{ "ok" : 1, "operationTime" : Timestamp(1680126165, 1) }
Creación de puntos de conexión de VPC de interfaz
A continuación, cree puntos de conexión de VPC de interfaz para garantizar que Lambda y Secrets Manager (que se utilizarán más adelante para almacenar nuestras credenciales de acceso al clúster) puedan conectarse a su VPC predeterminada.
Cómo crear puntos de conexión de VPC de interfaz
-
Abra la consola de VPC
. En el menú de la izquierda, en Nube privada virtual, seleccione Puntos de conexión. -
Elija Crear punto de conexión. Cree un punto de conexión con la siguiente configuración:
-
En Etiqueta de nombre, ingrese
lambda-default-vpc
. -
En Categoría de servicios, elija Servicios de AWS.
-
En Servicios, ingrese
lambda
en el cuadro de búsqueda. Elija el servicio con formatocom.amazonaws.<region>.lambda
. -
En VPC, elija la VPC en la que se encuentra su clúster de Amazon DocumentDB. Suele ser la VPC predeterminada.
-
En Subredes, marque las casillas situadas junto a cada zona de disponibilidad. Elija el ID de subred correcto para cada zona de disponibilidad.
-
En Tipo de dirección IP, seleccione IPv4.
-
En Grupos de seguridad, elija el grupo de seguridad que utiliza su clúster de Amazon DocumentDB. Suele ser el grupo de seguridad
default
. -
Conserve todas las otras opciones de configuración predeterminadas.
-
Elija Crear punto de conexión.
-
-
Elija nuevamente Crear punto de conexión. Cree un punto de conexión con la siguiente configuración:
-
En Etiqueta de nombre, ingrese
secretsmanager-default-vpc
. -
En Categoría de servicios, elija Servicios de AWS.
-
En Servicios, ingrese
secretsmanager
en el cuadro de búsqueda. Elija el servicio con formatocom.amazonaws.<region>.secretsmanager
. -
En VPC, elija la VPC en la que se encuentra su clúster de Amazon DocumentDB. Suele ser la VPC predeterminada.
-
En Subredes, marque las casillas situadas junto a cada zona de disponibilidad. Elija el ID de subred correcto para cada zona de disponibilidad.
-
En Tipo de dirección IP, seleccione IPv4.
-
En Grupos de seguridad, elija el grupo de seguridad que utiliza su clúster de Amazon DocumentDB. Suele ser el grupo de seguridad
default
. -
Conserve todas las otras opciones de configuración predeterminadas.
-
Elija Crear punto de conexión.
-
Esto completa la parte de configuración del clúster de este tutorial.
Creación del rol de ejecución
En la siguiente serie de pasos, creará la función de Lambda. Primero, debe crear el rol de ejecución que concederá a su función permiso para acceder al clúster. Para ello, primero creará una política de IAM y luego asociará esta política a un rol de IAM.
Para crear una política de IAM
-
En la consola de IAM, abra la página Políticas
, y, a continuación, elija Crear política. -
Seleccione la pestaña JSON. En la siguiente política, sustituya el ARN del recurso de Secrets Manager en la última línea de la instrucción por el ARN secreto anterior y copie la política en el editor.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LambdaESMNetworkingAccess", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "LambdaDocDBESMAccess", "Effect": "Allow", "Action": [ "rds:DescribeDBClusters", "rds:DescribeDBClusterParameters", "rds:DescribeDBSubnetGroups" ], "Resource": "*" }, { "Sid": "LambdaDocDBESMGetSecretValueAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "
arn:aws:secretsmanager:us-east-1:123456789012:secret:DocumentDBSecret
" } ] } -
Elija Siguiente: Etiquetas y, a continuación, seleccione Siguiente: Revisar.
-
En Name (Nombre), ingrese
AWSDocumentDBLambdaPolicy
. -
Seleccione Crear política.
Creación del rol de IAM
-
Abra la página Roles
en la consola de IAM y elija Crear rol. -
En Seleccionar entidad de confianza, elija las siguientes opciones:
-
Tipo de entidad de confianza: servicio de AWS
-
Servicio o caso de uso: Lambda
-
Elija Siguiente.
-
-
En Agregar permisos, elija la política
AWSDocumentDBLambdaPolicy
que acaba de crear y tambiénAWSLambdaBasicExecutionRole
para conceder a su función permisos para escribir en los Registros de Amazon CloudWatch. -
Elija Siguiente.
-
En Role name (Nombre del rol), introduzca
AWSDocumentDBLambdaExecutionRole
. -
Elija Create role (Crear rol).
Crear la función de Lambda
En este tutorial, se utiliza el tiempo de ejecución de Python 3.13, pero también proporcionamos archivos de código de ejemplo para otros tiempos de ejecución. Puede seleccionar la pestaña del siguiente cuadro para ver el código del tiempo de ejecución que le interesa.
El código recibe un evento de Amazon DocumentDB como entrada y procesa el mensaje que contiene.
Para crear la función de Lambda
-
Abra la página de Functions
(Funciones) en la consola de Lambda. -
Seleccione Creación de función.
-
Elija Crear desde cero.
-
Bajo Información básica, haga lo siguiente:
-
En Nombre de la función, ingrese
ProcessDocumentDBRecords
. -
En Tiempo de ejecución, seleccione Python 3.12.
-
En Arquitectura, elija x86_64.
-
-
En la pestaña Cambiar rol de ejecución predeterminado, haga lo siguiente:
-
Amplíe la pestaña y, a continuación, elija Utilizar un rol existente.
-
Seleccione el
AWSDocumentDBLambdaExecutionRole
que creó anteriormente.
-
-
Seleccione Creación de función.
Para implementar el código de la función
-
Seleccione la pestaña Python en el siguiente cuadro y copie el código.
-
En el panel Código fuente de la consola de Lambda, pegue el siguiente código en el editor de código y sustituya el código creado por Lambda.
-
En la sección IMPLEMENTAR elija Implementar para actualizar el código de la función:
Crear la asignación de orígenes de eventos de Lambda
Cree la asignación de orígenes de eventos que asocie su flujo de cambios de Amazon DocumentDB a la función de Lambda. Una vez creada esta asignación de orígenes de eventos, AWS Lambda comienza a sondear el flujo.
Para crear la asignación de orígenes de eventos
-
Abra la página Funciones
en la consola de Lambda. -
Elija la función
ProcessDocumentDBRecords
que creó anteriormente. -
Elija la pestaña Configuración y, a continuación, elija Desencadenadores en el menú de la izquierda.
-
Elija Add trigger (Añadir disparador).
-
En Configuración del desencadenador, para el origen, seleccione Amazon DocumentDB.
-
Cree la asignación de orígenes de eventos con la siguiente configuración:
-
Clúster de Amazon DocumentDB: elija el clúster que creó anteriormente.
-
Nombre de la base de datos: docdbdemo
-
Nombre de la colección: productos
-
Tamaño del lote: 1
-
Posición inicial: más reciente
-
Autenticación: BASIC_AUTH
-
Clave de Secrets Manager: elija el secreto de su clúster de Amazon DocumentDB. Tendrá un nombre similar a
rds!cluster-12345678-a6f0-52c0-b290-db4aga89274f
. -
Intervalo del lote: 1
-
Configuración de documentos completa: UpdateLookup
-
-
Elija Agregar. Crear la asignación de orígenes de eventos puede tardar unos minutos.
Comprobación de la función de
Espere a que la asignación de orígenes de eventos llegue al estado Habilitado. Esto puede tardar varios minutos. A continuación, inserte, actualice y elimine los registros de base de datos para probar la configuración integral. Antes de empezar:
-
Vuelva a conectarse al clúster de Amazon DocumentDB en su entorno de CloudShell.
-
Ejecute el siguiente comando para asegurarse de que utiliza la base de datos
docdbdemo
:use docdbdemo
Inserte un registro en la colección products
de la base de datos docdbdemo
:
db.products.insertOne({"name":"Pencil", "price": 1.00})
Para verificar que la función procesó correctamente este evento, compruebe los Registros de CloudWatch. Debería ver un registro como este:

Actualice el registro que acaba de insertar con el siguiente comando:
db.products.updateOne( { "name": "Pencil" }, { $set: { "price": 0.50 }} )
Para verificar que la función procesó correctamente este evento, compruebe los Registros de CloudWatch. Debería ver un registro como este:

Elimine el registro que acaba de actualizar con el siguiente comando:
db.products.deleteOne( { "name": "Pencil" } )
Para verificar que la función procesó correctamente este evento, compruebe los Registros de CloudWatch. Debería ver un registro como este:

Solución de problemas
Si no ve ningún evento de base de datos en los registros de CloudWatch de la función, compruebe lo siguiente:
-
Asegúrese de que el estado de la asignación de orígenes de eventos de Lambda (también conocida como desencadenador) sea Habilitado. La creación de las asignaciones de orígenes de eventos puede tardar varios minutos.
-
Si la asignación de orígenes de eventos está habilitada, pero sigue sin ver los eventos de la base de datos en CloudWatch:
-
Asegúrese de que el nombre de la base de datos en la asignación de orígenes de eventos esté establecido en
docdbdemo
. -
Compruebe el campo Resultado del último procesamiento de la asignación de orígenes de eventos para ver el siguiente mensaje: “PROBLEMA: error de conexión. Su VPC debe poder conectarse a Lambda y STS, así como a Secrets Manager si se requiere autenticación”. Si ve este error, asegúrese de haber creado los puntos de conexión de la interfaz de VPC de Lambda y Secrets Manager y de que los puntos de conexión utilicen la misma VPC y las mismas subredes que utiliza su clúster de Amazon DocumentDB.
-
Eliminación de sus recursos
A menos que desee conservar los recursos que creó para este tutorial, puede eliminarlos ahora. Si elimina los recursos de AWS que ya no utiliza, evitará gastos innecesarios en su Cuenta de AWS.
Cómo eliminar la función de Lambda
-
Abra la página de Funciones
en la consola de Lambda. -
Seleccione la función que ha creado.
-
Elija Acciones, Eliminar.
-
Escriba
confirm
en el campo de entrada de texto y elija Delete(Eliminar).
Cómo eliminar el rol de ejecución
-
Abra la página Roles
en la consola de IAM. -
Seleccione el rol de ejecución que creó.
-
Elija Eliminar.
-
Si desea continuar, escriba el nombre del rol en el campo de entrada de texto y elija Delete (Eliminar).
Para eliminar los puntos de conexión de VPC
-
Abra la consola de VPC
. En el menú de la izquierda, en Nube privada virtual, seleccione Puntos de conexión. -
Seleccione los puntos de conexión que ha creado.
-
Elija Acciones, Eliminar puntos de conexión de VPC.
-
Introduzca
delete
en el campo de entrada de texto. -
Elija Eliminar.
Para eliminar el clúster de Amazon DocumentDB
-
Abra la consola de Amazon DocumentDB
. -
Elija el clúster de Amazon DocumentDB que creó para este tutorial y deshabilite la protección contra la eliminación.
-
En la página principal Clústeres, vuelva a elegir el clúster de Amazon DocumentDB.
-
Elija Acciones, Eliminar.
-
En Crear instantánea final del clúster, seleccione No.
-
Introduzca
delete
en el campo de entrada de texto. -
Elija Eliminar.
Para eliminar el secreto en Secrets Manager
-
Abra la consola de Secrets Manager
. -
Elija el secreto que ha creado para este tutorial.
-
Elija Acciones, Eliminar secreto.
-
Elija Schedule deletion.