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.9 \ --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 と名前を付けます。

アクセス許可

{ "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 ユーザーまたは IAM ロール — を継承するアクセス許可を AWS CLI 先ほど—設定するために使用したアクセス許可を付与します。AmazonESSnapshotRole 次のポリシーを作成し、アイデンティティにアタッチします。

アクセス許可

{ "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 (セキュリティ)]、[Roles (ロール)]、[manage_snapshots] の順に選択します。[マッピングされたユーザー]、[マッピングの管理] の順に選択します。次に、IAM ユーザーまたは IAM ロールの ARN を該当するフィールドに指定します。ユーザー ARNs は、[ユーザー] セクションに移動します。ロール ARNs は、[External identities (外部 ID)] セクションに移動します。この手順では、きめ細かなアクセスコントロールを使用して、スナップショットを使用するためのアイデンティティのアクセス許可を付与します。

スナップショットの復元

この時点で、Amazon ES ドメインにアクセスする方法は 2 つあります。マスターユーザー認証情報を使用した 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 ダッシュボードを作成したりすることができます。