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 realiza con point-in-time la función de recuperación (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 Si elige esta opción, debe habilitar tanto la PITR como una transmisión de DynamoDB en la tabla.

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 la integración de DynamoDB Zero-ETL con OpenSearch Amazon Service en la Guía para desarrolladores.Amazon DynamoDB

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 OpenSearch de 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 incorpora los datos de la table-a con la instantánea de PITR, 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.

El siguiente ejemplo 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.

Le recomendamos que configure la cola de mensajes sin salida (DLQ) en su canalización de ingestión. OpenSearch Si has configurado la cola, el OpenSearch servicio 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.