Amazon Elasticsearch Service への移行 - Amazon Elasticsearch Service

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

Amazon Elasticsearch Service への移行

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

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

  2. Amazon ES ドメインを作成する。

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

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

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

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

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

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

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

  1. すべてのノードで elasticsearch.ymlpath.repo 設定を追加して、各ノードを再起動します。

    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://migration-bucket --region us-west-2 aws s3 sync . s3://migration-bucket --sse AES256

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

ドメインの作成

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

aws es create-elasticsearch-domain \ --domain-name migration-domain \ --elasticsearch-version 7.7 \ --elasticsearch-cluster-config InstanceType=c5.large.elasticsearch,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 などのより高度なセキュリティ設定が必要な場合は、Amazon ES コンソールを使用してください。

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

重要

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

アクセス許可の付与

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

Permissions

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

信頼関係

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

次に、個人のIAMユーザーまたは役割を与える—設定に使用したもの AWS CLI もっと早く—権限を AmazonESSnapshotRole。 次のポリシーを作成し、 添付する 皆さんの身元情報です。

Permissions

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

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

Kibana で、[Security (セキュリティ)]、[Role Mappings (ロールのマッピング)]、[Add (追加)] の順に選択します。[Role (ロール)] で、[manage_snapshots] を選択します。次に、IAM ユーザーまたは IAM ロールの ARN を該当するフィールドに指定します。ユーザーの ARN は、[Users (ユーザー)] セクションに入力します。ロールの ARN は、[Backend roles (バックエンドロール)] セクションに入力します。この手順では、きめ細かなアクセスコントロールを使用して、スナップショットを使用するためのアイデンティティのアクセス許可を付与します。

スナップショットの復元

この時点で、2つの方法で Amazon ES ドメイン: マスターユーザー資格情報を使用した HTTP 基本認証、または IAM 資格情報を使用した AWS 認証。スナップショットはマスターユーザーの概念がない Amazon S3 を使用するため、IAM 認証情報を使用してスナップショットのリポジトリを Amazon ES ドメインに登録する必要があります。

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

スナップショットをリストアするには

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

    PUT _snapshot/migration-repository { "type": "s3", "settings": { "bucket": "migration-bucket", "region": "us-west-2", "role_arn": "arn:aws:iam::123456789012:role/AmazonESSnapshotRole" } }
  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

これで、移行は完了です。続いて、新しい Amazon ES エンドポイントを使用するようにクライアントを設定したり、ワークロードに合わせてドメインのサイズを変更したり、インデックスのシャード数を確認したり、IAM マスターユーザーに切り替えたり、Kibana ダッシュボードを作成したりすることができます。