Verwenden einer OpenSearch Ingestion-Pipeline mit Amazon DynamoDB - OpenSearch Amazon-Dienst

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden einer OpenSearch Ingestion-Pipeline mit Amazon DynamoDB

Sie können eine OpenSearch Ingestion-Pipeline mit DynamoDB verwenden, um DynamoDB-Tabellenereignisse (wie Erstellen, Aktualisieren und Löschen) in Amazon Service-Domänen und Sammlungen zu streamen. OpenSearch Die OpenSearch Ingestion-Pipeline umfasst eine CDC-Infrastruktur (Change Data Capture), um eine hochskalierbare Methode mit niedriger Latenz für das kontinuierliche Streamen von Daten aus einer DynamoDB-Tabelle bereitzustellen.

Es gibt zwei Möglichkeiten, DynamoDB als Quelle für die Datenverarbeitung zu verwenden — mit und ohne einen vollständigen anfänglichen Snapshot.

Ein vollständiger Anfangssnapshot ist eine Sicherung einer Tabelle, die DynamoDB mit der point-in-time Wiederherstellungsfunktion (PITR) erstellt. DynamoDB lädt diesen Snapshot auf Amazon S3 hoch. Von dort aus sendet eine OpenSearch Ingestion-Pipeline ihn an einen Index in einer Domain oder partitioniert ihn in mehrere Indizes in einer Domain. Damit die Daten in DynamoDB OpenSearch konsistent bleiben, synchronisiert die Pipeline alle Erstellungs-, Aktualisierungs- und Löschereignisse in der DynamoDB-Tabelle mit den Dokumenten, die im Index oder den Indizes gespeichert sind. OpenSearch

Wenn Sie einen vollständigen Anfangssnapshot verwenden, nimmt Ihre OpenSearch Ingestion-Pipeline zuerst den Snapshot auf und beginnt dann, Daten aus DynamoDB Streams zu lesen. Es holt schließlich auf und gewährleistet nahezu in Echtzeit die Datenkonsistenz zwischen DynamoDB und. OpenSearch Wenn Sie diese Option wählen, müssen Sie sowohl PITR als auch einen DynamoDB-Stream in Ihrer Tabelle aktivieren.

Sie können auch die OpenSearch Ingestion-Integration mit DynamoDB verwenden, um Ereignisse ohne Snapshot zu streamen. Wählen Sie diese Option, wenn Sie bereits einen vollständigen Snapshot von einem anderen Mechanismus haben oder wenn Sie nur aktuelle Ereignisse aus einer DynamoDB-Tabelle mit DynamoDB Streams streamen möchten. Wenn Sie diese Option wählen, müssen Sie nur einen DynamoDB-Stream in Ihrer Tabelle aktivieren.

Weitere Informationen zu dieser Integration finden Sie unter DynamoDB Zero-ETL-Integration mit Amazon OpenSearch Service im Entwicklerhandbuch.Amazon DynamoDB

Voraussetzungen

Um Ihre Pipeline einzurichten, benötigen Sie eine DynamoDB-Tabelle mit aktivierten DynamoDB Streams. Ihr Stream sollte den Stream-View-Typ verwenden. NEW_IMAGE OpenSearch Ingestion-Pipelines können jedoch auch Ereignisse streamen, NEW_AND_OLD_IMAGES sofern dieser Stream-View-Typ zu Ihrem Anwendungsfall passt.

Wenn Sie Snapshots verwenden, müssen Sie auch die point-in-time Wiederherstellung für Ihre Tabelle aktivieren. Weitere Informationen finden Sie unter Erstellen einer Tabelle, Aktivieren der point-in-time Wiederherstellung und Aktivieren eines Streams im Amazon DynamoDB DynamoDB-Entwicklerhandbuch.

Schritt 1: Konfigurieren Sie die Pipeline-Rolle

Nachdem Sie Ihre DynamoDB-Tabelle eingerichtet haben, richten Sie die Pipeline-Rolle ein, die Sie in Ihrer Pipeline-Konfiguration verwenden möchten, und fügen Sie der Rolle die folgenden DynamoDB-Berechtigungen hinzu:

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

Sie können auch einen vom AWS KMS Kunden verwalteten Schlüssel verwenden, um die Exportdatendateien zu verschlüsseln. Um die exportierten Objekte zu entschlüsseln, geben Sie s3_sse_kms_key_id für die Schlüssel-ID in der Exportkonfiguration der Pipeline das folgende Format an:. arn:aws:kms:us-west-2:{account-id}:key/my-key-id Die folgende Richtlinie umfasst die erforderlichen Berechtigungen für die Verwendung eines vom Kunden verwalteten Schlüssels:

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

Schritt 2: Erstellen Sie die Pipeline

Anschließend können Sie eine OpenSearch Ingestion-Pipeline wie die folgende konfigurieren, die DynamoDB als Quelle angibt. Diese Beispielpipeline nimmt Daten aus table-a dem PITR-Snapshot auf, gefolgt von Ereignissen aus DynamoDB Streams. Die Startposition von LATEST gibt an, dass die Pipeline die neuesten Daten aus DynamoDB Streams lesen soll.

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"

Sie können einen vorkonfigurierten DynamoDB-Blueprint verwenden, um diese Pipeline zu erstellen. Weitere Informationen finden Sie unter Verwenden von Blueprints zum Erstellen einer Pipeline.

Datenkonsistenz

OpenSearch Die Datenaufnahme unterstützt end-to-end die Bestätigung, um die Datenbeständigkeit sicherzustellen. Wenn eine Pipeline Snapshots oder Streams liest, erstellt sie dynamisch Partitionen für die Parallelverarbeitung. Die Pipeline markiert eine Partition als abgeschlossen, wenn sie nach der Aufnahme aller Datensätze in der OpenSearch Domäne oder Sammlung eine Bestätigung erhält.

Wenn Sie Daten in eine OpenSearch serverlose Suchsammlung aufnehmen möchten, können Sie in der Pipeline eine Dokument-ID generieren. Wenn Sie Daten in eine OpenSearch serverlose Zeitreihensammlung aufnehmen möchten, beachten Sie, dass die Pipeline keine Dokument-ID generiert.

Eine OpenSearch Ingestion-Pipeline ordnet außerdem eingehende Ereignisaktionen den entsprechenden Massenindizierungsaktionen zu, um das Ingestieren von Dokumenten zu erleichtern. Dadurch bleiben die Daten konsistent, sodass jede Datenänderung in DynamoDB mit den entsprechenden Dokumentänderungen in abgeglichen wird. OpenSearch

Datentypen zuordnen

OpenSearch Der Service ordnet Datentypen in jedem eingehenden Dokument dynamisch dem entsprechenden Datentyp in DynamoDB zu. Die folgende Tabelle zeigt, wie OpenSearch Service verschiedene Datentypen automatisch zuordnet.

Datentyp OpenSearch DynamoDB
Zahl

OpenSearch ordnet numerische Daten automatisch zu. Wenn es sich bei der Zahl um eine ganze Zahl OpenSearch handelt, wird sie einem langen Wert zugeordnet. Wenn es sich bei der Zahl um eine Bruchzahl handelt, wird OpenSearch sie einem Gleitkommawert zugeordnet.

OpenSearch ordnet verschiedene Attribute dynamisch auf der Grundlage des ersten gesendeten Dokuments zu. Wenn Sie in DynamoDB eine Mischung aus Datentypen für dasselbe Attribut haben, z. B. sowohl eine ganze Zahl als auch eine Bruchzahl, schlägt die Zuordnung möglicherweise fehl.

Wenn Ihr erstes Dokument beispielsweise ein Attribut hat, das eine ganze Zahl ist, und ein späteres Dokument dasselbe Attribut wie eine Bruchzahl hat, OpenSearch kann das zweite Dokument nicht aufgenommen werden. In diesen Fällen sollten Sie eine explizite Zuordnungsvorlage bereitstellen, z. B. die folgende:

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

Wenn Sie doppelte Genauigkeit benötigen, verwenden Sie eine Feldzuordnung vom Typ Zeichenfolge. Es gibt keinen äquivalenten numerischen Typ, der eine Genauigkeit von 38 Ziffern unterstützt. OpenSearch

DynamoDB unterstützt Zahlen.

Zahlensatz OpenSearch ordnet einen Zahlensatz automatisch einem Array von Langwerten oder Gleitkommawerten zu. Wie bei den Skalarzahlen hängt dies davon ab, ob es sich bei der ersten aufgenommenen Zahl um eine ganze Zahl oder um eine Bruchzahl handelt. Sie können Zuordnungen für Zahlensätze auf die gleiche Weise bereitstellen, wie Sie skalare Zeichenketten zuordnen.

DynamoDB unterstützt Typen, die Gruppen von Zahlen darstellen.

String

OpenSearch ordnet Zeichenkettenwerte automatisch als Text zu. In einigen Situationen, z. B. bei Aufzählungswerten, können Sie sie dem Schlüsselworttyp zuordnen.

Das folgende Beispiel zeigt, wie ein benanntes DynamoDB-Attribut einem Schlüsselwort PartType zugeordnet wird OpenSearch .

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

DynamoDB unterstützt Zeichenketten.

Zeichenkettensatz

OpenSearch ordnet einen Zeichenkettensatz automatisch einem Zeichenketten-Array zu. Sie können Zuordnungen für Zeichenkettensätze auf die gleiche Weise bereitstellen, wie Sie skalare Zeichenketten zuordnen.

DynamoDB unterstützt Typen, die Sätze von Zeichenketten darstellen.
Binär

OpenSearch ordnet Binärdaten automatisch als Text zu. Sie können ein Mapping bereitstellen, in das Sie diese als Binärfelder schreiben können OpenSearch.

Das folgende Beispiel zeigt, wie ein benanntes DynamoDB-Attribut einem ImageData OpenSearch Binärfeld zugeordnet wird.

{ "template": { "mappings": { "properties": { "ImageData": { "type": "binary" } } } } }
DynamoDB unterstützt binäre Typattribute.
Binärer Satz

OpenSearch ordnet eine Binärmenge automatisch einem Array von Binärdaten als Text zu. Sie können Zuordnungen für Zahlensätze auf die gleiche Weise bereitstellen, wie Sie skalare Binärwerte zuordnen.

DynamoDB unterstützt Typen, die Sätze von Binärwerten darstellen.
Boolesch

OpenSearch ordnet einen booleschen DynamoDB-Typ einem booleschen Typ zu. OpenSearch

DynamoDB unterstützt Attribute vom Typ Boolean.

Null

OpenSearch kann Dokumente mit dem DynamoDB-Nulltyp aufnehmen. Es speichert den Wert als Nullwert im Dokument. Für diesen Typ gibt es keine Zuordnung, und dieses Feld ist weder indexiert noch durchsuchbar.

Wenn derselbe Attributname für einen Null-Typ verwendet wird und später zu einem anderen Typ, wie z. B. einer Zeichenfolge, geändert OpenSearch wird, wird eine dynamische Zuordnung für den ersten Wert, der nicht Null ist, erstellt. Nachfolgende Werte können immer noch DynamoDB-Nullwerte sein.

DynamoDB unterstützt Attribute vom Typ Null.
Zuordnung

OpenSearch ordnet DynamoDB-Zuordnungsattribute verschachtelten Feldern zu. Dieselben Zuordnungen gelten für ein verschachteltes Feld.

Das folgende Beispiel ordnet eine Zeichenfolge in einem verschachtelten Feld einem Schlüsselworttyp in zu: OpenSearch

{ "template": { "mappings": { "properties": { "AdditionalDescriptions": { "properties": { "PartType": { "type": "keyword" } } } } } } }
DynamoDB unterstützt Map-Typ-Attribute.
Auflisten

OpenSearch liefert unterschiedliche Ergebnisse für DynamoDB-Listen, je nachdem, was in der Liste steht.

Wenn eine Liste alle Skalartypen desselben Typs enthält (z. B. eine Liste aller Zeichenketten), wird die Liste als Array dieses Typs OpenSearch aufgenommen. Dies funktioniert für die Typen Zeichenfolge, Zahl, Boolean und Null. Die Einschränkungen für jeden dieser Typen sind dieselben wie die Einschränkungen für einen Skalar dieses Typs.

Sie können auch Zuordnungen für Kartenlisten bereitstellen, indem Sie dieselbe Zuordnung verwenden, die Sie für eine Karte verwenden würden.

Sie können keine Liste mit gemischten Typen bereitstellen.

DynamoDB unterstützt Listentypattribute.

Einstellen

OpenSearch liefert unterschiedliche Ergebnisse für DynamoDB-Sets, je nachdem, was in der Gruppe enthalten ist.

Wenn eine Menge alle Skalartypen desselben Typs enthält (z. B. eine Menge aller Zeichenketten), wird die Menge als Array dieses Typs OpenSearch aufgenommen. Dies funktioniert für die Typen Zeichenfolge, Zahl, Boolean und Null. Die Einschränkungen für jeden dieser Typen sind dieselben wie die Einschränkungen für einen Skalar dieses Typs.

Sie können auch Zuordnungen für Kartengruppen bereitstellen, indem Sie dieselbe Zuordnung verwenden, die Sie für eine Karte verwenden würden.

Sie können keinen Satz gemischter Typen bereitstellen.

DynamoDB unterstützt Typen, die Mengen darstellen.

Wir empfehlen, dass Sie die Dead-Letter-Warteschlange (DLQ) in Ihrer Ingestion-Pipeline konfigurieren. OpenSearch Wenn Sie die Warteschlange konfiguriert haben, sendet OpenSearch Service alle fehlgeschlagenen Dokumente, die aufgrund von Fehlern bei der dynamischen Zuordnung nicht aufgenommen werden konnten, an die Warteschlange.

Falls automatische Zuordnungen fehlschlagen, können Sie template_type und template_content in Ihrer Pipeline-Konfiguration verwenden, um explizite Zuordnungsregeln zu definieren. Alternativ können Sie Zuordnungsvorlagen direkt in Ihrer Suchdomain oder Sammlung erstellen, bevor Sie die Pipeline starten.

Einschränkungen

Beachten Sie die folgenden Einschränkungen, wenn Sie eine OpenSearch Ingestion-Pipeline für DynamoDB einrichten:

  • Die OpenSearch Ingestion-Integration mit DynamoDB unterstützt derzeit keine regionsübergreifende Aufnahme. Ihre DynamoDB-Tabelle und die OpenSearch Ingestion-Pipeline müssen identisch sein. AWS-Region

  • Ihre DynamoDB-Tabelle und die OpenSearch Ingestion-Pipeline müssen identisch sein. AWS-Konto

  • Eine OpenSearch Ingestion-Pipeline unterstützt nur eine DynamoDB-Tabelle als Quelle.

  • DynamoDB Streams speichert Daten nur bis zu 24 Stunden in einem Protokoll. Wenn die Aufnahme von einem ersten Snapshot einer großen Tabelle 24 Stunden oder länger dauert, kommt es zu einem anfänglichen Datenverlust. Um diesen Datenverlust zu minimieren, schätzen Sie die Größe der Tabelle und konfigurieren Sie die entsprechenden Recheneinheiten der OpenSearch Datenerfassungspipelines.