Captura de datos de cambios para DynamoDB Streams - Amazon DynamoDB

Captura de datos de cambios para DynamoDB Streams

DynamoDB Streams captura una secuencia en orden cronológico de las modificaciones de los elementos en una tabla de DynamoDB y almacena esta información en un log durante un máximo de 24 horas. Las aplicaciones pueden obtener acceso a este registro y ver los elementos de datos tal y como se encontraban antes y después de la modificación, prácticamente en tiempo real.

El cifrado en reposo cifra los datos en DynamoDB streams. Para obtener más información, consulte Cifrado en reposo en DynamoDB.

Una transmisión de DynamoDB es un flujo ordenado de información sobre los cambios que se realizan en los elementos de una tabla de DynamoDB. Cuando se habilita una transmisión en una tabla, DynamoDB obtiene información sobre cada modificación de los elementos de datos de esa tabla.

Cada vez que una aplicación crea, actualiza o elimina elementos en la tabla, DynamoDB Streams escribe un registro de transmisión con los atributos de clave principal de los elementos modificados. Un registro de transmisión contiene información sobre una modificación de los datos de un solo elemento de una tabla de DynamoDB. Puede configurar la secuencia de tal forma que sus registros capturen información adicional; por ejemplo, las imágenes de "antes" y "después" de los elementos modificados.

DynamoDB Streams ayuda a garantizar lo siguiente:

  • Cada registro de secuencia aparece una única vez en la secuencia.

  • Para cada elemento que se modifica de una tabla de DynamoDB, los registros de transmisión aparecen en el mismo orden en que se han realizado las modificaciones del elemento.

DynamoDB Streams escribe los registros de transmisión prácticamente en tiempo real, para que pueda crear aplicaciones que consuman estas transmisiones y adopten medidas en función de su contenido.

Endpoints para DynamoDB Streams

AWS mantiene puntos de enlace distintos para DynamoDB y DynamoDB Streams. Para usar las tablas y los índices de la base de datos, la aplicación tendrá que acceder a un punto de enlace de DynamoDB. Para leer y procesar los registros de DynamoDB Streams, la aplicación tendrá que obtener acceso a un punto de enlace de DynamoDB Streams situado en la misma región.

La convención de nomenclatura de los puntos de enlace de DynamoDB Streams es streams.dynamodb.<region>.amazonaws.com. Por ejemplo, si usa el punto de enlace dynamodb.us-west-2.amazonaws.com para obtener acceso a DynamoDB usaría el punto de enlace streams.dynamodb.us-west-2.amazonaws.com para obtener acceso a DynamoDB Streams.

nota

Para obtener una lista completa de las regiones y puntos de conexión de DynamoDB y DynamoDB Streams, consulte Regiones y puntos de conexión en la Referencia general de AWS.

Los SDK de AWS proporcionan clientes independientes para DynamoDB y DynamoDB Streams. Según cuáles sean sus necesidades, la aplicación puede obtener acceso a un punto de enlace de DynamoDB, a un punto de enlace de DynamoDB Streams o a ambos al mismo tiempo. Para conectarse a ambos puntos de enlace, la aplicación tendrá que crear instancias de dos clientes: uno para DynamoDB y otro para DynamoDB Streams.

Habilitación de una secuencia

Puede habilitar una transmisión en una nueva tabla al crearla mediante la AWS CLI o uno de los SDK de AWS. También puede habilitar o deshabilitar una transmisión en una tabla existente, así como cambiar la configuración de una transmisión. DynamoDB Streams opera de forma asincrónica, por lo que el rendimiento de una tabla no se vea afectado al habilitar una transmisión.

La forma más sencilla de administrar DynamoDB Streams es usar la AWS Management Console.

  1. Inicie sesión en la AWS Management Console y abra la consola de DynamoDB en https://console.aws.amazon.com/dynamodb/.

  2. En el panel de la consola de DynamoDB, elija Tablas y seleccione una tabla existente.

  3. Elija la pestaña Exports and streams (Exportaciones y flujos).

  4. En la sección Detalles del flujo de DynamoDB, seleccione Activar.

  5. En la ventana Activar el flujo de DynamoDB, elija la información que se escribirá en el flujo cada vez que se modifiquen los datos de la tabla:

    • Key attributes only (Solo atributos clave): solo los atributos clave del elemento modificado.

    • New image (Nueva imagen): el elemento completo tal y como aparece después de modificarlo.

    • Old image (Imagen anterior): el elemento completo tal y como aparecía antes de modificarlo.

    • New and old images (Imágenes nuevas y anteriores): ambas imágenes del elemento, la nueva y la anterior.

    Cuando la configuración sea la que desea, elija Activar flujo.

  6. (Opcional) Para desactivar un flujo existente, elija Desactivar bajo Detalles del flujo de DynamoDB.

También puede usar las operaciones de la API CreateTable o UpdateTable para habilitar o modificar una secuencia, respectivamente. El parámetro StreamSpecification determina cómo se configura la secuencia:

  • StreamEnabled: especifica si una transmisión está habilitada (true) o deshabilitada (false) para la tabla.

  • StreamViewType: especifica la información que se escribirá en la transmisión cada vez que se modifiquen los datos de la tabla:

    • KEYS_ONLY: solo los atributos de clave del elemento modificado.

    • NEW_IMAGE: el elemento completo tal y como aparece después de modificarlo.

    • OLD_IMAGE: el elemento completo tal y como aparecía antes de modificarlo.

    • NEW_AND_OLD_IMAGES: ambas imágenes del elemento, la nueva y la anterior.

Puede habilitar o deshabilitar una secuencia en cualquier momento. Sin embargo, tenga en cuenta que recibirá una excepción ResourceInUseException si intenta habilitar una secuencia en una tabla que ya tiene una. Recibirá una excepción ValidationException si intenta deshabilitar una secuencia en una tabla que no tiene ninguna.

Cuando se establece StreamEnabled en true, DynamoDB crea una nueva transmisión con un descriptor de transmisión único asignado a ella. Si deshabilita y vuelve a habilitar una secuencia en la tabla, se crea una secuencia nueva con un descriptor de secuencia distinto.

Cada secuencia se identifica de forma exclusiva mediante un nombre de recurso de Amazon (ARN). A continuación se muestra un ejemplo de ARN de una transmisión de una tabla de DynamoDB denominada TestTable.

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

Para determinar el último descriptor de transmisión de una tabla, se emite una solicitud DescribeTable de DynamoDB y se busca el elemento LatestStreamArn en la respuesta.

nota

No es posible editar un StreamViewType una vez que se ha configurado un flujo. Si necesita realizar cambios en un flujo después de haberlo configurado, debe desactivar el flujo actual y crear uno nuevo.

Lectura y procesamiento de un flujo

Para leer y procesar una transmisión, la aplicación tiene que conectarse a un punto de enlace de DynamoDB Streams y emitir solicitudes de API.

Una secuencia consta de registros de secuencia. Cada registro de transmisión representa una única modificación de datos de la tabla de DynamoDB a la que pertenece la secuencia. A cada registro de secuencia se le asigna un número de secuencia que refleja el orden en que el registro se ha publicado en la secuencia.

Los registros de secuencia se organizan en grupos, o fragmentos. Cada fragmento actúa como contenedor de varios registros de secuencia y contiene la información necesaria para obtener acceso a estos registros y recorrerlos en iteración. Los registros de secuencia de un fragmento se eliminan automáticamente transcurridas de 24 horas.

Los fragmentos son efímeros: se crean y eliminan automáticamente, según sea necesario. Además, cualquier fragmento se puede dividir en varios fragmentos nuevos; esto también sucede automáticamente. (Cabe destacar que un fragmento principal puede tener un solo fragmento secundario). Un fragmento se puede dividir en respuesta a niveles de actividad de escritura elevados en la tabla principal, para que las aplicaciones puedan procesar en paralelo los registros de varios fragmentos.

Si se deshabilita una secuencia, todos fragmentos que estén abiertos se cerrarán. Los datos de la transmisión continuarán disponibles para leerlos durante 24 horas.

Como los fragmentos poseen un parentesco (principales y secundarios), las aplicaciones siempre deben procesar los fragmentos principales antes de procesar los secundarios. Esto ayuda a garantizar que los registros de secuencia se procesen también en el orden correcto. (Si utiliza DynamoDB Streams Kinesis Adapter, esto se lleva a cabo de forma automatizada: la aplicación procesará los fragmentos y registros de transmisión en el orden correcto y también administrará automáticamente los fragmentos nuevos o vencidos, así como aquellos que se dividan mientras se ejecuta la aplicación. Para obtener más información, consulte Uso del adaptador Kinesis de DynamoDB Streams para procesar registros de transmisión).

En el siguiente diagrama se muestra la relación entre una secuencia, sus fragmentos y los registros de secuencia contenidos en los fragmentos.

nota

Si lleva a cabo una operación PutItem o UpdateItem que no modifica ningún dato de un elemento, DynamoDB Streams no escribe ningún registro de transmisión de esa operación.

Para obtener acceso a una secuencia y procesar los registros que contiene, proceda como sigue:

  • Determine el ARN único de la secuencia a la que desea obtener acceso.

  • Determine qué fragmentos de la secuencia contienen los registros de secuencia que le interesan.

  • Obtenga acceso a los fragmentos y recupere los registros de secuencia que desee.

nota

Nunca debe haber más de dos procesos leyendo la misma partición de flujo a la vez. Usar más de dos procesos de lectura por fragmento puede provocar que se aplique la limitación controlada.

La API de DynamoDB Streams ofrece las siguientes acciones para usarlas en los programas de aplicación:

  • ListStreams: devuelve una lista de descriptores de transmisión de la cuenta y el punto de enlace actuales. Si lo desea, puede solicitar únicamente los descriptores de secuencia de un nombre de tabla concreto.

  • DescribeStream: devuelve información detallada sobre una secuencia determinada. El resultado incluye una lista de fragmentos asociados a la secuencia, con sus identificadores.

  • GetShardIterator: devuelve un iterador de fragmentos que describe una ubicación en el fragmento. Puede solicitar que el iterador proporcione acceso al punto más antiguo, al punto más reciente o a un punto concreto de la secuencia.

  • GetRecords: devuelve los registros de secuencia de un fragmento determinado. Debe proporcionar el iterador de fragmentos devuelto por una solicitud GetShardIterator.

Para obtener descripciones completas de estas operaciones de la API, así como ejemplos de solicitudes y respuestas, consulte la Referencia de API de Amazon DynamoDB Streams.

Límite de retención de datos para DynamoDB Streams

Todos los datos de DynamoDB Streams están sujetos a una vida útil de 24 horas. Puede recuperar y analizar las últimas 24 horas de actividad de cada tabla. Sin embargo, los datos de más de 24 horas se pueden recortar (eliminar) en cualquier momento.

Si deshabilita una secuencia en una tabla, los datos de esa secuencia continuarán disponibles para leerlos durante 24 horas. Transcurrido ese tiempo, los datos vencen y los registros de secuencia se eliminan automáticamente. No existe ningún mecanismo para eliminar manualmente las secuencias. Tiene que esperar hasta que se alcance el límite de retención (24 horas) para que se eliminen los registros de secuencia.