Organizations

2 results for ElasticCloud
  • 本投稿はLancers(ランサーズ) Advent Calendar 2018の4日目の記事です。 昨日は、Slack の簡易エンドポイントを Amazon API Gateway で作った話についての記事でした。 本日は、ElasticCloudからAmazon Elasticsearch Serviceへの移行して良かったこと大変だったことについて話します。 概要 会社でとあるサービスのバックエンドにElasticsearchのマネージドサービスであるElasticCloudを使用していた。 ElasticCloudはElasticsearchの開発元であるElastic社が提供しているサービスで、Elasticsearchを容易に管理できる。 しかしながら、AWSでもElasticsearchをマネージドサービスで提供しており、VPCで管理できるようになった今、普段利用しているAWSに統合できた方が総合的に管理しやすくコスト管理しやすいだろうとなり、移行することとなった。 ※追記あり 本ブログではどのように移行を行っていったかをまとめていく。 ここではあくまでも移行の手順のみになりElasticsearchに関するチューニング等は一切記載していない。 なお、ElasticCloudからの移行手順と記載したが、AWSの異なるAWSアカウントIDや異なるリージョン間での移行でも参考になるかもしれない。 正直かなり色々なステップがあり、長い記事になってしまったので、最初に要約を書いておく。 要約 ElasticCloudからAmazon Elasticsearch Serviceへは移行できる。 移行する際は同じリージョンのS3を作って、そこにスナップショットを取得して、S3のクロスリージョンコピーを利用すれば別リージョンでもデータをコピーできる。 stream2es(Elastic社が開発)とScrollAPIを使えば、比較的簡単に大量データをindex単位でリストアできる。 VPC(Proxy)配下にElasticsearchを設置した場合にtd-agentがElasticsearchにつなげなくなることがあるのでマジ注意!(reload_connections falseに設定する) 構成 構成は比較的シンプルで、サイトへのアクセスがあったらnginxのログをtailしているFluentdがElasticsearchへ必要なログを保存する。 それをRailsでできたアプリケーションサーバーから管理、閲覧できるようになっている。 最初に チームで移行しようと決まった時点で、どのような移行手順になるのか、そもそもどうやって移行するのかがわからず、まずは移行が行えるかどうかというところからのスタートだった。 ただ、調べてみるとそもそもElastic社が、自社のElasticCloudからの移行についてヘルプを記載してくれている。 Snapshot and Restore with Custom Repository Elastic社のElasticCloudもバックエンドはAWSを利用しており、S3にスナップショットを取得することができる。 同一リージョンであれば、スナップショットの取得先を別のAWSアカウント、つまり我々の環境にデータを保存することができる。 移行手順(前編) スナップショットのリストアまでの手順としては下記の通り。 ElasticCloudはap-norheast-1は未対応なので、最初にElaticCloudのS3が設置されているリージョンと同じap-southeast-1に自分のAWSアカウントでS3バケットを作成する 上記バケットへのアクセス可能なユーザーを作成する 作成したアクセスキーでElasticCloudの本番へリポジトリを登録する リポジトリへスナップショットを取得する ap-northeast-1にバケットを作成する ap-northeast-1のバケットへのアクセス許可を最初に作成したユーザーへアタッチする S3のデータをap-northeast-1のS3バケットへクロスリージョンコピーする 実際の手順 スナップショットの保存先登録、保存、S3コピー S3バケットの作成とIAMユーザー作成は、通常の手順なので省略する。 XXXXX-proddataというバケットを作成したとする。 作成したS3バケット、およびアクセスキー、シークレットアクセキーをElasticCloud側へ登録する。 % curl -XPUT 'https://Elastic社のリポジトリ.
  • 概要 今回は、ElasticCloudからAmazon Elasticsearch Searvice(Amazon ES)への移行を検証するために手動によるスナップショットの取得手順を確認したのでその記録。 ElasticCloudはElastic社が提供するElasticsearchのマネージドサービス。 サーバーへインストールするタイプと同じで、RESTfulAPIによる手動スナップショットがサポートされている。 なお、30分おきに自動でもスナップショットが取得されており、リストアができる。 ポイント ElaticCloudのバックエンドはAWSで、スナップショットの取得先として、Amazon S3を使用している。 そのため、ElasticCloudで利用しているリージョンと同じリージョンのS3を自分たちで管理しているアカウント上に作成し、下記権限を与えてあげることでリポジトリ登録ができる。 Snapshot and Restore with Custom Repository 本作業はElaticCloudのES環境で実施したが、Elasic社のドキュメントを見る限りは自分でインストールして管理しているESでも(細かい点は不明だが)基本的には同様のことがおこなえると思われる。 手順 バケットを作成したら、下記IAMポリシーを作成する。 { "Statement": [ { "Action": [ "s3:*" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::自分で作成したバケット名", "arn:aws:s3:::自分で作成したバケット名/*" ] } ] } 新規でIAMユーザーを作成して、上記IAMポリシーをアタッチする。 ※新規でというのは、作成したIAMユーザーのアクセスキーとシークレットアクセスキーをElasticCloudへ設定する必要があるため。 手動のスナップショット取得 Elasticsearchのスナップショット取得は、スナップショット取得の前にリポジトリ登録が必要である。 このリポジトリというものがなんなのか最初わからなかったが、スナップショットを取得するのに必要なもののようだ。 リポジトリ登録前 上述の通り、ElasticCloudは自動的にスナップショットが取得されている。 そのため、下記を実行するとfound-snapshotsというリポジトリが既に登録されているのがわかる。 curl -XGET "https://エンドポイント/_snapshot/_all?pretty" { "found-snapshots" : { "type" : "s3", "settings" : { "bucket" : "バケットを示す文字列", "server_side_encryption" : "true", "base_path" : "snapshots/文字列", "