Embulkを活用してAmazon Elasticsearch Serviceへデータを同期させた話

こんにちは。インフラチームの高畑です。

今回は Elasticsearch (ES) を AWS に移行した際に導入した Embulk についてお話しします!

Embulkとは

Embulk とは、 Fluentd の開発者である古橋貞之氏によって開発された、 Fluentd のバッチ版のようなものです。 プラグインにより、インプットとアウトプットを柔軟に切り替えることが可能となっており、バルク処理に特化しています。

Fluentd と Embulk の違い
Fluentd
  • データのストリーミング転送
  • 既存の大量なデータは転送ができない

Embulk
  • 定期実行によるデータ転送
  • 分散処理により既存の大量なデータを転送できる

Embulkで利用できるプラグインは以下の通りとなっています。

プラグインの一覧はこちら

Input Plugin RDS、S3、GA、ES・・・・・
Output Plugin RDS、S3、GA、ES・・・・・
Filter Plugin カラムを削ったり、再構成したり
File Parser Plugin
File Decoder Plugin
File Formatter Plugin ファイル関係
File Encoder Plugin
Executor Plugin Hadoop上で実行させたり

導入前

これまで、サービスで利用する ES を自前で構築し、JDBC ドライバを利用して RDS から ES に対しデータを転送していました。 また、ログ基盤として EFK (ES + Fluentd + Kibana) をAWS のマネージドサービスを用いて構築を行なっていました。

サービスで利用する ES を AWS ES に統一しようと考えていたのですが、AWS ES は JDBC を利用したデータ転送が出来ないという問題があり、サービス用の自前 ES とログ基盤用 AWS ES が混在するという無駄な状態となってしまいました。

そこで、これらを解決するため、JDBC での転送をやめ Embulk を利用してデータ転送を行うことにしました。

f:id:tkhttty:20181005143003p:plain

導入後

Embulk の設定ファイルはとてもシンプルな構造となっており、 RDS からデータを取得して ES へ送るだけであれば以下のように設定するだけで動作します。

(括弧で括っているところは環境に応じて変更する必要があります)

f:id:tkhttty:20180921164109j:plain

Embulkを活用して 1 日 1 回の同期処理をさせることにより、AWS ES に RDS のデータを流せるため、自前の ES は不要になり ES の混在状態を解消することができました。

またこれにより、自前で ES を管理する必要がなくなり運用コストの低下にもつながりました。

f:id:tkhttty:20181005142043p:plain

おわりに

Embulkを活用することにより、自前で構築していたESを使う必要がなくなり運用コストの削減に繋げることができました。

同様なことで悩んでいる方がいらっしゃいましたらぜひ活用してみると良いかと思います!