リモート再インデックスを使用した Amazon OpenSearch Service インデックスの移行 - Amazon OpenSearch サービス

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

リモート再インデックスを使用した Amazon OpenSearch Service インデックスの移行

リモート再インデックスを使用すると、ある Amazon OpenSearch Service ドメインから別のドメインにインデックスをコピーできます。インデックスは、任意の OpenSearch サービスドメイン、セルフマネージドクラスター OpenSearch 、Elasticsearch クラスターから移行できます。

リモートドメインとインデックスは、データのソース (データのコピー元) のドメインとインデックスを意味します。ローカルドメインとインデックスは、データのターゲット (データのコピー先) のドメインとインデックスを意味します。

リモート再インデックス作成には、ローカルドメインで OpenSearch 1.0 以降、または Elasticsearch 6.7 以降が必要です。リモートドメインは、ローカルドメインと同じまたはそれより前のメジャーバージョンである必要があります。Elasticsearch のバージョンは バージョンよりも OpenSearch低いと見なされ、Elasticsearch ドメインから OpenSearch ドメインにデータを再インデックスできます。同じメジャーバージョン内では、リモートドメインは任意のマイナーバージョンにすることができます。例えば、Elasticsearch 7.10.x から 7.9 へのリモートインデックス再作成はサポートされていますが、Elasticsearch 7.10.x OpenSearch への 1.0 はサポートされていません。

注記

このドキュメントでは、Amazon OpenSearch Service ドメイン間でデータを再インデックスする方法について説明します。詳細な手順やサポートされているオプションなど、 reindexオペレーションの完全なドキュメントについては、 ドキュメントの「インデックスの再作成 OpenSearch 」ドキュメントを参照してください。

前提条件

リモート再インデックスには、次の要件があります。

  • リモートドメインは、ローカルドメインからアクセス可能である必要があります。VPC 内に存在するリモートドメインでは、ローカルドメインに VPC へのアクセスが必要です。このプロセスはネットワーク構成によって異なりますが、VPN またはマネージドネットワークへの接続、もしくは、ネイティブの VPC エンドポイント接続の使用が必要となる場合がほとんどです。詳細については、「VPC 内で Amazon OpenSearch Service ドメインを起動する」を参照してください。

  • リクエストは、他の REST リクエストと同様にリモートドメインによって承認される必要があります。リモートドメインできめ細かなアクセスコントロールが有効になっている場合は、リモートドメインで再インデックスを実行し、リモートドメインでインデックスを読み取るための許可が必要です。セキュリティに関するその他の考慮事項については、「Amazon サービスのきめ細かいアクセス制御 OpenSearch 」を参照してください。

  • 再インデックスプロセスを開始する前に、ローカルドメインに目的の設定でインデックスを作成することをお勧めします。

  • ドメインでデータノードに T2 または T3 インスタンスタイプが使用されている場合、リモート再インデックスを使用することはできません。

OpenSearch サービスインターネットドメイン間でデータを再インデックスする

最も基本的なシナリオは、リモートインデックスがパブリックにアクセス可能なエンドポイントを持つローカルドメイン AWS リージョン と同じ にあり、IAM 認証情報に署名していることです。

リモートドメインから、再インデックス元のリモートインデックスと、再インデックス先のローカルインデックスを指定します。

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443" }, "index": "remote_index" }, "dest": { "index": "local_index" } }

検証チェックを行うには、リモートドメインのエンドポイントの末尾に 443 を追加する必要があります。

インデックスがローカルドメインにコピーされたことを確認するには、次のリクエストをローカルドメインに送信します。

GET local_index/_search

リモートインデックスがローカルドメインとは異なるリージョンにある場合は、次のサンプルリクエストのように、リージョン名を渡します。

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "region": "eu-west-1" }, "index": "remote_index" }, "dest": { "index": "local_index" } }

AWS GovCloud (US) や中国リージョンのように分離されたリージョンの場合、IAM ユーザーがそれらのリージョンで認識されないため、エンドポイントにアクセスできない場合があります。

リモートドメインが基本認証 で保護されている場合は、ユーザー名とパスワードを指定します。

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "username": "username", "password": "password" }, "index": "remote_index" }, "dest": { "index": "local_index" } }

リモートが VPC 内にあるときに OpenSearch サービスドメイン間でデータを再インデックスする

すべての OpenSearch サービスドメインは、独自の内部仮想プライベートクラウド (VPC) インフラストラクチャで構成されています。既存の OpenSearch サービス VPC に新しいドメインを作成すると、VPC 内のデータノードごとに Elastic Network Interface が作成されます。

リモート再インデックスオペレーションはリモート OpenSearch サービスドメインから実行されるため、独自のプライベート VPC 内で実行されるため、ローカルドメインの VPC にアクセスする方法が必要です。これを行うには、組み込みの VPC エンドポイント接続機能を使用して 経由で接続を確立するか AWS PrivateLink、プロキシを設定します。

ローカルドメインが OpenSearch バージョン 1.0 以降を使用している場合は、コンソールまたは AWS CLI を使用して AWS PrivateLink 接続を作成できます。 AWS PrivateLink 接続により、ローカル VPC 内のリソースは、同じ 内のリモート VPC 内のリソースにプライベートに接続できます AWS リージョン。

コンソールでリモートの再インデックスを使用すれば、VPC エンドポイント接続を共有している 2 つのドメイン間でインデックスをコピーできます。

  1. で Amazon OpenSearch Service コンソールに移動しますhttps://console.aws.amazon.com/aos/

  2. 左側のナビゲーションペインで [Domains] (ドメイン) を選択します。

  3. ローカルドメイン (データをコピーするドメイン) を選択します。選択すると、ドメインの詳細ページが開きます。一般情報の下にある [接続] タブを選択し、[リクエスト] を選択します。

  4. [接続のリクエスト] ページで、接続モードに [VPC エンドポイント接続] を選択し、その他の関連情報を入力します。これらの詳細には、データをコピーするドメインであるリモートドメインが含まれます。次に、[Request] (リクエスト) を選択します。

  5. リモートドメインの詳細ページに移動し、[接続] タブを選択してから [インバウンド接続] テーブルを見つけます。先ほど接続を作成したドメイン (ローカルドメイン) の名前の横にあるチェックボックスをオンにします。[承認] を選択します。

  6. ローカルドメインに戻り、[Connections] (接続) タブを選択してから [Outbound connections] (アウトバウンド接続) テーブルを見つけます。2 つのドメイン間の接続がアクティブになると、テーブルの [Endpoint] (エンドポイント) 列でエンドポイントが利用可能になります。エンドポイントをコピーします。

  7. ローカルドメインのダッシュボードを開き、左側のナビゲーションにある [Dev Tools] (開発ツール) を選択します。リモートのドメインインデックスがローカルのドメインにまだ存在していないことを確認するには、次の GET リクエストを実行します。を独自のインデックス名remote-domain-index-nameに置き換えます。

    GET remote-domain-index-name/_search { "query":{ "match_all":{} } }

    出力に、インデックスが見つからなかったことを示すエラーが表示されます。

  8. GET リクエストの下で、以下のような POST リクエストを作成し、リモートホストとしてエンドポイントを使用します。

    POST _reindex { "source":{ "remote":{ "host":"connection-endpoint", "username":"username", "password":"password" }, "index":"remote-domain-index-name" }, "dest":{ "index":"local-domain-index-name" } }

    このリクエストを実行します。

  9. GET リクエストをもう 1 度実行します。そうすると、出力にローカルインデックスが存在すると表示されます。このインデックスをクエリして、 が OpenSearchリモートインデックスからすべてのデータをコピーしたことを確認できます。

API でリモートの再インデックスを使用すれば、VPC エンドポイント接続を共有している 2 つのドメイン間でインデックスをコピーできます。

  1. CreateOutboundConnection API オペレーションを使用して、ローカルドメインからリモートドメインへの新しい接続をリクエストします。

    POST https://es.region.amazonaws.com/2021-01-01/opensearch/cc/outboundConnection { "ConnectionAlias": "remote-reindex-example", "ConnectionMode": "VPC_ENDPOINT", "LocalDomainInfo": { "AWSDomainInformation": { "DomainName": "local-domain-name", "OwnerId": "aws-account-id", "Region": "region" } }, "RemoteDomainInfo": { "AWSDomainInformation": { "DomainName": "remote-domain-name", "OwnerId": "aws-account-id", "Region": "region" } } }

    ConnectionId が応答で返されます。この ID は次のステップで使用するので保存しておきます。

  2. 接続 ID で AcceptInboundConnection API オペレーションを使用して、ローカルドメインからのリクエストを承認します。

    PUT https://es.region.amazonaws.com/2021-01-01/opensearch/cc/inboundConnection/ConnectionId/accept
  3. DescribeOutboundConnections API オペレーションを使用して、リモートドメインのエンドポイントを取得します。

    { "Connections": [ { "ConnectionAlias": "remote-reindex-example", "ConnectionId": "connection-id", "ConnectionMode": "VPC_ENDPOINT", "ConnectionProperties": { "Endpoint": "connection-endpoint" }, ... } ] }

    connection-endpoint はステップ 5 で使用するので保存しておきます。

  4. リモートのドメインインデックスがローカルのドメインにまだ存在していないことを確認するには、次の GET リクエストを実行します。を独自のインデックス名remote-domain-index-nameに置き換えます。

    GET local-domain-endpoint/remote-domain-index-name/_search { "query":{ "match_all":{} } }

    出力に、インデックスが見つからなかったことを示すエラーが表示されます。

  5. POST リクエストを作成し、次のようにエンドポイントをリモートホストとして使用します。

    POST local-domain-endpoint/_reindex { "source":{ "remote":{ "host":"connection-endpoint", "username":"username", "password":"password" }, "index":"remote-domain-index-name" }, "dest":{ "index":"local-domain-index-name" } }

    このリクエストを実行します。

  6. GET リクエストをもう 1 度実行します。そうすると、出力にローカルインデックスが存在すると表示されます。このインデックスをクエリして、 が OpenSearchリモートインデックスからすべてのデータをコピーしたことを確認できます。

リモートドメインが VPC 内でホストされ、VPC エンドポイントの接続機能の使用を希望しない場合は、パブリックにアクセス可能なエンドポイントを使ってプロキシを設定します。この場合、 OpenSearch サービスには VPC にトラフィックを送信する機能がないため、パブリックエンドポイントが必要です。

VPC モードでドメインを実行する場合、1 つまたは複数のエンドポイントが VPC に配置されます。ただし、これらのエンドポイントは VPC 内のドメインに入るトラフィックのみを対象としており、VPC 自体へのトラフィックは許可されません。

リモートの再インデックスコマンドは、リモートドメインから実行されるため、発信元のトラフィックはそれらのエンドポイントを使ってリモートドメインにアクセスすることはできません。このユースケースでプロキシが必要となるのはそのためです。プロキシドメインには、公開認証機関 (CA) によって署名された証明書が必要です。自己署名証明書またはプライベート CA 署名証明書はサポートされていません。

OpenSearch サービス以外のドメイン間でデータを再インデックスする

セルフマネージド EC2 インスタンスのように、リモートインデックスが OpenSearch Service の外部でホストされている場合は、 externalパラメータを に設定しますtrue

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "username": "username", "password": "password", "external": true }, "index": "remote_index" }, "dest": { "index": "local_index" } }

この場合、ユーザー名とパスワードを使用した基本認証のみがサポートされます。リモートドメインには、パブリックにアクセス可能なエンドポイント (ローカル OpenSearch サービスドメインと同じ VPC にある場合でも) と、パブリック CA によって署名された証明書が必要です。自己署名証明書またはプライベート CA 署名証明書はサポートされていません。

大規模なデータセットの再インデックスを行う

リモート再インデックスは、次のデフォルト値を使用してリモートドメインにスクロールリクエストを送信します。

  • 5 分の検索コンテキスト

  • 30 秒のソケットタイムアウト

  • 1,000 のバッチサイズ

データに合わせてこれらのパラメータを調整することをお勧めします。大きなドキュメントの場合は、バッチサイズを小さくするか、タイムアウトを長くするかを検討してください。詳細については、「スクロール検索」を参照してください。

POST _reindex?pretty=true&scroll=10h&wait_for_completion=false { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "socket_timeout": "60m" }, "size": 100, "index": "remote_index" }, "dest": { "index": "local_index" } }

パフォーマンスを向上させるために、ローカルインデックスに次の設定を追加することもお勧めします。

PUT local_index { "settings": { "refresh_interval": -1, "number_of_replicas": 0 } }

再インデックスプロセスが完了したら、目的のレプリカの数を設定し、更新間隔の設定を削除できます。

クエリを介して選択したドキュメントのサブセットのみの再インデックスを行うには、次のリクエストをローカルドメインに送信します。

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443" }, "index": "remote_index", "query": { "match": { "field_name": "text" } } }, "dest": { "index": "local_index" } }

リモート再インデックスはスライスをサポートしていないため、同じリクエストに対して複数のスクロールオペレーションを並行して実行することはできません。

リモート再インデックス設定

標準のインデックス再作成オプションに加えて、 OpenSearch Service は次のオプションをサポートしています。

オプション 有効な値 説明 必須
外部 ブール値 リモートドメインが OpenSearch サービスドメインでない場合、または 2 つの VPC ドメイン間でインデックスを再作成する場合は、 を として指定しますtrue いいえ
region 文字列 リモートドメインが別のリージョンにある場合は、リージョン名を指定します。 いいえ