Amazon DynamoDB OpenSearch での取り込みパイプラインの使用 - Amazon OpenSearch サービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon DynamoDB OpenSearch での取り込みパイプラインの使用

DynamoDB で Ingestion OpenSearch パイプラインを使用して、DynamoDB テーブルイベント (作成、更新、削除など) を Amazon OpenSearch Service ドメインとコレクションにストリーミングできます。 OpenSearch Ingestion パイプラインには、変更データキャプチャ (CDC) インフラストラクチャが組み込まれており、DynamoDB テーブルからデータを継続的にストリーミングするための高スケール、低レイテンシーの方法を提供します。

データを処理するソースとして DynamoDB を使用するには、完全な初期スナップショットを使用する方法と使用しない方法の 2 つがあります。

完全な初期スナップショットは、DynamoDB がpoint-in-time リカバリ (PITR) 機能を使用して取得するテーブルのバックアップです。DynamoDB はこのスナップショットを Amazon S3 にアップロードします。そこから、Ingestion OpenSearch パイプラインはドメイン内の 1 つのインデックスに送信したり、ドメイン内の複数のインデックスにパーティション化したりします。データを DynamoDB に OpenSearch 一貫して維持するために、パイプラインは DynamoDB テーブルのすべての作成、更新、削除イベントを OpenSearch 、インデックスに保存されたドキュメントと同期します。

完全な初期スナップショットを使用すると、Ingestion OpenSearch パイプラインはまずスナップショットを取り込み、DynamoDB Streams からのデータの読み取りを開始します。最終的には、DynamoDB と の間のほぼリアルタイムのデータ整合性が追いついて維持されます OpenSearch。このオプションを選択する場合は、テーブルで PITR と DynamoDB ストリームの両方を有効にする必要があります。

Ingestion OpenSearch と DynamoDB の統合を使用して、スナップショットなしでイベントをストリーミングすることもできます。他のメカニズムからの完全なスナップショットが既にある場合、または DynamoDB Streams を使用して DynamoDB テーブルから現在のイベントをストリーミングするだけの場合は、このオプションを選択します。このオプションを選択した場合、必要なのは、テーブルで DynamoDB ストリームを有効にすることだけです。

この統合の詳細については、「 Amazon DynamoDB デベロッパーガイド」の「Amazon OpenSearch Service との DynamoDB ゼロ ETL 統合」を参照してください。

前提条件

パイプラインを設定するには、DynamoDB Streams が有効になっている DynamoDB テーブルが必要です。ストリームでは NEW_IMAGE ストリームビュータイプを使用する必要があります。ただし、このストリームビュータイプがユースケースに適合するNEW_AND_OLD_IMAGES場合、 OpenSearch 取り込みパイプラインは でイベントをストリーミングすることもできます。

スナップショットを使用している場合は、テーブルの point-in-time 復旧も有効にする必要があります。詳細については、「Amazon DynamoDB デベロッパーガイド」の「テーブル の作成」、 point-in-time 「リカバリ の有効化」、「ストリームの有効化」を参照してください。

ステップ 1: パイプラインロールを設定する

DynamoDB テーブルを設定したら、パイプライン設定で使用するパイプラインロールを設定し、そのロールに次の DynamoDB 許可を追加します。

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

AWS KMS カスタマーマネージドキーを使用してエクスポートデータファイルを暗号化することもできます。エクスポートされたオブジェクトを復号するには、パイプラインのエクスポート設定において、次の形式でキー ID として s3_sse_kms_key_id を指定します: arn:aws:kms:us-west-2:{account-id}:key/my-key-id

ステップ 2: パイプラインを作成する

その後、DynamoDB OpenSearch をソースとして指定する Ingestion パイプラインを次のように設定できます。このサンプルパイプラインは、PITR スナップショットを使用して table-a からデータを取り込み、続いて DynamoDB Streams からイベントを取り込みます。開始位置が LATEST であることは、パイプラインが 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 document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external"

AWS-DynamoDBChangeDataCapturePipeline または AWS-DynamoDBSingleTableDesignPipeline ブループリントを使用して、このパイプラインを作成できます。詳細については、「ブループリントを使用したパイプラインの作成」を参照してください。

データ整合性

OpenSearch 取り込みでは、データの耐久性を確保するため end-to-end の確認応答がサポートされています。パイプラインがスナップショットまたはストリームを読み取る際に、並列処理用のパーティションが動的に作成されます。パイプラインは、 OpenSearch ドメインまたはコレクション内のすべてのレコードを取り込んだ後に確認応答を受信すると、パーティションを完了としてマークします。

OpenSearch Serverless 検索コレクションに取り込む場合は、パイプラインでドキュメント ID を生成できます。 OpenSearch サーバーレス時系列コレクションに取り込む場合は、パイプラインがドキュメント ID を生成しないことに注意してください。

OpenSearch Ingestion パイプラインは、受信イベントアクションを対応する一括インデックス作成アクションにマッピングし、ドキュメントの取り込みにも役立ちます。これにより、データの一貫性が維持され、DynamoDB のすべてのデータ変更が の対応するドキュメントの変更と照合されます OpenSearch。

データ型のマッピング

OpenSearch サービスは、各受信ドキュメントのデータ型を DynamoDB の対応するデータ型に動的にマッピングします。次の表は、 OpenSearch サービスがさまざまなデータ型を自動的にマッピングする方法を示しています。

データタイプ OpenSearch DynamoDB

OpenSearch は数値データを自動的にマッピングします。数値が整数の場合、 はそれを長い値として OpenSearch マッピングします。数値が小数の場合、 はそれを浮動小数点値として OpenSearch マッピングします。

OpenSearch は、最初に送信されたドキュメントに基づいて、さまざまな属性を動的にマッピングします。DynamoDB の同じ属性についてデータ型が混在している場合 (整数と小数の両方など)、マッピングは失敗する可能性があります。

例えば、最初のドキュメントに整数の属性があり、後のドキュメントに小数と同じ属性がある場合、 は 2 番目のドキュメントを取り込む OpenSearch ことができません。このような場合は、次のような明示的なマッピングテンプレートを提供する必要があります:

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

倍精度が必要な場合は、文字列型のフィールドマッピングを使用します。には、38 桁の精度をサポートする同等の数値型はありません OpenSearch。

DynamoDB は数値をサポートしています。

数値セット OpenSearch は、数値セットを長整数または浮動小数点値の配列に自動的にマッピングします。スカラー数値の場合と同様、これは、取り込まれた最初の数値が整数または小数のいずれであるかによって異なります。スカラー文字列をマッピングするのと同じ方法で、数値セットのマッピングを提供できます。

DynamoDB は、数値のセットを表す型をサポートしています。

文字列

OpenSearch は、文字列値をテキストとして自動的にマッピングします。状況によっては (列挙型の値など)、キーワード型にマッピングできます。

次の例は、 という名前の DynamoDB 属性を OpenSearch キーワードPartTypeにマッピングする方法を示しています。

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

DynamoDB は文字列をサポートします。

文字列セット

OpenSearch は、文字列セットを文字列の配列に自動的にマッピングします。スカラー文字列をマッピングするのと同じ方法で、文字列セットのマッピングを提供できます。

DynamoDB は、文字列のセットを表す型をサポートしています。
バイナリ

OpenSearch はバイナリデータをテキストとして自動的にマッピングします。これらをバイナリフィールドとして に書き込むためのマッピングを指定できます OpenSearch。

次の例は、 という名前の DynamoDB 属性ImageDataを OpenSearch バイナリフィールドにマッピングする方法を示しています。

{ "template": { "mappings": { "properties": { "ImageData": { "type": "binary" } } } } }
DynamoDB はバイナリ型の属性をサポートしています。
バイナリセット

OpenSearch は、バイナリセットをテキストとしてバイナリデータの配列に自動的にマッピングします。スカラーバイナリをマッピングするのと同じ方法で、数値セットのマッピングを提供できます。

DynamoDB は、バイナリ値のセットを表す型をサポートしています。
ブール値

OpenSearch は、DynamoDB ブール型をブ OpenSearch ール型にマッピングします。

DynamoDB は、ブール型属性をサポートします。

Null

OpenSearch は、DynamoDB null 型のドキュメントを取り込むことができます。値は null 値としてドキュメントに保存されます。この型にはマッピングがなく、このフィールドにはインデックスが付けられず、検索もできません。

null 型に同じ属性名が使用され、後で文字列などの別の型に変更された場合、 は最初の NULL 以外の値の動的マッピング OpenSearch を作成します。後続の値は引き続き DynamoDB の null 値にすることができます。

DynamoDB は、null 型属性をサポートします。
マッピング

OpenSearch は、DynamoDB マップ属性をネストされたフィールドにマッピングします。同じマッピングがネストされたフィールド内でも適用されます。

次の例では、ネストされたフィールドの文字列を のキーワードタイプにマッピングします OpenSearch。

{ "template": { "mappings": { "properties": { "AdditionalDescriptions": { "properties": { "PartType": { "type": "keyword" } } } } } } }
DynamoDB は、マッピング型属性をサポートします。
リスト

OpenSearch では、リストの内容に応じて、DynamoDB リストの結果が異なります。

リストに同じタイプのスカラー型がすべて含まれている場合 (すべての文字列のリストなど)、 はそのタイプの配列としてリストを取り OpenSearch 込みます。これは、文字列、数値、ブール型、および null 型について機能します。これらの各型についての制限は、その型のスカラーについての制限と同じです。

また、マップに使用するのと同じマッピングを使用して、マップのリストのマッピングを提供することもできます。

混合型のリストを提供することはできません。

DynamoDB は、リスト型属性をサポートします。

設定

OpenSearch は、セットの内容に応じて、DynamoDB セットに対して異なる結果を提供します。

セットに同じタイプのスカラー型 (例えば、すべての文字列のセット) がすべて含まれている場合、 はそのセットをそのタイプの配列として OpenSearch 取り込みます。これは、文字列、数値、ブール型、および null 型について機能します。これらの各型についての制限は、その型のスカラーについての制限と同じです。

また、マップに使用するのと同じマッピングを使用して、マップのセットのマッピングを提供することもできます。

混合型のセットを提供することはできません。

DynamoDB は、セットを表す型をサポートします。

Ingestion パイプラインでデッドレターキュー (DLQ) OpenSearch を設定することをお勧めします。キューを設定している場合、 OpenSearch 動的マッピングの失敗により取り込めないすべての失敗したドキュメントがキューに送信されます。

自動マッピングが失敗した場合は、パイプライン設定で template_typetemplate_content を使用して明示的なマッピングルールを定義できます。あるいは、パイプラインを開始する前に、検索ドメインまたはコレクションにマッピングテンプレートを直接作成することもできます。

制限事項

DynamoDB OpenSearch の取り込みパイプラインを設定するときは、次の制限事項を考慮してください。

  • Ingestion と OpenSearch DynamoDB の統合は現在、クロスリージョン取り込みをサポートしていません。DynamoDB テーブルと OpenSearch 取り込みパイプラインは同じ に存在する必要があります AWS リージョン。

  • DynamoDB テーブルと OpenSearch 取り込みパイプラインは同じ に存在する必要があります AWS アカウント。

  • Ingestion OpenSearch パイプラインは、ソースとして 1 つの DynamoDB テーブルのみをサポートします。

  • DynamoDB Streams は、最大 24 時間ログにデータを格納します。大きなテーブルの最初のスナップショットからの取り込みに 24 時間以上かかる場合、初期データの一部が失われます。このデータ損失を軽減するには、テーブルのサイズを見積もり、適切な Ingestion OpenSearch パイプラインのコンピューティングユニットを設定します。