Amazon OpenSearch Service への移行 - Amazon OpenSearch Service (Amazon Elasticsearch Service の後継サービス)

Amazon OpenSearch Service への移行

インデックススナップショットは、セルフマネージド OpenSearch クラスターから Amazon OpenSearch Service に移行する一般的な方法です。そのプロセスは、大きく分けて以下のステップで構成されています。

  1. 既存のクラスターのスナップショットを作成し、そのスナップショットを Amazon S3 バケットにアップロードする。

  2. OpenSearch Service ドメインを作成する。

  3. バケットにアクセスするための OpenSearch Service の許可を提供し、スナップショットを使用するためのユーザーアカウントの許可を提供する。

  4. OpenSearch Service ドメインでスナップショットを復元する。

このチュートリアルでは、より詳細な手順と代替のオプション (ある場合) について説明します。

スナップショットの作成とアップロード

repository-s3 プラグインを使用すると、スナップショットを S3 に直接作成できます。ただし、このプラグインをすべてのノードにインストールし、opensearch.yml を設定し、各ノードを再起動し、AWS 認証情報を追加した上で、スナップショットを作成する必要があります。このプラグインは、継続使用や大規模なクラスターの移行の場合に役立ちます。

小規模なクラスターの場合は、1 回ごとに共有ファイルシステムのスナップショットを作成して、AWS CLI を使用して S3 にアップロードする方法があります。すでにスナップショットを作成している場合は、手順 4 に進んでください。

スナップショットを作成して Amazon S3 にアップロードするには

  1. すべてのノードで path.repoopensearch.yml 設定を追加して、各ノードを再起動します。

    path.repo: ["/my/shared/directory/snapshots"]
  2. スナップショットのリポジトリを登録します。

    PUT _snapshot/migration-repository { "type": "fs", "settings": { "location": "/my/shared/directory/snapshots" } }
  3. スナップショットを作成します。

    PUT _snapshot/migration-repository/migration-snapshot { "indices": "migration-index1,migration-index2,other-indices-*", "include_global_state": false }
  4. AWS CLI をインストールし、aws configure を実行して認証情報を追加します。

  5. スナップショットのディレクトリに移動します。次のコマンドを実行して新しい S3 バケットを作成し、スナップショットのディレクトリの中身をそのバケットにアップロードします。

    aws s3 mb s3://bucket-name --region us-west-2 aws s3 sync . s3://bucket-name --sse AES256

    スナップショットのサイズとインターネット接続の速度によっては、この操作に時間がかかる場合があります。

ドメインの作成

コンソールはドメインを作成する最も簡単な方法です。この例では、すでにターミナルを開いており、AWS CLI がインストールされています。次のコマンドを変更して、ニーズに合わせてドメインを作成してください。

aws opensearchservice create-domain \ --domain-name migration-domain \ --engine-version OpenSearch_1.0 \ --cluster-config InstanceType=c5.large.search,InstanceCount=2 \ --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 \ --node-to-node-encryption-options Enabled=true \ --encryption-at-rest-options Enabled=true \ --domain-endpoint-options EnforceHTTPS=true,TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07 \ --advanced-security-options Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions='{MasterUserName=master-user,MasterUserPassword=master-user-password}' \ --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["*"]},"Action":["es:ESHttp*"],"Resource":"arn:aws:es:us-west-2:123456789012:domain/migration-domain/*"}]}' \ --region us-west-2

このコマンドでは、それぞれ 100 GiB のストレージを持つ 2 つのデータノードがあるインターネットにアクセス可能なドメインが作成されます。また、HTTP Basic 認証とすべての暗号化の設定により、きめ細かなアクセスコントロールが可能になります。VPC などのアドバンストセキュリティ設定が必要な場合は、OpenSearch Service コンソールを使用してください。

このコマンドを発行する前に、ドメイン名、マスターユーザーの認証情報、アカウント番号を変更します。S3 バケットに使用したものと同じリージョンと、スナップショットと互換性のある OpenSearch/Elasticsearch のバージョンを指定します。

重要

スナップショットには上位互換性のみがあり、その対象は 1 つのメジャーバージョンのみです。たとえば、2.x クラスターのスナップショットを 1.x クラスターや 6.x クラスターに復元することはできません。復元できるのは、2.x クラスターまたは 5.x クラスターのみです。また、マイナーバージョンも同様です。セルフマネージド 5.3.3 クラスターのスナップショットを 5.3.2 の OpenSearch Service ドメインに復元することはできません。OpenSearch または Elasticsearch は、スナップショットがサポートしている最新バージョンを選択することをお勧めします。互換性のあるバージョンのテーブルについては、「スナップショットを使用してデータを移行する」を参照してください。

S3 バケットへの許可を提供します。

AWS Identity and Access Management (IAM) コンソールで、以下の許可と信頼関係を持つロールを作成します。ロールの作成時に、AWS サービスとして S3 を選択します。このロールには、分かりやすいように OpenSearchSnapshotRole と名前を付けます。

許可

{ "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-name" ] }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-name/*" ] } ] }

信頼関係

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

次に、より早く AWS CLI を設定するために何を使用したかにかかわらず、個人 IAM ユーザーまたは IAM ロールに OpenSearchSnapshotRole を引き受けるための許可を提供します。以下のポリシーを作成して、アイデンティティにアタッチします。

許可

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/OpenSearchSnapshotRole" } ] }

OpenSearch Dashboards にスナップショットロールをマッピングします (きめ細かなアクセスコントロールを使用している場合)

きめ細かなアクセスコントロールを有効にした場合、HTTP 基本認証を他のすべての目的で使用する場合でも、manage_snapshots ロールを IAM ユーザーまたはロールにマッピングして、スナップショットを操作できるようにする必要があります。

スナップショットを使用するためのアイデンティティの許可を提供するには

  1. OpenSearch Service ドメインの作成時に指定したマスターユーザーの認証情報を使用して Dashboards にログインします。Dashboards URL は、OpenSearch Service コンソールに表示されます。https://domain-endpoint/_dashboards/ の形式です。

  2. メインメニューから [セキュリティ]、[ロール] を選択し、[manage_snapshots] ロールを選択します。

  3. [マッピングされたユーザー]、[マッピングの管理] を選択します。

  4. IAM ユーザーまたは IAM ロールのドメイン ARN を該当するフィールドに追加します。ARN は次のいずれかの形式となります。

    arn:aws:iam::123456789123:user/user-name
    arn:aws:iam::123456789123:role/role-name
  5. [マップ] を選択し、ユーザーまたはロールが [マッピングされたユーザー] の下に表示されていることを確認します。

スナップショットを復元する

ここでは、OpenSearch Service ドメインにアクセスする方法が 2 つあります。1 つはマスターユーザーの認証情報を使用した HTTP Basic 認証で、もう 1 つは IAM 認証情報を使用した AWS 認証です。スナップショットはマスターユーザーの概念がない Amazon S3 を使用するため、IAM 認証情報を使用してスナップショットのリポジトリを OpenSearch Service ドメインに登録する必要があります。

ほとんどのプログラミング言語にはリクエストの署名に役立つライブラリがありますが、Postman などのツールを使用して IAM 認証情報を [認可] セクションに入力するのが簡単な方法です。

スナップショットを復元するには

  1. リクエストにどのような方法で署名するかにかかわらず、まずリポジトリを登録します。

    PUT _snapshot/migration-repository { "type": "s3", "settings": { "bucket": "bucket-name", "region": "us-west-2", "role_arn": "arn:aws:iam::123456789012:role/OpenSearchSnapshotRole" } }
  2. 次に、リポジトリ内のスナップショットを一覧表示し、復元するスナップショットを見つけます。この時点で、Postman を続けて使用するか、curl などのツールに切り替えることができます。

    短縮構文

    GET _snapshot/migration-repository/_all

    curl

    curl -XGET -u 'master-user:master-user-password' https://domain-endpoint/_snapshot/migration-repository/_all
  3. スナップショットを復元します。

    短縮構文

    POST _snapshot/migration-repository/migration-snapshot/_restore { "indices": "migration-index1,migration-index2,other-indices-*", "include_global_state": false }

    curl

    curl -XPOST -u 'master-user:master-user-password' https://domain-endpoint/_snapshot/migration-repository/migration-snapshot/_restore \ -H 'Content-Type: application/json' \ -d '{"indices":"migration-index1,migration-index2,other-indices-*","include_global_state":false}'
  4. 最後に、インデックスが正常に復元されていることを検証します。

    短縮構文

    GET _cat/indices?v

    curl

    curl -XGET -u 'master-user:master-user-password' https://domain-endpoint/_cat/indices?v

これで、移行は完了です。続いて、新しい OpenSearch Service エンドポイントを使用するようにクライアントを設定したり、ワークロードに合わせてドメインのサイズを変更したり、インデックスのシャード数を確認したり、IAM マスターユーザーに切り替えたり、OpenSearch Dashboards での可視化の構築を開始したりすることができます。