オンプレミスから Elastic on AWS への Elastic ワークロード移行を自動化するための10のステップ


皆様こんにちは！
Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリストの鈴木章太郎です。
Elastic の Qiita の Organization もでき、個人のエントリとは別に、その中のエントリとしても、ブログを定期的に書いていきたいと思います。こちらの組織は、メインは弊社のソリューションアーキテクト4名、コンサルタント3名、ですが、僕も技術マーケッターとしてブログを書いていきますので、よろしくお願いします。

自己管理の Elastic ワークロードを Elasticon Amazon Web Services（AWS） に移行して、コスト、時間、スケールの効率を活用する準備はできていますか？AWS で開発したベストプラクティスとツールを活用して、迅速でスムーズな移行を保証します。セルフサービスの移行パスオプションを実行してから、移行を自動化するための簡単な「ハウツー」手順を実行してみましょう。

# オンプレミスデータセットを AWS 環境の Elastic に追加するためのパスの選択
オンプレミスデータセットを AWS 環境の Elastic に追加するための3つの主なオプションは、データの再取り込み、スナップショットと復元、およびクラスターからのインデックスの再作成です。

1.[データソース（アプリケーション、データベース、インフラストラクチャ）も AWS に移行する場合は、データをソースから Elastic に再取り込みできます。](http://elastic.co/cloud) Elastic は、人気のある AWS サービスとの統合を提供し、データの取り込みを合理化します。クリックするだけで、データをキャプチャ、保存、検索できます。

2.スナップショットと復元は、既存のクラスター内のデータを Elastic Cloud に移動する必要があり、既存のクラスターが Elastic Cloud よりも古い Elasticsearch バージョンを実行している場合に理想的です。

3.もう1つのオプションは、クラスターからのインデックスの再作成です。これは、データ量が少ない場合や、スナップショットと復元の使用に制約があり、既存のクラスターが Elastic Cloud よりも古い Elasticsearch バージョンを実行している場合に最適です。Reindex API の使用方法の詳細については、移行ガイドをご覧ください。

このブログでは、スナップショットと復元を使用して移行パスを自動化するための簡単な手順を紹介します。

スナップショットと復元を使用して移行を自動化する
スナップショットを使用してデータを移行し、Terraform（コードソフトウェアとしてのオープンソースインフラストラクチャ）を使用して復元することがいかに簡単であるかを見ていきましょう。まず、前提条件から始めましょう。次に、ハウツー手順について説明します。

# 前提条件
1. 移行ターゲットとなる Elastic Cloud が、現在の Elasticsearch クラスターと同じかそれ以上のバージョンを実行していることを確認します。バージョン互換性のより詳細な表は、[Elastic スナップショットおよび復元ガイド](https://www.elastic.co/guide/en/elasticsearch/reference/8.0/snapshot-restore.html#snapshot-restore-version-compatibility) にリストされています。
2. Elastic Cloud クラスターのインフラストラクチャ容量が、ユースケースのデータ量とコンピューティング要件に対応するのに十分であることを確認してください。
3. Elastic スナップショットと復元ガイドに記載されている制限、および [Elastic アップグレードガイド](https://www.elastic.co/guide/en/elastic-stack/8.0/upgrading-elastic-stack.html#prepare-to-upgrade-8x) のバージョン固有の重大な変更を確認して、Elastic Cloud へのデプロイメントの移行に影響を与える制約がないことを確認します。
4. インストールされている Terraform ソフトウェアの正しいバージョンを確認し、Terraform ボールト機能が有効になっていることも確認してください。
5. Elasticsearch API キー（var.apikey）や AWS アクセスキー（var.s3_client_access_key, var.s3_client_secret_key）などの必要な情報を収集します。
6. オンプレミスと Elastic on AWS VPC およびその他の AWS リソース権限の間のネットワーク接続（直接接続）を確認します。
7. 既存の Elasticsearch クラスターに Elasticsearch AWS CLI と Amazon Simple Storage Service（Amazon S3） プラグインがまだない場合は、次のコマンドを使用して Elasticsearch ホームディレクトリからインストールする必要があります。

```
> sudo bin/elasticsearch-plugin install repository-s3
``` 
8. 既存のElasticsearchクラスターのルートディレクトリから次のコマンドを使用して、Amazon S3アクセスキーをElasticsearchキーストアに追加します（プロンプトが表示されたら、以前のAmazon S3バケット作成プロセスから適切なキーを入力します）。

```
> bin/elasticsearch-keystore add s3.client.default.access_key
> bin/elasticsearch-keystore add s3.client.default.secret_key
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33599/ecdcdc65-41e0-f5c0-ab69-55e94412f0bd.png)

### 移行手順
1. Amazon S3 サービスを使用して、Elastic Cloud スナップショットリポジトリを作成して登録します。
2. ローカルスナップショットリポジトリを作成して設定し、Amazon S3 バケットをポイントします。
3. ローカルクラスターから新しいスナップショットを作成し、Amazon S3 バケットに保存します。
4. Elastic Cloud クラスターをプロビジョニングします。
5. [Elastic Agent](https://www.elastic.co/elastic-agent) に必要なAWSリソースをプロビジョニングします。
6. 摩擦のないログの取り込みに必要な Elastic サーバーレスフォワーダーをプロビジョニングします。
7. デプロイプロセスに必要な AWS サービスにアクセスするためのきめ細かい権限を持つ複数の AWS Identity and Access Management（IAM） インスタンスロールを作成します。
8. Elastic Cloud のすべてのインデックスを閉じます。
9. Elastic Cloud のスナップショットからローカルクラスターデータを復元します。
10. 最後に、Elastic Cloud ですべてのインデックスを開きます。

### 展開手順
以下は、必要なシークレットアクセスキーの収集など、前提条件のセクションで簡単に説明した詳細な手順です。すでにキーをお持ちの場合は、手順3にスキップできます。

1. Elasticsearch Service（ESS） API キーを生成します。
a. ブラウザを開き、https://cloud.elastic.co/login に移動します。
b. メールアドレスとパスワードでログインします。
c. Elasticsearch Service をクリックします。
d. [機能]>[APIキー]に移動し、[APIキーの生成]をクリックします。
e. APIキーの名前を選択します。
f. API キーを安全な場所に保存します。

2. AWS アクセスキーを作成します。
a. リスト、読み取り、書き込みのアクセス許可を許可する S3 バケットポリシーを作成します。
b. IAM ユーザーを作成し、上記で作成したポリシーを添付します。
c. IAM ユーザーのプログラムによるアクセスを確認してください。
d. AWSアクセスキーを安全な場所に保存します。

3. 次のコマンドを使用して、Terraform ElasticCloud 移行リポジトリのクローンを作成します。
```
git clone https://github.com/aws-ia/terraform-elastic-cloud
cdterraform-elastic-cloud
```
4. HashiCorp Vaultを使用している場合は、Vault環境変数を次のように設定できます。
a. export VAULT_ADDR = "Your Vault URL"
b. export VAULT_TOKEN = "Your VaultToken. Elasticsearch API キーを追加します（例としてパスに「ess」を使用しました）：
```
vault kv put secret/ess apikey="Your Elastic API Key"
```
AWS API キーを追加します（例としてパスに"aws"を使用しました）：
```
vault kv put secret/aws s3_client_access_key="Your AWS Access Key"     
s3_client_secret_key="Your AWS Secret Key"
```
5. キーを提供する必要があります—これは Terraform でさまざまな方法で実行できます。変数定義（.tfvars） を使用します。この新しく追加された機能は、Elasticsearch クラスターの Elastic Cloud への移行を自動化します。ファイルを以下に示します（HashiCorp Vault を使用している場合）。
以下の例のように、自己管理型 Elasticsearch の URL を割り当てるだけです。
```
var.local_elasticsearch_url (e.g., http://127.0.0.1:9200).
```
たとえば、以下に示すように、同じ testing.tfvars に var.local_elasticsearch_url を追加できます（HashiCorp Vaultを使用している場合）。
```
name = "Elasticsearch Cluster"
local_elasticsearch_url = ""
vault_address = "Your Local Elastic Cluster URL"
vault_ess_path = "secret/ess"
vault_aws_path = "secret/aws"
apikey = "hashicorp/vault"
s3_client_access_key = "hashicorp/vault"
s3_client_secret_key  = "hashicorp/vault"
```
または、次のようにキーを直接提供することもできます。
```
name = "Elasticsearch Cluster"
local_elasticsearch_url = ""
apikey = "Your Elastic API Key"
s3_client_access_key = "Your AWS Access Key"
s3_client_secret_key  = "Your AWS Secret Key"
```
6. これらの変数が .tfvars ファイルで指定されると（以下の例では、testing.tfvars という名前のファイルを使用しています）、次のようにTerraform モジュールを実行できます。
```
terraform init
terraform validate
terraform apply -var-file="testing.tfvars"
```
# 展開を破棄する
terraform モジュールによってプロビジョニングされるインフラストラクチャが不要になった場合は、次のコマンドを使用してすべてのリソースを簡単に終了できます。
```
terraform destroy -var-file="testing.tfvars"
```
# Elastic と AWS でより多くの移行リソースを活用する
Elastic は、[AWS ISV ワークロード移行プログラム（WMP）](https://www.elastic.co/blog/tackle-cloud-based-digital-transformation-with-elastic-cloud-an-aws-workload-migration-partner)パートナーとして認定されており、[自己管理型のオンプレミス Elasticsearch または ELK ワークロードの Elastic on AWS への移行](https://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/migrate-an-elk-stack-to-elastic-cloud-on-aws.html)をサポートします。
Elastic の方法論は、[移行の採用を加速するための規範的で反復可能なアプローチをお客様に提供し、 AWS Well-Architected Framework や AWS Migration Acceleration Program](https://aws.amazon.com/architecture/well-architected/?wa-lens-whitepapers.sort-by=item.additionalFields.sortDate&wa-lens-whitepapers.sort-order=desc) などの AWS が[公開](https://www.elastic.co/jp/blog/10-steps-for-automating-elastic-workload-migration-from-on-prem-to-elastic-on-aws#:~:text=%E3%81%AA%E3%81%A9%E3%81%AEAWS%E3%81%8C-,%E5%85%AC%E9%96%8B,-%E3%81%99%E3%82%8B%E7%A7%BB%E8%A1%8C%E3%82%AC%E3%82%A4%E3%83%80%E3%83%B3%E3%82%B9) する移行ガイダンスおよびベストプラクティスと直接連携しています。
AWS WMP プログラムを通じて、オンボーディングガイダンス、移行リソース、AWS インフラストラクチャクレジットと資金援助をさらに活用して、ビジネス目標を達成し、クラウドジャーニーを加速することができます。

# Elastic on AWS への移行を今すぐ始めましょう
チームがすでに知っている Elastic ソリューションを使用して、クラウド対応のすべての機能を利用するように移行します。この[移行ガイド](https://www.elastic.co/jp/blog/10-steps-for-automating-elastic-workload-migration-from-on-prem-to-elastic-on-aws#:~:text=%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE-,%E7%A7%BB%E8%A1%8C%E3%82%AC%E3%82%A4%E3%83%89,-%E3%80%81%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%AC%E3%82%A4%E3%83%89)、[クイックスタートガイド](https://aws.amazon.com/quickstart/?solutions-all.sort-by=item.additionalFields.sortDate&solutions-all.sort-order=desc&awsf.filter-content-type=*all&awsf.filter-tech-category=*all&awsf.filter-industry=*all&solutions-all.q=elastic%2Bcloud&solutions-all.q_operator=AND) 、[Web サイト](https://www.elastic.co/elasticsearch/service/migrate-to-elastic-cloud)、および[ドキュメント](https://www.elastic.co/guide/en/cloud/current/ec-migrate-data.html)を表示するか、[直接当社に連絡](https://www.elastic.co/contact)して、Elastic が移行をどのように支援できるか（評価、計画、財政支援など）を確認してください。また、複雑で大規模なワークロードの移行を支援できる [Elastic Consulting チーム](https://www.elastic.co/consulting/engage) に連絡することもできます。[AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-voru33wi6xs7k) から直接7日間の無料トライアルを利用して、Elastic を数分でデプロイできます。

鈴木 章太郎
Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリスト