読者です 読者をやめる 読者になる 読者になる

Curator 3 で Amazon Elasticsearch Service を扱う

Elasticsearch AWS

最近 Amazon Elasticsearch Service の記事をよく書いてる気がするw

開発用のログ基盤ではあるけど,実際に導入は完了していて,既に運用している.今回はインデックスを Curator でハウスキーピングできるようにした話を書いておく.基本的には Elasticsearch と同じなんだけど,一部 Amazon Elasticsearch Service 特有の課題があった.

github.com

Curator Version

まず Curator にはメジャーバージョンが2個あって,Curator 3 と Curator 4 で大きく実装も変わっている.Elasticsearch と Curator の対応表は GitHub に載っていて,以下の通り.

Version ES 1.x ES 2.x ES 5.x
3 yes yes no
4 no yes yes

Amazon Elasticsearch Service でサポートされている Elasticsearch のバージョンは 1.5 と 2.3 だから,Curator 3 なら両方のバージョンに対応していて,Elasticsearch 2.3 なら Curator 4 も使えそうに見えるが,実は違う.Curator 4 では /_cluster/state/metadata から情報を収集しているが,Amazon Elasticsearch Service はこの /_cluster/state/metadata に対するリクエストを許可していない.

よって,現時点では Amazon Elasticsearch Service を使う場合は Curator 3 一択となる.

$ curl xxx.ap-northeast-1.es.amazonaws.com/_cluster/state/metadata
{"Message":"Your request: '/_cluster/state/metadata' is not allowed."}%

実際に「Curator 4 じゃ動かないよ!」的な Issue が多く出ているけど,基本的には Amazon Elasticsearch Service の仕様だから Curator として正式にサポートしない方針のように理解した.

github.com

github.com

pip で Curator 3 に固定する

現在の最新は 3.5.1!

$ pip install elasticsearch-curator==3.5.1

ポートを指定する

Curator はデフォルトだと 9200 ポートに接続する.Amazon Elasticsearch Service の場合は 80 ポートなので --port 80 と忘れずに指定する.

/usr/bin/curator --host xxx.ap-northeast-1.es.amazonaws.com --port 80 delete indices --prefix yyy --older-than 90 --time-unit days --timestring %Y.%m.%d

スケジューリング

コマンドをラップしたシェルを用意して Jenkins から日次で実行している.Amazon Elasticsearch Service は日次でスナップショットを取るため,余裕を持ってその後にスケジューリングしている.

関連記事

closebloom など運用 Tips を参考にさせてもらった.

qiita.com

Amazon Elasticsearch Service 関連記事

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com