はじめに
AWS ElasticSearch Serviceはフルマネージドで運用要らず、今のところ(2017/5/18)他の追随を許さ無い魅力があります(筆者はElastic社のElastic Cloudは使った事がありません)
Azureの場合、MarketPlaceからElastic-Stackが提供されて完全占有クラスターが自動構築可能です。GCPもblogにある通り、Azureとほぼ同じ。完全占有クラスターのメリット?がありそうな反面、ElasticClusterの運用/管理がtrade-offとしてつきまといます。
当初はAzureで個別クラスターを使っていましたがトラブルが続き、運用などはしたく無いのでAWSに浮気してみましたのでその記録とTipsをまとめます
環境
- 既存の物を使い回しでAzureのVMにembulkインストール、データロード等の制御に使います
- データは Azure Blobに保存
- AWS ElasticSearch Service (ver5.1が選択できたのでこれ)
- 図解
セットアップ
- AzureVMへembulkのセットアップはこのあたりを参考に
- AWS ElasticSearch Serviceは本家の資料を参考に
- APIを使って投げ込む事を想定している為、embulkが稼働するNodeからのアクセス制御を掛けておきます
- embulk plugins
- embulk-input-azure_blob_storag
- embulk-output-elasticsearch_using_url
- こちらの記事にある通り、Tresure Data mugaさん謹製のpluginではAWS ElasticSearch Serviceをサポートしていないので、embulk-output-elasticsearch_using_url を使います
実行
以下の手順で実施
- BlobにElasticSearchに投入したいログをUploadしておく
- embulkから吸い出し、ElasticSearch Serviceへ投げ込み用のconfig.yml作成
in:
type: azure_blob_storage
account_name: <BLOB NAME>
account_key: <BLOB KEY>
container: <CONTAINER NAME>
path_prefix: <PREFIX as you like>
decoders:
- {type: gzip}
parser:
charset: UTF-8
newline: CRLF
type: jsonl
schema:
out:
type: elasticsearch_using_url
mode: normal
nodes:
- url: "<YOUR ElasticSearch Domain>.us-east-2.es.amazonaws.com:80"
index: "sample"
index_type: "sample"
- 実行
$ embulk preview config.yml
$ embulk run config.yml -l warn -r resume_state_aws.yml &>> embulk_awses.log
確認
まとめ
- ElasticSearchへの大量のデータロードにはembulkは最適な手段
- AWS ElasticSearch Serviceでは 9200 portが使えない為、embulk pluginの選択に注意、http経由で実施するのがおすすめ
余談
- およその費用比較
AWS | Azure | GCP | |
---|---|---|---|
費用 | $250 - $300 程度 | $530 | 未確認 |
- VirtulMachineのサイズ、データ量は1TB程度
- AWS
- EC2: t2.midium x3 , $150
- EBS: 1TB, $100
- データ通信料
- Azure
- VM: D2v2 , $84.82 x6 = $505.44
- Elastic-Stack構築時、VMサイズを選択可能だが、D1v2(default)では使い物にならなかった
- Blob: 1TB , $24
- データ通信料
- VM: D2v2 , $84.82 x6 = $505.44
- GCP
- 未検証
- AWS