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 Change Data Capture (CDC) -Infrastruktur, um eine hochskalierbare Methode mit geringer 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 Funktion point-in-time recovery (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 PITR sowohl 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 with Amazon OpenSearch Service im Amazon DynamoDB Developer Guide.

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 Warteschlange für unzustellbare Briefe (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, zur 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.

Empfohlene CloudWatch Alarme für DynamoDB

Die folgenden CloudWatch Metriken werden für die Überwachung der Leistung Ihrer Datenerfassungspipeline empfohlen. Mithilfe dieser Metriken können Sie die Menge der im Rahmen von Exporten verarbeiteten Daten, die Anzahl der aus Streams verarbeiteten Ereignisse, die Fehler bei der Verarbeitung von Exporten und Stream-Ereignissen sowie die Anzahl der Dokumente, die an das Ziel geschrieben wurden, ermitteln. Sie können CloudWatch Alarme einrichten, um eine Aktion auszuführen, wenn eine dieser Metriken für einen bestimmten Zeitraum einen bestimmten Wert überschreitet.

Metrik Beschreibung
dynamodb-pipeline.BlockingBuffer.bufferUsage.value

Gibt an, wie viel Puffer genutzt wird.

dynamodb-pipeline.dynamodb.activeExportS3ObjectConsumers.value

Zeigt die Gesamtzahl derjenigen anOCUs, die aktiv Amazon S3 S3-Objekte für den Export verarbeiten.

dynamodb-pipeline.dynamodb.bytesProcessed.count

Anzahl der aus der DynamoDB-Quelle verarbeiteten Byte.

dynamodb-pipeline.dynamodb.changeEventsProcessed.count

Anzahl der aus dem DynamoDB-Stream verarbeiteten Änderungsereignisse.

dynamodb-pipeline.dynamodb.changeEventsProcessingErrors.count

Anzahl der Fehler aufgrund von Änderungsereignissen, die von DynamoDB verarbeitet wurden.

dynamodb-pipeline.dynamodb.exportJobFailure.count Anzahl der fehlgeschlagenen Übermittlungsversuche für Exportaufträge.
dynamodb-pipeline.dynamodb.exportJobSuccess.count Anzahl der erfolgreich eingereichten Exportaufträge.
dynamodb-pipeline.dynamodb.exportRecordsProcessed.count

Gesamtzahl der beim Export verarbeiteten Datensätze.

dynamodb-pipeline.dynamodb.exportRecordsTotal.count

Gesamtzahl der aus DynamoDB exportierten Datensätze, unverzichtbar für die Verfolgung von Datenexportvolumen.

dynamodb-pipeline.dynamodb.exportS3ObjectsProcessed.count Gesamtzahl der Exportdatendateien, die erfolgreich von Amazon S3 verarbeitet wurden.
dynamodb-pipeline.opensearch.bulkBadRequestErrors.count Anzahl der Fehler bei Massenanfragen aufgrund einer falsch formatierten Anfrage.
dynamodb-pipeline.opensearch.bulkRequestLatency.avg Durchschnittliche Latenz bei Massen-Schreibanfragen an OpenSearch.
dynamodb-pipeline.opensearch.bulkRequestNotFoundErrors.count Anzahl der Massenanfragen, die fehlgeschlagen sind, weil die Zieldaten nicht gefunden werden konnten.
dynamodb-pipeline.opensearch.bulkRequestNumberOfRetries.count Anzahl der Wiederholungen von OpenSearch Ingestion-Pipelines, den Cluster zu schreiben. OpenSearch
dynamodb-pipeline.opensearch.bulkRequestSizeBytes.sum Gesamtgröße aller Massenanfragen in Byte, an. OpenSearch
dynamodb-pipeline.opensearch.documentErrors.count Anzahl der Fehler beim Senden von Dokumenten an OpenSearch. Die Dokumente, die die Fehler verursacht haben, werden an DLQ gesendet.
dynamodb-pipeline.opensearch.documentsSuccess.count Anzahl der Dokumente, die erfolgreich in einen OpenSearch Cluster oder eine Sammlung geschrieben wurden.
dynamodb-pipeline.opensearch.documentsSuccessFirstAttempt.count Anzahl der Dokumente, die beim ersten Versuch erfolgreich indexiert wurden. OpenSearch

dynamodb-pipeline.opensearch.documentsVersionConflictErrors.count

Anzahl der Fehler aufgrund von Versionskonflikten in Dokumenten während der Verarbeitung.

dynamodb-pipeline.opensearch.PipelineLatency.avg

Durchschnittliche Latenz der OpenSearch Ingestion-Pipeline bei der Verarbeitung der Daten durch Lesen von der Quelle bis hin zum Schreiben an das Ziel.
dynamodb-pipeline.opensearch.PipelineLatency.max Maximale Latenz der OpenSearch Ingestion-Pipeline zur Verarbeitung der Daten durch Lesen von der Quelle bis hin zum Schreiben des Ziels.
dynamodb-pipeline.opensearch.recordsIn.count Anzahl der Datensätze, in die erfolgreich aufgenommen wurden. OpenSearch Diese Metrik ist wichtig, um die Menge der verarbeiteten und gespeicherten Daten zu verfolgen.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsFailed.count Anzahl der Datensätze, in die nicht geschrieben werden konnteDLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsSuccess.count Anzahl der Datensätze, in die geschrieben wurdeDLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.count Anzahl der Latenzmessungen für Anfragen an die Amazon S3 S3-Warteschlange für unzustellbare Briefe.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.sum Gesamtlatenz für alle Anfragen an die Amazon S3 S3-Warteschlange für unzustellbare Briefe
dynamodb-pipeline.opensearch.s3.dlqS3RequestSizeBytes.sum Gesamtgröße aller Anfragen in Byte, die an die Amazon S3-Warteschlange für unzustellbare Briefe gestellt wurden.
dynamodb-pipeline.recordsProcessed.count Gesamtzahl der in der Pipeline verarbeiteten Datensätze, eine wichtige Kennzahl für den Gesamtdurchsatz.
dynamodb.changeEventsProcessed.count Es werden keine Datensätze aus DynamoDB-Streams gesammelt. Dies könnte daran liegen, dass in der Tabelle keine Aktivität vorhanden ist, dass gerade ein Export ausgeführt wird oder dass ein Problem beim Zugriff auf die DynamoDB-Streams aufgetreten ist.

dynamodb.exportJobFailure.count

Der Versuch, einen Export nach S3 auszulösen, ist fehlgeschlagen.

line.opensearch.bulkRequestInvalidInputErrors.count

Anzahl der Fehler bei Massenanfragen OpenSearch aufgrund ungültiger Eingaben, was für die Überwachung der Datenqualität und für betriebliche Probleme von entscheidender Bedeutung ist.
opensearch.EndToEndLatency.avg Die End-to-End-Latenz ist beim Lesen aus DynamoDB-Streams höher als gewünscht. Dies könnte auf einen unterskalierten OpenSearch Cluster oder eine maximale OCU Pipeline-Kapazität zurückzuführen sein, die für den WCU Durchsatz in der DynamoDB-Tabelle zu niedrig ist. Diese durchgehende Latenz wird nach einem Export hoch sein und sollte mit der Zeit abnehmen, wenn sie sich an die neuesten DynamoDB-Streams anpasst.