Uso de una canalización OpenSearch de ingestión con Amazon DynamoDB - OpenSearch Servicio Amazon

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 una canalización OpenSearch de ingestión con Amazon DynamoDB

Puede usar una canalización de OpenSearch ingestión con DynamoDB para transmitir eventos de tablas de DynamoDB (como crear, actualizar y eliminar) a los dominios y colecciones de Amazon Service. OpenSearch La canalización de OpenSearch ingestión incorpora una infraestructura de captura de datos de cambios (CDC) para proporcionar una forma de alta escala y baja latencia de transmitir datos de forma continua desde una tabla de DynamoDB.

Existen dos formas de utilizar DynamoDB como origen para procesar datos: con y sin una instantánea inicial completa.

Una instantánea inicial completa es una copia de seguridad de una tabla que DynamoDB toma con point-in-time la función recovery PITR (). DynamoDB carga esta instantánea en Amazon S3. Desde allí, una canalización de OpenSearch ingestión la envía a un índice de un dominio o la divide en varios índices de un dominio. Para mantener la coherencia de los datos en DynamoDB OpenSearch , la canalización sincroniza todos los eventos de creación, actualización y eliminación de la tabla de DynamoDB con los documentos guardados en el índice o los índices. OpenSearch

Cuando utiliza una instantánea inicial completa, la canalización de OpenSearch ingestión ingiere primero la instantánea y, a continuación, comienza a leer los datos de DynamoDB Streams. Con el tiempo, recupera y mantiene la coherencia de los datos casi en tiempo real entre DynamoDB y. OpenSearch Al elegir esta opción, debe habilitar tanto PITR una transmisión de DynamoDB como una en la mesa.

También puede usar la integración de OpenSearch Ingestion con DynamoDB para transmitir eventos sin necesidad de una instantánea. Elija esta opción si ya tiene una instantánea completa de algún otro mecanismo o si solo quiere transmitir los eventos actuales de una tabla de DynamoDB con DynamoDB Streams. Si elige esta opción, solo necesita habilitar una transmisión de DynamoDB en su tabla.

Para obtener más información sobre esta integración, consulte DynamoDB zero: ETL integration with OpenSearch Amazon Service en Amazon DynamoDB la Guía para desarrolladores.

Requisitos previos

Para configurar la canalización, debe tener una tabla de DynamoDB con DynamoDB Streams activado. La transmisión debe usar el tipo de vista de transmisión NEW_IMAGE. Sin embargo, las canalizaciones de OpenSearch ingestión también pueden transmitir eventos NEW_AND_OLD_IMAGES si este tipo de vista de transmisión se ajusta a su caso de uso.

Si utilizas instantáneas, también debes habilitar la point-in-time recuperación en tu mesa. Para obtener más información, consulte Crear una tabla, Habilitar la point-in-time recuperación y Habilitar una transmisión en la Guía para desarrolladores de Amazon DynamoDB.

Paso 1: configurar el rol de canalización

Una vez configurada la tabla de DynamoDB, configure el rol de canalización que desee usar en la configuración de canalización y añada los siguientes permisos de DynamoDB al rol:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allowRunExportJob", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:DescribeContinuousBackups", "dynamodb:ExportTableToPointInTime" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table" ] }, { "Sid": "allowCheckExportjob", "Effect": "Allow", "Action": [ "dynamodb:DescribeExport" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table/export/*" ] }, { "Sid": "allowReadFromStream", "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table/stream/*" ] }, { "Sid": "allowReadAndWriteToS3ForExport", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::my-bucket/{exportPath}/*" ] } ] }

También puede usar una clave administrada por el AWS KMS cliente para cifrar los archivos de datos de exportación. Para descifrar los objetos exportados, especifique s3_sse_kms_key_id para el ID de clave en la configuración de exportación de la canalización con el siguiente formato: arn:aws:kms:us-west-2:{account-id}:key/my-key-id. La siguiente política incluye los permisos necesarios para usar una clave administrada por el cliente:

{ "Sid": "allowUseOfCustomManagedKey", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": arn:aws:kms:us-west-2:{account-id}:key/my-key-id }

Paso 2: crear la canalización

A continuación, puede configurar una canalización de OpenSearch ingestión como la siguiente, que especifica DynamoDB como origen. Este ejemplo de canalización ingiere los datos de table-a la PITR instantánea, seguidos de los eventos de DynamoDB Streams. Una posición inicial de LATEST indica que la canalización debe leer los datos más recientes de DynamoDB Streams.

version: "2" cdc-pipeline: source: dynamodb: tables: - table_arn: "arn:aws:dynamodb:us-west-2:{account-id}:table/table-a" export: s3_bucket: "my-bucket" s3_prefix: "export/" stream: start_position: "LATEST" aws: region: "us-west-2" sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com"] index: "${getMetadata(\"table_name\")}" index_type: custom normalize_index: true document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external"

Puede usar un blueprint de DynamoDB preconfigurado para crear esta canalización. Para obtener más información, consulte Uso de esquemas para crear una canalización.

Coherencia de datos

OpenSearch La ingestión permite el end-to-end reconocimiento para garantizar la durabilidad de los datos. Cuando una canalización lee instantáneas o transmisiones, crea particiones de forma dinámica para el procesamiento paralelo. La canalización marca una partición como completa cuando recibe un acuse de recibo después de ingerir todos los registros del dominio o la OpenSearch colección.

Si quieres incorporarlos a una colección de búsquedas OpenSearch sin servidor, puedes generar un identificador de documento en la canalización. Si quieres incorporarlo a una colección de series temporales OpenSearch sin servidor, ten en cuenta que la canalización no genera un identificador de documento.

Una canalización OpenSearch de ingestión también asigna las acciones de los eventos entrantes a las correspondientes acciones de indexación masiva para facilitar la ingesta de documentos. Esto mantiene la coherencia de los datos, de modo que cada cambio de datos en DynamoDB se concilia con los cambios correspondientes en el documento. OpenSearch

Asignación de tipos de datos

OpenSearch El servicio asigna dinámicamente los tipos de datos de cada documento entrante al tipo de datos correspondiente en DynamoDB. En la siguiente tabla se muestra cómo OpenSearch Service asigna automáticamente varios tipos de datos.

Tipo de datos OpenSearch DynamoDB
Número

OpenSearch mapea automáticamente los datos numéricos. Si el número es un número entero, lo OpenSearch asigna como un valor largo. Si el número es fraccionario, lo OpenSearch mapea como un valor flotante.

OpenSearch mapea dinámicamente varios atributos en función del primer documento enviado. Si tiene una combinación de tipos de datos para el mismo atributo en DynamoDB, como un número entero y un número fraccionario, es posible que se produzca un error en la asignación.

Por ejemplo, si el primer documento tiene un atributo que es un número entero y un documento posterior tiene el mismo atributo que un número fraccionario, OpenSearch no podrá ingerir el segundo documento. En estos casos, debe proporcionar una plantilla de asignación explícita, como la siguiente:

{ "template": { "mappings": { "properties": { "MixedNumberAttribute": { "type": "float" } } } } }

Si necesita una precisión doble, utilice la asignación de campos de tipo cadena. No hay ningún tipo numérico equivalente que admita una precisión de 38 dígitos. OpenSearch

DynamoDB admite números.

Conjunto de números OpenSearch asigna automáticamente un conjunto de números a una matriz de valores largos o flotantes. Al igual que con los números escalares, esto depende de si el primer número incorporado es un número entero o un número fraccionario. Puede proporcionar asignaciones para conjuntos de números de la misma manera que asigna cadenas escalares.

DynamoDB admite tipos que representan conjuntos de números.

Cadena

OpenSearch mapea automáticamente los valores de cadena como texto. En algunas situaciones, como en el caso de los valores enumerados, puede asignarlos al tipo de palabra clave.

En el siguiente ejemplo, se muestra cómo asignar un atributo de DynamoDB PartType denominado a una palabra clave. OpenSearch

{ "template": { "mappings": { "properties": { "PartType": { "type": "keyword" } } } } }

DynamoDB admite cadenas.

Conjunto de cadenas

OpenSearch asigna automáticamente un conjunto de cadenas a una matriz de cadenas. Puede proporcionar asignaciones para conjuntos de cadenas de la misma manera que asigna cadenas escalares.

DynamoDB admite tipos que representan conjuntos de cadenas.
Binario

OpenSearch mapea automáticamente los datos binarios como texto. Puede proporcionar un mapeo para escribirlos como campos binarios OpenSearch.

El siguiente ejemplo muestra cómo asignar un atributo de DynamoDB ImageData denominado a OpenSearch un campo binario.

{ "template": { "mappings": { "properties": { "ImageData": { "type": "binary" } } } } }
DynamoDB es compatible con los atributos de tipo binarios.
Conjunto binario

OpenSearch asigna automáticamente un conjunto binario a una matriz de datos binarios en forma de texto. Puede proporcionar asignaciones para conjuntos de números de la misma manera que asigna el binario escalar.

DynamoDB admite tipos que representan conjuntos de valores binarios.
Booleano

OpenSearch asigna un tipo booleano de DynamoDB a un tipo booleano. OpenSearch

DynamoDB admite atributos de tipo booleano.

Nulo

OpenSearch puede ingerir documentos del tipo null de DynamoDB. Guarda el valor como un valor nulo en el documento. No hay ninguna asignación para este tipo y este campo no está indexado ni se puede buscar en él.

Si se utiliza el mismo nombre de atributo para un tipo nulo y, posteriormente, se cambia a un tipo diferente, como una cadena, OpenSearch crea una asignación dinámica para el primer valor no nulo. Los valores subsiguientes pueden seguir siendo valores nulos de DynamoDB.

DynamoDB admite atributos de tipo nulo.
Asignación

OpenSearch asigna los atributos del mapa de DynamoDB a campos anidados. Las mismas asignaciones se aplican dentro de un campo anidado.

El siguiente ejemplo asigna una cadena de un campo anidado a un tipo de palabra clave en: OpenSearch

{ "template": { "mappings": { "properties": { "AdditionalDescriptions": { "properties": { "PartType": { "type": "keyword" } } } } } } }
DynamoDB admite atributos de tipo asignación.
Enumeración

OpenSearch proporciona resultados diferentes para las listas de DynamoDB, según el contenido de la lista.

Cuando una lista contiene todos los tipos escalares del mismo tipo (por ejemplo, una lista de todas las cadenas), OpenSearch ingiere la lista como una matriz de ese tipo. Esto funciona para los tipos cadena, número, booleano y nulo. Las restricciones para cada uno de estos tipos son las mismas que las restricciones para un escalar de ese tipo.

También puede proporcionar asignaciones para listas de mapas con la misma asignación que usaría para un mapa.

No puede proporcionar una lista de tipos mixtos.

DynamoDB admite atributos de tipo lista.

Establezca

OpenSearch proporciona resultados diferentes para los conjuntos de DynamoDB en función del contenido del conjunto.

Cuando un conjunto contiene todos los tipos escalares del mismo tipo (por ejemplo, un conjunto de todas las cadenas), OpenSearch ingiere el conjunto como una matriz de ese tipo. Esto funciona para los tipos cadena, número, booleano y nulo. Las restricciones para cada uno de estos tipos son las mismas que las restricciones para un escalar de ese tipo.

También puede proporcionar asignaciones para conjuntos de mapas con la misma asignación que usaría para un mapa.

No puede proporcionar un conjunto de tipos mixtos.

DynamoDB admite tipos que representan conjuntos.

Te recomendamos que configures la cola de letras sin salida (DLQ) en tu canal de ingestión. OpenSearch Si has configurado la cola, OpenSearch Service envía a la cola todos los documentos fallidos que no se puedan ingerir debido a errores de mapeo dinámico.

En caso de que las asignaciones automáticos fallen, puede usar template_type y template_content en su configuración de canalización para definir reglas de asignación explícitas. Como alternativa, puede crear plantillas de asignación directamente en su dominio o colección de búsqueda antes de iniciar la canalización.

Limitaciones

Tenga en cuenta las siguientes limitaciones al configurar una canalización de OpenSearch ingestión para DynamoDB:

  • La integración OpenSearch de ingestión con DynamoDB actualmente no admite la ingestión entre regiones. La tabla de DynamoDB OpenSearch y la canalización de ingestión deben estar en la misma posición. Región de AWS

  • La tabla de DynamoDB OpenSearch y la canalización de ingestión deben estar en la misma posición. Cuenta de AWS

  • Una canalización OpenSearch de ingestión solo admite una tabla de DynamoDB como fuente.

  • DynamoDB Streams solo almacena datos en un registro durante un máximo de 24 horas. Si la ingesta de una instantánea inicial de una tabla grande demora 24 horas o más, se producirá una pérdida inicial de datos. Para mitigar esta pérdida de datos, calcule el tamaño de la tabla y configure las unidades informáticas adecuadas de las canalizaciones de OpenSearch ingestión.

CloudWatch Alarmas recomendadas para DynamoDB

Se recomiendan las siguientes CloudWatch métricas para supervisar el rendimiento del proceso de ingestión. Estas métricas pueden ayudarte a identificar la cantidad de datos procesados a partir de las exportaciones, la cantidad de eventos procesados a partir de las transmisiones, los errores al procesar las exportaciones y los eventos de transmisión y la cantidad de documentos escritos en el destino. Puede configurar CloudWatch alarmas para realizar una acción cuando una de estas métricas supere un valor específico durante un período de tiempo específico.

Métrica Descripción
dynamodb-pipeline.BlockingBuffer.bufferUsage.value

Indica qué parte del búfer se está utilizando.

dynamodb-pipeline.dynamodb.activeExportS3ObjectConsumers.value

Muestra el número total de objetos de Amazon S3 OCUs que están procesando activamente para la exportación.

dynamodb-pipeline.dynamodb.bytesProcessed.count

Recuento de bytes procesados desde la fuente de DynamoDB.

dynamodb-pipeline.dynamodb.changeEventsProcessed.count

Número de eventos de cambio procesados desde la transmisión de DynamoDB.

dynamodb-pipeline.dynamodb.changeEventsProcessingErrors.count

Número de errores de eventos de cambio procesados desde DynamoDB.

dynamodb-pipeline.dynamodb.exportJobFailure.count Número de intentos de envío de trabajos de exportación que han fallado.
dynamodb-pipeline.dynamodb.exportJobSuccess.count Número de trabajos de exportación que se han enviado correctamente.
dynamodb-pipeline.dynamodb.exportRecordsProcessed.count

Número total de registros procesados a partir de la exportación.

dynamodb-pipeline.dynamodb.exportRecordsTotal.count

Número total de registros exportados desde DynamoDB, esencial para el seguimiento de los volúmenes de exportación de datos.

dynamodb-pipeline.dynamodb.exportS3ObjectsProcessed.count Número total de archivos de datos de exportación que se han procesado correctamente desde Amazon S3.
dynamodb-pipeline.opensearch.bulkBadRequestErrors.count Recuento de errores durante las solicitudes masivas debido a un formato incorrecto de la solicitud.
dynamodb-pipeline.opensearch.bulkRequestLatency.avg Latencia media de las solicitudes de escritura masiva realizadas a OpenSearch.
dynamodb-pipeline.opensearch.bulkRequestNotFoundErrors.count Número de solicitudes masivas que fallaron porque no se pudieron encontrar los datos de destino.
dynamodb-pipeline.opensearch.bulkRequestNumberOfRetries.count Número de reintentos realizados por las canalizaciones OpenSearch de ingestión para escribir el clúster. OpenSearch
dynamodb-pipeline.opensearch.bulkRequestSizeBytes.sum Tamaño total en bytes de todas las solicitudes masivas realizadas a. OpenSearch
dynamodb-pipeline.opensearch.documentErrors.count Número de errores al enviar documentos a OpenSearch. Los documentos que provoquen los errores se enviarán aDLQ.
dynamodb-pipeline.opensearch.documentsSuccess.count Número de documentos escritos correctamente en un OpenSearch clúster o colección.
dynamodb-pipeline.opensearch.documentsSuccessFirstAttempt.count Número de documentos indexados correctamente OpenSearch en el primer intento.

dynamodb-pipeline.opensearch.documentsVersionConflictErrors.count

Recuento de errores debidos a conflictos de versiones en los documentos durante el procesamiento.

dynamodb-pipeline.opensearch.PipelineLatency.avg

Latencia media de la canalización de OpenSearch ingestión para procesar los datos desde el origen hasta escribirlos en el destino.
dynamodb-pipeline.opensearch.PipelineLatency.max Latencia máxima de la canalización de OpenSearch ingestión para procesar los datos desde el origen hasta escribir el destino.
dynamodb-pipeline.opensearch.recordsIn.count Recuento de registros ingresados correctamente. OpenSearch Esta métrica es esencial para realizar un seguimiento del volumen de datos que se procesan y almacenan.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsFailed.count Número de registros en los que no se pudo escribirDLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsSuccess.count Número de registros en los que se escribenDLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.count Recuento de las mediciones de latencia de las solicitudes a la cola de cartas muertas de Amazon S3.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.sum Latencia total de todas las solicitudes a la cola de cartas muertas de Amazon S3
dynamodb-pipeline.opensearch.s3.dlqS3RequestSizeBytes.sum Tamaño total en bytes de todas las solicitudes realizadas a la cola de cartas muertas de Amazon S3.
dynamodb-pipeline.recordsProcessed.count Número total de registros procesados en la canalización, una métrica clave para el rendimiento general.
dynamodb.changeEventsProcessed.count No se está recopilando ningún registro de las transmisiones de DynamoDB. Esto puede deberse a que no hay actividad sobre la mesa, a que se esté realizando una exportación o a un problema al acceder a las transmisiones de DynamoDB.

dynamodb.exportJobFailure.count

Falló el intento de activar una exportación a S3.

line.opensearch.bulkRequestInvalidInputErrors.count

El recuento de errores en las solicitudes masivas OpenSearch se debe a una entrada no válida, algo crucial para supervisar la calidad de los datos y los problemas operativos.
opensearch.EndToEndLatency.avg La latencia de extremo a extremo es superior a la deseada para la lectura de transmisiones de DynamoDB. Esto podría deberse a un OpenSearch clúster de menor escala o a una OCU capacidad máxima de canalización demasiado baja para el WCU rendimiento de la tabla de DynamoDB. Esta latencia de extremo a extremo será alta después de una exportación y debería disminuir con el tiempo a medida que se vaya actualizando con las últimas transmisiones de DynamoDB.