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

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

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

Amazon DocumentDB OpenSearch で Ingestion パイプラインを使用して、ドキュメントの変更 (作成、更新、削除など) を Amazon OpenSearch Service ドメインとコレクションにストリーミングできます。 OpenSearch Ingestion パイプラインは、Amazon DocumentDB クラスターで利用可能な場合は変更データキャプチャ (CDC) メカニズム、またはAPIポーリングを活用して、Amazon DocumentDB クラスターからデータを継続的にストリーミングするための大規模で低レイテンシーの方法を提供できます。

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

完全な初期スナップショットは、Amazon DocumentDB コレクション全体の一括クエリです。Amazon DocumentDB は、このスナップショットを Amazon S3 にアップロードします。そこから、取り込みパイプラインはドメイン内の 1 OpenSearch つのインデックスに送信するか、ドメイン内の複数のインデックスにパーティション化します。Amazon DocumentDB 内のデータを OpenSearch 一貫性に保つために、パイプラインは Amazon DocumentDB コレクション内のすべての作成、更新、削除イベントを OpenSearch 、インデックスまたはインデックスに保存されたドキュメントと同期します。

完全な初期スナップショットを使用すると、 OpenSearch 取り込みパイプラインは最初にスナップショットを取り込んでから、Amazon DocumentDB 変更ストリームからのデータの読み取りを開始します。最終的には、Amazon DocumentDB と の間のほぼリアルタイムのデータ整合性が追いついて維持されます OpenSearch。

Amazon DocumentDB OpenSearch との Ingestion 統合を使用して、スナップショットなしでイベントをストリーミングすることもできます。このオプションは、他のメカニズムからの完全なスナップショットが既にある場合、または変更ストリームを使用して Amazon DocumentDB コレクションから現在のイベントをストリーミングする場合に選択します。

パイプライン設定で でストリームを有効にする場合は、これらのオプションの両方で Amazon DocumentDB コレクションで変更ストリームを有効にする必要があります。 Amazon DocumentDB 全ロードまたはエクスポートのみを使用する場合は、変更ストリームを有効にする必要はありません。

前提条件

OpenSearch 取り込みパイプラインを作成する前に、次のステップを実行します。

  1. Amazon DocumentDB デベロッパーガイド」のAmazon DocumentDB クラスターを作成する」の手順に従って、データを読み取るアクセス許可を持つ Amazon DocumentDB クラスターを作成します。 Amazon DocumentDB CDC インフラストラクチャを使用する場合は、変更ストリームを発行するように Amazon DocumentDB クラスターを設定してください。

  2. Amazon DocumentDB クラスターTLSで を有効にします。

  3. 取り込みで使用するプライベートアドレス空間VPCCIDRの OpenSearch を設定します。

  4. を使用して Amazon DocumentDB クラスターで認証を設定します AWS Secrets Manager。Amazon DocumentDB のパスワードの自動ローテーション」の手順に従って、シークレットのローテーションを有効にします。詳細については、Amazon DocumentDB でのロールベースのアクセス制御とセキュリティを使用したデータベースアクセス」を参照してください。

  5. 変更ストリームを使用して Amazon DocumentDB コレクションのデータ変更をサブスクライブする場合は、 change_stream_log_retention_durationパラメータを使用して保持期間を最大 7 日間に延長することで、データ損失を回避します。変更ストリームイベントは、イベントが記録されてからデフォルトで 3 時間保存されます。これは、大規模なコレクションでは十分な時間ではありません。変更ストリームの保持期間を変更するには、「変更ストリームログの保持期間の変更」を参照してください。

  6. OpenSearch サービスドメインまたは OpenSearch サーバーレスコレクションを作成します。詳細については、 OpenSearch 「サービスドメインの作成」および「コレクションの作成」を参照してください。

  7. リソースベースのポリシーをドメインにアタッチするか、データアクセスポリシーをコレクションにアタッチします。これらのアクセスポリシーにより、Ingestion OpenSearch は Amazon DocumentDB クラスターからドメインまたはコレクションにデータを書き込むことができます。

    次のサンプルドメインアクセスポリシーでは、次のステップで作成するパイプラインロールがドメインにデータを書き込むことを許可します。必ず独自の resourceで を更新してくださいARN。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{pipeline-account-id}:role/pipeline-role" }, "Action": [ "es:DescribeDomain", "es:ESHttp*" ], "Resource": [ "arn:aws:es:{region}:{account-id}:domain/domain-name" ] } ] }

    コレクションまたはドメインへの書き込みデータにアクセスするための正しいアクセス許可を持つ IAMロールを作成するには、「ドメインに必要なアクセス許可」および「コレクションに必要なアクセス許可」を参照してください。

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

Amazon DocumentDB パイプラインの前提条件を設定したら、パイプライン設定で使用するパイプラインロールを設定し、ロールに次の Amazon DocumentDB アクセス許可を追加します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allowS3ListObjectAccess", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::{s3_bucket}" ], "Condition": { "StringLike": { "s3:prefix": "{s3_prefix}/*" } } }, { "Sid": "allowReadAndWriteToS3ForExportStream", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::{s3_bucket}/{s3_prefix}/*" ] }, { "Sid": "SecretsManagerReadAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": ["arn:aws:secretsmanager:{region}:{account-id}:secret:secret-name"] }, { "Effect": "Allow", "Action": [ "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DetachNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": [ "arn:aws:ec2:*:{account-id}:network-interface/*", "arn:aws:ec2:*:{account-id}:subnet/*", "arn:aws:ec2:*:{account-id}:security-group/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:Describe*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "aws:RequestTag/OSISManaged": "true" } } } ] }

パイプラインはこれらのEC2アクセス許可を使用して OpenSearch でネットワークインターフェイスを作成および削除するため、取り込みパイプラインの作成に使用するIAMロールに対して上記の Amazon アクセス許可を提供する必要がありますVPC。パイプラインは、このネットワークインターフェイスを介してのみ Amazon DocumentDB クラスターにアクセスできます。

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

その後、Amazon DocumentDB OpenSearch をソースとして指定する Ingestion パイプラインを次のように設定できます。インデックス名を入力するために、getMetadata関数はメタデータキーdocumentdb_collectionとして を使用することに注意してください。getMetadata メソッドを使用せずに別のインデックス名を使用する場合は、設定 を使用できますindex: "my_index_name"

version: "2" documentdb-pipeline: source: documentdb: acknowledgments: true host: "https://docdb-cluster-id.us-east-1.docdb.amazonaws.com" port: 27017 authentication: username: ${aws_secrets:secret:username} password: ${aws_secrets:secret:password} aws: sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" s3_bucket: "bucket-name" s3_region: "bucket-region" s3_prefix: "path" #optional path for storing the temporary data collections: - collection: "dbname.collection" export: true stream: true sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com"] index: "${getMetadata(\"documentdb_collection\")}" index_type: custom document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external" extension: aws: secrets: secret: secret_id: "my-docdb-secret" region: "us-east-1" sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" refresh_interval: PT1H

事前設定された Amazon DocumentDB ブループリントを使用して、このパイプラインを作成できます。詳細については、「ブループリントを使用したパイプラインの作成」を参照してください。

を使用してパイプライン AWS Management Console を作成する場合は、Amazon DocumentDB をソースとして使用するVPCには、パイプラインを にアタッチする必要もあります。これを行うには、ネットワーク設定セクションを検索し、「アタッチ先VPC」チェックボックスをオンにして、提供されているデフォルトオプションのいずれかCIDRから を選択するか、独自のものを選択します。RFC 1918 年ベストプラクティス で定義されているように、プライベートアドレス空間CIDRから任意の を使用できます。

カスタム を指定するにはCIDR、ドロップダウンメニューからその他を選択します。Ingestion と Amazon DocumentDB OpenSearch 間の IP アドレスの衝突を回避するには、Amazon DocumentDB VPCCIDRが Ingestion CIDRの OpenSearch と異なることを確認します。

詳細については、「パイプラインのVPCアクセスの設定」を参照してください。

データ整合性

パイプラインは、Amazon DocumentDB クラスターから変更を継続的にポーリングまたは受信し、インデックス内の対応するドキュメントを更新することで、データの整合性を確保します OpenSearch。

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

OpenSearch Serverless 検索コレクションに取り込む場合は、パイプラインでドキュメント ID を生成できます。 OpenSearch Serverless 時系列コレクションに取り込む場合は、パイプラインがドキュメント ID を生成しないため、パイプラインシンク設定document_id: "${getMetadata(\"primary_key\")}"で を省略する必要があることに注意してください。

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

データ型のマッピング

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

データ型 OpenSearch Amazon DocumentDB
整数

OpenSearch は、Amazon DocumentDB 整数値を OpenSearch整数に自動的にマッピングします。

OpenSearch は、最初に送信されたドキュメントに基づいて フィールドを動的にマッピングします。Amazon DocumentDB で同じ属性のデータ型が混在している場合、自動マッピングが失敗する可能性があります。

例えば、最初のドキュメントに長い属性があり、後のドキュメントに整数と同じ属性がある場合、 は 2 番目のドキュメントの取り込みに OpenSearch 失敗します。このような場合は、次のような最も柔軟な番号タイプを選択する明示的なマッピングテンプレートを提供する必要があります。

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

Amazon DocumentDB は整数 をサポートしています。

Long

OpenSearch は、Amazon DocumentDB の長い値を長い値 OpenSearchに自動的にマッピングします。

OpenSearch は、最初に送信されたドキュメントに基づいて フィールドを動的にマッピングします。Amazon DocumentDB で同じ属性のデータ型が混在している場合、自動マッピングが失敗する可能性があります。

例えば、最初のドキュメントに長い属性があり、後のドキュメントに整数と同じ属性がある場合、 は 2 番目のドキュメントの取り込みに OpenSearch 失敗します。このような場合は、次のような最も柔軟な番号タイプを選択する明示的なマッピングテンプレートを提供する必要があります。

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

Amazon DocumentDB は longs をサポートしています。

文字列

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

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

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

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

ダブル

OpenSearch は、Amazon DocumentDB の double 値を double に自動的に OpenSearchマッピングします。

OpenSearch は、最初に送信されたドキュメントに基づいて フィールドを動的にマッピングします。Amazon DocumentDB で同じ属性のデータ型が混在している場合、自動マッピングが失敗する可能性があります。

例えば、最初のドキュメントに長い属性があり、後のドキュメントに整数と同じ属性がある場合、 は 2 番目のドキュメントの取り込みに OpenSearch 失敗します。このような場合は、次のような最も柔軟な番号タイプを選択する明示的なマッピングテンプレートを提供する必要があります。

{ "template": { "mappings": { "properties": { "MixedNumberField": { "type": "float" } } } } }
Amazon DocumentDB は、 を 2 倍サポートしています
日付

デフォルトでは、日付は の整数にマッピングされます OpenSearch。日付を日付にマッピングするカスタムマッピングテンプレートを定義できます OpenSearch 。

{ "template": { "mappings": { "properties": { "myDateField": { "type": "date", "format": "epoch_second" } } } } }
Amazon DocumentDB は日付 をサポートしています。
タイムスタンプ

デフォルトでは、タイムスタンプは の整数にマッピングされます OpenSearch。日付を日付に OpenSearchマッピングするカスタムマッピングテンプレートを定義できます。

{ "template": { "mappings": { "properties": { "myTimestampField": { "type": "date", "format": "epoch_second" } } } } }
Amazon DocumentDB はタイムスタンプ をサポートしています。
ブール値

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

Amazon DocumentDB はブール型の属性 をサポートしています。

10 進数

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

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

{ "template": { "mappings": { "properties": { "myDecimalField": { "type": "double" } } } } }

このカスタムマッピングを使用すると、フィールドをクエリして、倍精度で集計できます。元の値は、ドキュメントの _sourceプロパティで完全な精度を保持します OpenSearch。このマッピングがない場合、 はデフォルトでテキスト OpenSearch を使用します。

Amazon DocumentDB は小数 をサポートしています。
正規表現 正規表現タイプは、ネストされたフィールドを作成します。これらには、 <myFieldName>.patternと が含まれます<myFieldName>.options

Amazon DocumentDB は正規表現 をサポートしています。

バイナリデータ

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

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

{ "template": { "mappings": { "properties": { "imageData": { "type": "binary" } } } } }
Amazon DocumentDB はバイナリデータフィールド をサポートしています。
ObjectId タイプのフィールドは OpenSearch テキストフィールドに objectId マッピングされます。値は の文字列表現になりますobjectId。 Amazon DocumentDB は をサポートしていますobjectIds
Null

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

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

Amazon DocumentDB は null 型フィールド をサポートしています。
未定義

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

同じフィールド名が未定義の型に使用され、後で文字列などの異なる型に変更された場合、 は最初の未定義の値の動的マッピング OpenSearch を作成します。後続の値はAmazon DocumentDB の未定義の値のままにすることができます。

Amazon DocumentDB は、未定義の型フィールド をサポートしています。
MinKey

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

minKey タイプに同じフィールド名が使用され、後で文字列などの異なるタイプに変更されると、 は最初の非minKey 値に対して動的マッピング OpenSearch を作成します。後続の値は、Amazon DocumentDB minKey 値のままにすることができます。

Amazon DocumentDB はminKey 、タイプフィールド をサポートしています。
MaxKey

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

maxKey タイプに同じフィールド名が使用され、後で文字列などの異なるタイプに変更された場合、 は最初の非maxKey 値に対して動的マッピング OpenSearch を作成します。後続の値は Amazon DocumentDB maxKey 値のままにすることができます。

Amazon DocumentDB はmaxKey タイプフィールド をサポートしています。

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

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

制限事項

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

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

  • 現在、Amazon DocumentDB との OpenSearch Ingestion 統合は、クロスアカウント取り込みをサポートしていません。Amazon DocumentDB クラスターと Ingestion OpenSearch パイプラインは同じ にある必要があります AWS アカウント。

  • 取り込みパイプラインは、ソースとして OpenSearch 1 つの Amazon DocumentDB クラスターのみをサポートします。

  • Ingestion OpenSearch と Amazon DocumentDB の統合は、Amazon DocumentDB インスタンスベースのクラスターを特にサポートしています。Amazon DocumentDB エラスティッククラスターはサポートされていません。

  • OpenSearch Ingestion 統合は、Amazon DocumentDB クラスターの認証メカニズム AWS Secrets Manager としてのみ をサポートします。

  • 既存のパイプライン設定を更新して、別のデータベースまたはコレクションからデータを取り込むことはできません。代わりに、新しいパイプラインを作成する必要があります。