Utilizzo di una pipeline OpenSearch di ingestione con Amazon DynamoDB - OpenSearch Servizio Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di una pipeline OpenSearch di ingestione con Amazon DynamoDB

Puoi utilizzare una pipeline di OpenSearch ingestion con DynamoDB per trasmettere gli eventi delle tabelle DynamoDB (come creazione, aggiornamento ed eliminazione) ai domini e alle raccolte di Amazon Service. OpenSearch La pipeline OpenSearch Ingestion incorpora l'infrastruttura Change Data Capture (CDC) per fornire un modo su larga scala e a bassa latenza per lo streaming continuo di dati da una tabella DynamoDB.

Esistono due modi per utilizzare DynamoDB come origine per elaborare i dati: con e senza un'istantanea iniziale completa.

Un'istantanea iniziale completa è un backup di una tabella che DynamoDB esegue con la funzionalità di ripristino (point-in-time PITR). DynamoDB carica questa istantanea su Amazon S3. Da lì, una pipeline di OpenSearch Ingestion lo invia a un indice in un dominio o lo partiziona in più indici di un dominio. Per mantenere i dati in DynamoDB OpenSearch e coerenti, la pipeline sincronizza tutti gli eventi di creazione, aggiornamento ed eliminazione nella tabella DynamoDB con i documenti salvati nell'indice o negli indici. OpenSearch

Quando si utilizza uno snapshot iniziale completo, la pipeline di OpenSearch Ingestion prima lo inserisce e poi inizia a leggere i dati da DynamoDB Streams. Alla fine recupera e mantiene la coerenza dei dati quasi in tempo reale tra DynamoDB e. OpenSearch Quando scegli questa opzione, devi abilitare sia PITR che uno stream DynamoDB sulla tua tabella.

Puoi anche utilizzare l'integrazione di OpenSearch Ingestion con DynamoDB per lo streaming di eventi senza un'istantanea. Scegli questa opzione se disponi già di un'istantanea completa di un altro meccanismo o se desideri semplicemente trasmettere gli eventi correnti da una tabella DynamoDB con DynamoDB Streams. Quando scegli questa opzione, devi solo abilitare un flusso DynamoDB sulla tua tabella.

Per ulteriori informazioni su questa integrazione, consulta l'integrazione zero-ETL di DynamoDB con OpenSearch Amazon Service nella Developer Guide.Amazon DynamoDB

Prerequisiti

Per configurare la pipeline, è necessario disporre di una tabella DynamoDB con DynamoDB Streams abilitato. Il tuo stream deve utilizzare il tipo di visualizzazione dello stream. NEW_IMAGE Tuttavia, le pipeline di OpenSearch Ingestion possono anche trasmettere eventi NEW_AND_OLD_IMAGES se questo tipo di visualizzazione dello stream si adatta al tuo caso d'uso.

Se utilizzi le istantanee, devi anche abilitare il point-in-time ripristino sulla tua tabella. Per ulteriori informazioni, consulta Creating a table, Enabling point-in-time recovery e Enabling a stream nella Amazon DynamoDB Developer Guide.

Fase 1: Configurare il ruolo della pipeline

Dopo aver impostato la tabella DynamoDB, imposta il ruolo pipeline che desideri utilizzare nella configurazione della pipeline e aggiungi le seguenti autorizzazioni DynamoDB nel ruolo:

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

Puoi anche utilizzare una chiave gestita dal AWS KMS cliente per crittografare i file di dati di esportazione. Per decrittografare gli oggetti esportati, specificate s3_sse_kms_key_id l'ID della chiave nella configurazione di esportazione della pipeline con il seguente formato:. arn:aws:kms:us-west-2:{account-id}:key/my-key-id La seguente politica include le autorizzazioni richieste per l'utilizzo di una chiave gestita dal cliente:

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

Fase 2: Creare la pipeline

È quindi possibile configurare una pipeline OpenSearch di ingestione come la seguente, che specifica DynamoDB come origine. Questa pipeline di esempio inserisce i dati table-a con lo snapshot PITR, seguiti dagli eventi di DynamoDB Streams. Una posizione iniziale di LATEST indica che la pipeline deve leggere i dati più recenti da 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"

È possibile utilizzare un blueprint DynamoDB preconfigurato per creare questa pipeline. Per ulteriori informazioni, consulta Utilizzo dei blueprint per creare una pipeline.

Coerenza dei dati

OpenSearch Ingestion supporta il riconoscimento per garantire la durabilità dei dati. end-to-end Quando una pipeline legge istantanee o flussi, crea dinamicamente partizioni per l'elaborazione parallela. La pipeline contrassegna una partizione come completa quando riceve un riconoscimento dopo aver acquisito tutti i record nel dominio o nella raccolta. OpenSearch

Se desideri importare in una raccolta di ricerca OpenSearch Serverless, puoi generare un ID di documento nella pipeline. Se desideri importare in una raccolta di serie temporali OpenSearch Serverless, tieni presente che la pipeline non genera un ID di documento.

Una pipeline OpenSearch di Ingestion mappa anche le azioni degli eventi in entrata nelle corrispondenti azioni di indicizzazione di massa per facilitare l'acquisizione dei documenti. Ciò mantiene i dati coerenti, in modo che ogni modifica dei dati in DynamoDB venga riconciliata con le corrispondenti modifiche del documento. OpenSearch

Mappatura dei tipi di dati

OpenSearch Il servizio mappa dinamicamente i tipi di dati in ogni documento in entrata al tipo di dati corrispondente in DynamoDB. La tabella seguente mostra come OpenSearch Service mappa automaticamente vari tipi di dati.

Tipo di dati OpenSearch DynamoDB
Numero

OpenSearch mappa automaticamente i dati numerici. Se il numero è un numero intero, lo OpenSearch mappa come valore lungo. Se il numero è frazionario, lo OpenSearch mappa come valore float.

OpenSearch mappa dinamicamente vari attributi in base al primo documento inviato. Se si dispone di una combinazione di tipi di dati per lo stesso attributo in DynamoDB, ad esempio un numero intero e un numero frazionario, la mappatura potrebbe non riuscire.

Ad esempio, se il primo documento ha un attributo che è un numero intero e un documento successivo ha lo stesso attributo come numero frazionario, OpenSearch non riesce a importare il secondo documento. In questi casi, è necessario fornire un modello di mappatura esplicito, come il seguente:

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

Se hai bisogno di una doppia precisione, usa la mappatura dei campi di tipo stringa. Non esiste un tipo numerico equivalente che supporti 38 cifre di precisione in. OpenSearch

DynamoDB supporta i numeri.

Set di numeri OpenSearch mappa automaticamente un set di numeri in una matrice di valori lunghi o valori float. Come per i numeri scalari, ciò dipende dal fatto che il primo numero ingerito sia un numero intero o un numero frazionario. È possibile fornire mappature per i set di numeri nello stesso modo in cui si mappano le stringhe scalari.

DynamoDB supporta tipi che rappresentano insiemi di numeri.

Stringa

OpenSearch mappa automaticamente i valori delle stringhe come testo. In alcune situazioni, come i valori enumerati, è possibile eseguire il mapping al tipo di parola chiave.

L'esempio seguente mostra come mappare un attributo DynamoDB PartType denominato a una parola chiave. OpenSearch

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

DynamoDB supporta le stringhe.

Set di stringhe

OpenSearch mappa automaticamente un set di stringhe in un array di stringhe. È possibile fornire mappature per i set di stringhe nello stesso modo in cui si mappano le stringhe scalari.

DynamoDB supporta tipi che rappresentano set di stringhe.
Binario

OpenSearch mappa automaticamente i dati binari come testo. È possibile fornire una mappatura in cui scriverli come campi binari. OpenSearch

L'esempio seguente mostra come mappare un attributo DynamoDB ImageData denominato su un campo binario. OpenSearch

{ "template": { "mappings": { "properties": { "ImageData": { "type": "binary" } } } } }
DynamoDB supporta gli attributi di tipo binario.
Set binario

OpenSearch mappa automaticamente un set binario in una matrice di dati binari come testo. È possibile fornire mappature per i set di numeri nello stesso modo in cui si esegue la mappatura di un sistema binario scalare.

DynamoDB supporta tipi che rappresentano insiemi di valori binari.
Booleano

OpenSearch mappa un tipo booleano DynamoDB in un tipo booleano. OpenSearch

DynamoDB supporta gli attributi di tipo booleano.

Null

OpenSearch può importare documenti con il tipo null DynamoDB. Salva il valore come valore nullo nel documento. Non esiste alcuna mappatura per questo tipo e questo campo non è indicizzato o ricercabile.

Se lo stesso nome di attributo viene utilizzato per un tipo nullo e successivamente passa a un tipo diverso, ad esempio string, OpenSearch crea una mappatura dinamica per il primo valore non nullo. I valori successivi possono ancora essere valori nulli di DynamoDB.

DynamoDB supporta attributi di tipo null.
Eseguire la mappatura

OpenSearch mappa gli attributi della mappa di DynamoDB ai campi annidati. Le stesse mappature si applicano all'interno di un campo nidificato.

L'esempio seguente mappa una stringa in un campo nidificato a un tipo di parola chiave in: OpenSearch

{ "template": { "mappings": { "properties": { "AdditionalDescriptions": { "properties": { "PartType": { "type": "keyword" } } } } } } }
DynamoDB supporta gli attributi dei tipi di mappa.
Elenco

OpenSearch fornisce risultati diversi per gli elenchi DynamoDB, a seconda del contenuto dell'elenco.

Quando un elenco contiene tutti i tipi scalari dello stesso tipo (ad esempio, un elenco di tutte le stringhe), OpenSearch inserisce l'elenco come un array di quel tipo. Funziona per i tipi stringa, numerica, booleana e null. Le restrizioni per ciascuno di questi tipi sono le stesse delle restrizioni per uno scalare di quel tipo.

È inoltre possibile fornire mappature per elenchi di mappe utilizzando la stessa mappatura utilizzata per una mappa.

Non puoi fornire un elenco di tipi misti.

DynamoDB supporta gli attributi del tipo di elenco.

Imposta

OpenSearch fornisce risultati diversi per i set DynamoDB a seconda del contenuto del set.

Quando un set contiene tutti i tipi scalari dello stesso tipo (ad esempio, un insieme di tutte le stringhe), OpenSearch inserisce il set come un array di quel tipo. Funziona per i tipi stringa, numerica, booleana e null. Le restrizioni per ciascuno di questi tipi sono le stesse delle restrizioni per uno scalare di quel tipo.

È inoltre possibile fornire mappature per set di mappe utilizzando la stessa mappatura utilizzata per una mappa.

Non puoi fornire un set di tipi misti.

DynamoDB supporta tipi che rappresentano set.

Ti consigliamo di configurare la dead-letter queue (DLQ) nella pipeline di Ingestion. OpenSearch Se hai configurato la coda, OpenSearch Service invia tutti i documenti non riusciti che non possono essere importati a causa di errori di mappatura dinamica sulla coda.

Nel caso in cui le mappature automatiche falliscano, puoi utilizzare template_type e template_content nella configurazione della pipeline per definire regole di mappatura esplicite. In alternativa, puoi creare modelli di mappatura direttamente nel tuo dominio di ricerca o nella tua raccolta prima di avviare la pipeline.

Limitazioni

Considerate le seguenti limitazioni quando impostate una pipeline di OpenSearch ingestione per DynamoDB:

  • L'integrazione OpenSearch di Ingestion con DynamoDB attualmente non supporta l'ingestione tra regioni. La tabella DynamoDB OpenSearch e la pipeline di ingestione devono trovarsi nella stessa posizione. Regione AWS

  • La tabella DynamoDB OpenSearch e la pipeline di ingestione devono trovarsi nella stessa posizione. Account AWS

  • Una pipeline OpenSearch di ingestione supporta solo una tabella DynamoDB come origine.

  • DynamoDB Streams archivia i dati in un registro solo per un massimo di 24 ore. Se l'inserimento da un'istantanea iniziale di una tabella di grandi dimensioni richiede 24 ore o più, si verificherà una perdita iniziale di dati. Per mitigare questa perdita di dati, stimate la dimensione della tabella e configurate le unità di calcolo appropriate delle pipeline di Ingestion. OpenSearch