Usando um pipeline de OpenSearch ingestão com o Amazon DynamoDB - OpenSearch Serviço Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando um pipeline de OpenSearch ingestão com o Amazon DynamoDB

Você pode usar um pipeline de OpenSearch ingestão com o DynamoDB para transmitir eventos de tabela do DynamoDB (como criar, atualizar e excluir) para domínios e coleções do Amazon Service. OpenSearch O pipeline OpenSearch de ingestão incorpora a infraestrutura de captura de dados de alteração (CDC) para fornecer uma forma de alta escala e baixa latência de transmitir dados continuamente de uma tabela do DynamoDB.

Há duas maneiras de usar o DynamoDB como origem para processar dados: com e sem um snapshot inicial completo.

Um instantâneo inicial completo é um backup de uma tabela que o DynamoDB faz com o recurso de recuperação (point-in-time PITR). O DynamoDB carrega esse snapshot no Amazon S3. A partir daí, um pipeline de OpenSearch ingestão o envia para um índice em um domínio ou o particiona em vários índices em um domínio. Para manter os dados no DynamoDB OpenSearch e consistentes, o pipeline sincroniza todos os eventos de criação, atualização e exclusão na tabela do DynamoDB com os documentos salvos no índice ou índices. OpenSearch

Quando você usa um snapshot inicial completo, seu pipeline de OpenSearch ingestão primeiro ingere o snapshot e depois começa a ler os dados do DynamoDB Streams. Eventualmente, ele recupera e mantém a consistência de dados quase em tempo real entre o DynamoDB e. OpenSearch Ao escolher essa opção, habilite a PITR e um fluxo do DynamoDB na sua tabela.

Você também pode usar a integração do OpenSearch Ingestion com o DynamoDB para transmitir eventos sem um snapshot. Escolha essa opção se você já tiver um snapshot completo de algum outro mecanismo ou se quiser apenas transmitir eventos atuais de uma tabela do DynamoDB com o DynamoDB Streams. Ao escolher essa opção, você só precisa habilitar um fluxo do DynamoDB na sua tabela.

Para obter mais informações sobre essa integração, consulte Integração do DynamoDB Zero-ETL com o OpenSearch Amazon Service no Guia do desenvolvedor.Amazon DynamoDB

Pré-requisitos

Para configurar o pipeline, você precisa ter uma tabela do DynamoDB com o DynamoDB Streams habilitado. Seu fluxo deve usar o tipo de visualização de fluxo NEW_IMAGE. No entanto, os pipelines de OpenSearch ingestão também podem transmitir eventos NEW_AND_OLD_IMAGES se esse tipo de visualização de fluxo for adequado ao seu caso de uso.

Se você estiver usando instantâneos, também deverá ativar a point-in-time recuperação em sua tabela. Para obter mais informações, consulte Criar uma tabela, Habilitar a point-in-time recuperação e Habilitar um stream no Amazon DynamoDB Developer Guide.

Etapa 1: configurar a função do pipeline

Depois de configurar a tabela do DynamoDB, defina o perfil de pipeline que você deseja usar na configuração do pipeline e adicione as seguintes permissões do DynamoDB nesse perfil:

{ "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}/*" ] } ] }

Você também pode usar uma chave gerenciada pelo AWS KMS cliente para criptografar os arquivos de dados de exportação. Para descriptografar os objetos exportados, especifique s3_sse_kms_key_id para o ID da chave na configuração de exportação do pipeline, com o seguinte formato: arn:aws:kms:us-west-2:{account-id}:key/my-key-id. A política a seguir inclui as permissões necessárias para usar uma chave gerenciada pelo cliente:

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

Etapa 2: Criar o pipeline

Em seguida, você pode configurar um pipeline OpenSearch de ingestão como o seguinte, que especifica o DynamoDB como origem. Essa amostra de pipeline ingere dados de table-a com o snapshot de PITR, seguido por eventos do DynamoDB Streams. Uma posição inicial de LATEST indica que o pipeline deve ler os dados mais recentes do 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"

Você pode usar um blueprint pré-configurado do DynamoDB para criar esse pipeline. Para ter mais informações, consulte Usar esquemas para criar um pipeline.

Consistência de dados

OpenSearch A ingestão suporta o end-to-end reconhecimento para garantir a durabilidade dos dados. Quando um pipeline lê snapshots ou fluxos, ele cria partições dinamicamente para processamento paralelo. O pipeline marca uma partição como concluída quando ela recebe uma confirmação após a ingestão de todos os registros no OpenSearch domínio ou na coleção.

Se quiser fazer a ingestão em uma coleção de pesquisa OpenSearch sem servidor, você pode gerar uma ID de documento no pipeline. Se você quiser fazer a ingestão em uma coleção de séries temporais OpenSearch sem servidor, observe que o pipeline não gera uma ID de documento.

Um pipeline OpenSearch de ingestão também mapeia as ações de eventos recebidos em ações de indexação em massa correspondentes para ajudar a ingerir documentos. Isso mantém os dados consistentes, de forma que cada alteração de dados no DynamoDB seja reconciliada com as alterações correspondentes no documento. OpenSearch

Mapeaar tipo de dados

OpenSearch O serviço mapeia dinamicamente os tipos de dados em cada documento recebido para o tipo de dados correspondente no DynamoDB. A tabela a seguir mostra como o OpenSearch Service mapeia automaticamente vários tipos de dados.

Tipo de dados OpenSearch DynamoDB
Número

OpenSearch mapeia automaticamente os dados numéricos. Se o número for um número inteiro, OpenSearch mapeie-o como um valor longo. Se o número for fracionário, ele será OpenSearch mapeado como um valor flutuante.

OpenSearch mapeia dinamicamente vários atributos com base no primeiro documento enviado. Se houver uma combinação de tipos de dados para o mesmo atributo no DynamoDB, como um número inteiro e um fracionário, o mapeamento poderá falhar.

Por exemplo, se seu primeiro documento tiver um atributo que seja um número inteiro e um documento posterior tiver o mesmo atributo de um número fracionário, OpenSearch não conseguirá ingerir o segundo documento. Nesses casos, é necessário fornecer um modelo de mapeamento explícito, como o seguinte:

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

Se precisar de precisão dupla, use o mapeamento de campo do tipo string. Não há nenhum tipo numérico equivalente que suporte 38 dígitos de precisão em. OpenSearch

O DynamoDB é compatível com números.

Number set OpenSearch mapeia automaticamente um conjunto de números em uma matriz de valores longos ou valores flutuantes. Assim como os números escalares, isso depende de o primeiro número ingerido ser um número inteiro ou fracionário. É possível fornecer mapeamentos para conjuntos de números da mesma maneira que você mapeia strings escalares.

O DynamoDB oferece suporte a tipos que representam conjuntos de números.

String

OpenSearch mapeia automaticamente valores de string como texto. Em algumas situações, como valores enumerados, é possível mapear para o tipo de palavra-chave.

O exemplo a seguir mostra como mapear um atributo do DynamoDB PartType nomeado para uma palavra-chave. OpenSearch

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

O DynamoDB é compatível com strings.

String set

OpenSearch mapeia automaticamente um conjunto de strings em uma matriz de strings. É possível fornecer mapeamentos para conjuntos de strings da mesma maneira que você mapeia strings escalares.

O DynamoDB oferece suporte a tipos que representam conjuntos de strings.
Binário

OpenSearch mapeia automaticamente dados binários como texto. Você pode fornecer um mapeamento para escrevê-los como campos binários OpenSearch.

O exemplo a seguir mostra como mapear um atributo do DynamoDB ImageData nomeado para OpenSearch um campo binário.

{ "template": { "mappings": { "properties": { "ImageData": { "type": "binary" } } } } }
O DynamoDB oferece suporte a atributos de tipo binário.
Binary Set

OpenSearch mapeia automaticamente um conjunto binário em uma matriz de dados binários como texto. É possível fornecer mapeamentos para conjuntos de números da mesma maneira que você mapeia binários escalares.

O DynamoDB oferece suporte a tipos que representam conjuntos de valores binários.
Booleano

OpenSearch mapeia um tipo booleano do DynamoDB em um tipo booleano. OpenSearch

O DynamoDB é compatível com atributos do tipo booliano.

Null

OpenSearch pode ingerir documentos com o tipo nulo do DynamoDB. Ele salva o valor como um valor nulo no documento. Não há mapeamento para esse tipo, e esse campo não é indexado nem pesquisável.

Se o mesmo nome de atributo for usado para um tipo nulo e depois for alterado para um tipo diferente, como string, OpenSearch criará um mapeamento dinâmico para o primeiro valor não nulo. Os valores subsequentes ainda podem ser valores nulos do DynamoDB.

O DynamoDB oferece suporte a atributos de tipo nulo.
Mapa

OpenSearch mapeia os atributos do mapa do DynamoDB para campos aninhados. Os mesmos mapeamentos são aplicáveis a um campo aninhado.

O exemplo a seguir mapeia uma string em um campo aninhado para um tipo de palavra-chave em OpenSearch:

{ "template": { "mappings": { "properties": { "AdditionalDescriptions": { "properties": { "PartType": { "type": "keyword" } } } } } } }
O DynamoDB oferece suporte a atributos de tipo de mapa.
Lista

OpenSearch fornece resultados diferentes para as listas do DynamoDB, dependendo do que está na lista.

Quando uma lista contém todos os mesmos tipos de tipos escalares (por exemplo, uma lista de todas as cadeias de caracteres), a lista é OpenSearch ingerida como uma matriz desse tipo. Isso funciona para os tipos string, número, booliano e null. As restrições para cada um desses tipos são iguais às restrições para um escalar do mesmo tipo.

Também é possível fornecer mapeamentos para listas de mapas usando o mesmo mapeamento que você usaria para um mapa.

Você não pode fornecer uma lista de tipos mistos.

O DynamoDB oferece suporte para atributos de tipo de lista.

Defina

OpenSearch fornece resultados diferentes para conjuntos do DynamoDB, dependendo do que está no conjunto.

Quando um conjunto contém todos os mesmos tipos de tipos escalares (por exemplo, um conjunto de todas as cadeias de caracteres), ele OpenSearch ingere o conjunto como uma matriz desse tipo. Isso funciona para os tipos string, número, booliano e null. As restrições para cada um desses tipos são iguais às restrições para um escalar do mesmo tipo.

Também é possível fornecer mapeamentos para conjuntos de mapas usando o mesmo mapeamento que você usaria para um mapa.

Você não pode fornecer um conjunto de tipos mistos.

O DynamoDB oferece suporte a tipos que representam conjuntos.

Recomendamos que você configure a fila de mensagens mortas (DLQ) em seu pipeline de ingestão. OpenSearch Se você configurou a fila, o OpenSearch Service envia todos os documentos com falha que não podem ser ingeridos devido a falhas de mapeamento dinâmico para a fila.

Se os mapeamentos automáticos falharem, será possível usar template_type e template_content na configuração do pipeline para definir regras de mapeamento explícitas. Como alternativa, é possível criar modelos de mapeamento diretamente no seu domínio de pesquisa ou na sua coleção antes de iniciar o pipeline.

Limitações

Considere as seguintes limitações ao configurar um pipeline de OpenSearch ingestão para o DynamoDB:

  • Atualmente, a integração de OpenSearch ingestão com o DynamoDB não oferece suporte à ingestão entre regiões. Sua tabela do DynamoDB OpenSearch e seu pipeline de ingestão devem estar no mesmo lugar. Região da AWS

  • Sua tabela do DynamoDB OpenSearch e seu pipeline de ingestão devem estar no mesmo lugar. Conta da AWS

  • Um pipeline OpenSearch de ingestão suporta somente uma tabela do DynamoDB como origem.

  • O DynamoDB Streams apenas armazena dados em log por até 24 horas. Se a ingestão de um snapshot inicial de uma tabela grande levar 24 horas ou mais, haverá uma certa perda inicial de dados. Para mitigar essa perda de dados, estime o tamanho da tabela e configure as unidades computacionais apropriadas dos pipelines de OpenSearch ingestão.