Integración de DynamoDB con Amazon EventBridge
Amazon DynamoDB ofrece DynamoDB Streams para la captura de datos de cambios, lo que permite capturar los cambios en elementos en las tablas de DynamoDB. DynamoDB Streams puede invocar funciones de Lambda para procesar esos cambios; de esta forma, se puede utilizar una integración basada en eventos con otros servicios y aplicaciones. DynamoDB Streams también admite el filtrado, lo que permite realizar un procesamiento de eventos eficaz y específico.
DynamoDB Streams admite hasta dos consumidores simultáneos por partición y permite realizar el filtrado mediante filtrado de eventos de Lambda para que solo se procesen los elementos que cumplan unos criterios específicos. Puede que algunos clientes necesiten atender a más de dos consumidores. Es posible que otros tengan que enriquecer los eventos de cambio antes de procesarlos o utilizar un filtrado y enrutamiento más avanzados.
La integración de DynamoDB con EventBridge puede satisfacer esos requisitos.
Amazon EventBridge es un servicio sin servidor que utiliza eventos para conectar los componentes de la aplicación entre sí, lo que facilita la creación de aplicaciones escalables basadas en eventos. EventBridge ofrece una integración nativa con Amazon DynamoDB a través de canalizaciones de EventBridge, lo que permite conseguir un flujo de datos sin interrupciones desde DynamoDB a un bus de EventBridge. Luego, ese bus puede distribuirse a múltiples aplicaciones y servicios mediante un conjunto de reglas y objetivos.
Funcionamiento
La integración entre DynamoDB y las canalizaciones de EventBridge utiliza DynamoDB Streams para capturar una secuencia ordenada en el tiempo de cambios en elementos en una tabla de DynamoDB. Cada registro que se captura de esta manera contiene los datos modificados de la tabla.
Una canalización de EventBridge consume eventos de DynamoDB Streams y los enruta a un destino, como un bus de EventBridge (un bus de eventos es un enrutador que recibe eventos y los entrega en un punto, que también se denomina destino). La entrega se basa en reglas que coinciden con el contenido del evento. Opcionalmente, la canalización también incluye la capacidad de filtrar eventos específicos y realizar enriquecimientos en los datos de eventos antes de enviarlos al destino.
Aunque EventBridge admite varios tipos de destinos, una opción habitual a la hora de implementar un diseño de distribución es utilizar una función de Lambda como destino. El siguiente ejemplo demuestra una integración con un destino de una función de Lambda.
Creación de una integración a través de la consola
Siga los pasos que se indican a continuación para crear una integración mediante la AWS Management Console.
-
Habilite DynamoDB Streams en la tabla de origen. Para ello, siga los pasos de la sección Habilitación de una secuencia de la Guía para desarrolladores de DynamoDB. Si DynamoDB Streams ya está habilitado en la tabla de origen, compruebe que actualmente haya menos de dos consumidores. Los consumidores pueden ser funciones de Lambda, tablas globales de DynamoDB, integraciones sin ETL de Amazon DynamoDB con Amazon OpenSearch Service o aplicaciones que leen directamente los flujos, por ejemplo, a través del adaptador Kinesis de DynamoDB Streams.
-
Cree un bus de eventos de EventBridge. Para ello, siga los pasos que se indican en la sección Creating an Amazon EventBridge event bus de la Guía del usuario de EventBridge.
-
Al crear el bus de eventos, habilite Detección de esquemas.
-
-
Cree una canalización de EventBridge. Para ello, siga los pasos que se indican en la sección Creating an Amazon EventBridge pipe de la Guía del usuario de EventBridge.
-
Al configurar el origen, en el campo Origen, seleccione DynamoDB y, en el campo Flujos de DynamoDB, elija el nombre del flujo de la tabla de origen.
-
Al configurar el destino, en el campo Servicio de destino, seleccione Bus de eventos de EventBridge y, en el campo Bus de eventos como destino, seleccione el bus de eventos creado en el paso 2.
-
-
Escriba un elemento de ejemplo en la tabla de DynamoDB de origen para activar un evento. Esto permitirá a EventBridge deducir el esquema del elemento de ejemplo. Este esquema se puede usar para crear reglas de enrutamiento de eventos. Por ejemplo, si va a implementar un patrón de diseño que implica sobrecargar los atributos, es posible que desee activar reglas diferentes en función del valor de la clave de clasificación. Encontrará información detallada sobre cómo escribir un elemento en DynamoDB en la sección Working with items and attributes de la Guía para desarrolladores de DynamoDB.
-
Cree una función de Lambda de Python de ejemplo para utilizarla como destino. Para ello, siga los pasos de la sección Creación de funciones de Lambda con Python de la Guía para desarrolladores de Lambda. Cuando cree la función, puede utilizar el siguiente código de ejemplo para demostrar la integración. Cuando se invoque, imprimirá la
NewImage
y laOldImage
que se reciben con el evento y que se pueden ver en Registros de Amazon CloudWatch.import json def lambda_handler(event, context): dynamodb = event.get('detail', {}).get('dynamodb', {}) new_image = dynamodb.get('NewImage') old_image = dynamodb.get('OldImage') if new_image: print("NewImage:", json.dumps(new_image, indent=2)) if old_image: print("OldImage:", json.dumps(old_image, indent=2)) return {'statusCode': 200, 'body': json.dumps(event)}
-
Cree una regla de EventBridge que enrute los eventos a su nueva función de Lambda. Para ello, siga los pasos de la sección Create a rule that reacts to events de la Guía del usuario de EventBridge.
-
Cuando defina los detalles de la regla, seleccione el nombre del bus de eventos que creó en el paso 2 como bus de eventos.
-
Para crear el patrón de eventos, siga la guía del esquema existente. Aquí puede seleccionar el registro de esquemas detectados y el esquema detectado para su evento. Esto le permite configurar un patrón de eventos específico para su caso de uso que solo enrute los mensajes que coincidan con atributos concretos. Por ejemplo, si quisiera que se aplique solo a los elementos de DynamoDB en los que la clave de clasificación (SK) comienza por
“user#”
, utilizaría una configuración como esta. -
Haga clic en Generar patrón de eventos en JSON cuando haya terminado de diseñar un patrón en su esquema. Si, por el contrario, quiere que se aplique a todos los eventos que aparecen en DynamoDB Streams, utilice el siguiente JSON para el patrón de eventos.
{ "source": ["aws.dynamodb"] }
-
Al seleccionar destinos, siga la guía del servicio de AWS. En el campo Seleccionar un destino, elija “Función de Lambda”. En el campo Función, seleccione la función de Lambda que creó en el paso 5.
-
-
Ahora, para detener la detección de esquemas en su bus de eventos, siga los pasos que se indican la sección Starting or stopping schema discovery on event buses de la Guía del usuario de EventBridge.
-
Escriba un segundo elemento de ejemplo en la tabla de DynamoDB de origen para activar un evento. Valide que el evento se haya procesado correctamente en cada paso.
-
Consulte la métrica de CloudWatch PutEventsApproximateSuccessCount para su bus de eventos de acuerdo con la sección Monitoring Amazon EventBridge de la Guía del usuario de EventBridge.
-
Consulte los registros de funciones de su función de Lambda de acuerdo con la sección Supervisión y solución de problemas de funciones de Lambda de la Guía para desarrolladores de Lambda. Si la función de Lambda usa el código de ejemplo proporcionado, debería ver la
NewImage
y laOldImage
de DynamoDB Streams impresas en el grupo de registro de Registros de Amazon CloudWatch. -
Consulte la métrica Recuento de errores e índice de éxito (%) de su función de Lambda en la sección Supervisión y solución de problemas de funciones de Lambda de la Guía para desarrolladores de Lambda.
-
Siguientes pasos
En este ejemplo se proporciona una integración básica con una sola función de Lambda como destino. Para comprender mejor las configuraciones más complejas, como la creación de varias reglas, la creación de varios destinos, la integración con otros servicios y el enriquecimiento de eventos, consulte la guía completa del usuario de EventBridge: Getting started with EventBridge.
nota
Tenga en cuenta las cuotas de EventBridge que puedan ser relevantes para su aplicación. Aunque la capacidad de DynamoDB Streams se escala con la tabla, las cuotas de EventBridge son independientes. Las cuotas más comunes a tener en cuenta en una aplicación de gran tamaño serían el límite de limitaciones de invocaciones en las transacciones por segundo y el límite de limitaciones de PutEvents en las transacciones por segundo. Estas cuotas especifican el número de invocaciones que se pueden enviar a los destinos y el número de eventos que se pueden incluir en el bus por segundo.