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 snapshot inicial completo é um backup de uma tabela que o DynamoDB faz com point-in-time o recurso recovery (). 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, você deve habilitar ambos PITR e um stream 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 ETLIntegração zero do DynamoDB com o OpenSearch Amazon Service no Amazon DynamoDB Guia do desenvolvedor.

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. Esse exemplo de pipeline ingere dados table-a com o PITR snapshot, seguidos 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 obter 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.
Listar

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 letras mortas (DLQ) em seu OpenSearch pipeline de ingestão. 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.

CloudWatch Alarmes recomendados para o DynamoDB

As CloudWatch métricas a seguir são recomendadas para monitorar o desempenho do seu pipeline de ingestão. Essas métricas podem ajudá-lo a identificar a quantidade de dados processados nas exportações, a quantidade de eventos processados nos fluxos, os erros no processamento de exportações e eventos de fluxo e o número de documentos gravados no destino. Você pode configurar CloudWatch alarmes para realizar uma ação quando uma dessas métricas exceder um valor especificado por um determinado período de tempo.

Métrica Descrição
dynamodb-pipeline.BlockingBuffer.bufferUsage.value

Indica quanto do buffer está sendo utilizado.

dynamodb-pipeline.dynamodb.activeExportS3ObjectConsumers.value

Mostra o número total de pessoas OCUs que estão processando ativamente objetos do Amazon S3 para a exportação.

dynamodb-pipeline.dynamodb.bytesProcessed.count

Contagem de bytes processados da fonte do DynamoDB.

dynamodb-pipeline.dynamodb.changeEventsProcessed.count

Número de eventos de alteração processados no stream do DynamoDB.

dynamodb-pipeline.dynamodb.changeEventsProcessingErrors.count

Número de erros de eventos de alteração processados no DynamoDB.

dynamodb-pipeline.dynamodb.exportJobFailure.count Número de tentativas de envio de trabalhos de exportação que falharam.
dynamodb-pipeline.dynamodb.exportJobSuccess.count Número de trabalhos de exportação que foram enviados com sucesso.
dynamodb-pipeline.dynamodb.exportRecordsProcessed.count

Número total de registros processados a partir da exportação.

dynamodb-pipeline.dynamodb.exportRecordsTotal.count

Número total de registros exportados do DynamoDB, essencial para rastrear volumes de exportação de dados.

dynamodb-pipeline.dynamodb.exportS3ObjectsProcessed.count Número total de arquivos de dados de exportação que foram processados com sucesso no Amazon S3.
dynamodb-pipeline.opensearch.bulkBadRequestErrors.count Contagem de erros durante solicitações em massa devido a uma solicitação malformada.
dynamodb-pipeline.opensearch.bulkRequestLatency.avg Latência média para solicitações de gravação em massa feitas para OpenSearch.
dynamodb-pipeline.opensearch.bulkRequestNotFoundErrors.count Número de solicitações em massa que falharam porque os dados de destino não puderam ser encontrados.
dynamodb-pipeline.opensearch.bulkRequestNumberOfRetries.count Número de novas tentativas por pipelines OpenSearch de ingestão para gravar o cluster. OpenSearch
dynamodb-pipeline.opensearch.bulkRequestSizeBytes.sum Tamanho total em bytes de todas as solicitações em massa feitas para OpenSearch.
dynamodb-pipeline.opensearch.documentErrors.count Número de erros ao enviar documentos para OpenSearch. Os documentos que causam os erros serão enviados paraDLQ.
dynamodb-pipeline.opensearch.documentsSuccess.count Número de documentos gravados com sucesso em um OpenSearch cluster ou coleção.
dynamodb-pipeline.opensearch.documentsSuccessFirstAttempt.count Número de documentos indexados com sucesso OpenSearch na primeira tentativa.

dynamodb-pipeline.opensearch.documentsVersionConflictErrors.count

Contagem de erros devido a conflitos de versão em documentos durante o processamento.

dynamodb-pipeline.opensearch.PipelineLatency.avg

Latência média do pipeline de OpenSearch ingestão para processar os dados lendo da origem até a gravação no destino.
dynamodb-pipeline.opensearch.PipelineLatency.max Latência máxima do pipeline de OpenSearch ingestão para processar os dados lendo da origem até a gravação no destino.
dynamodb-pipeline.opensearch.recordsIn.count Contagem de registros ingeridos com sucesso. OpenSearch Essa métrica é essencial para rastrear o volume de dados sendo processados e armazenados.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsFailed.count Número de registros nos quais não foi possível gravarDLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsSuccess.count Número de registros nos quais são gravadosDLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.count Contagem de medidas de latência para solicitações à fila de mensagens mortas do Amazon S3.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.sum Latência total para todas as solicitações para a fila de mensagens mortas do Amazon S3
dynamodb-pipeline.opensearch.s3.dlqS3RequestSizeBytes.sum Tamanho total em bytes de todas as solicitações feitas na fila de mensagens mortas do Amazon S3.
dynamodb-pipeline.recordsProcessed.count Número total de registros processados no pipeline, uma métrica fundamental para a produtividade geral.
dynamodb.changeEventsProcessed.count Nenhum registro está sendo coletado dos fluxos do DynamoDB. Isso pode ser devido a nenhuma atividade na tabela, a uma exportação em andamento ou a um problema no acesso aos streams do DynamoDB.

dynamodb.exportJobFailure.count

A tentativa de acionar uma exportação para o S3 falhou.

line.opensearch.bulkRequestInvalidInputErrors.count

Contagem de erros de solicitação em massa OpenSearch devido à entrada inválida, crucial para monitorar a qualidade dos dados e problemas operacionais.
opensearch.EndToEndLatency.avg A latência de ponta a ponta é maior do que a desejada para leitura de streams do DynamoDB. Isso pode ser devido a um OpenSearch cluster subdimensionado ou a uma OCU capacidade máxima do pipeline muito baixa para a taxa de WCU transferência na tabela do DynamoDB. Essa latência de ponta a ponta será alta após uma exportação e deverá diminuir com o tempo, à medida que se adapta aos streams mais recentes do DynamoDB.