blogEKS(Kubernetes)上にDigdag・Embulk・Redashで分析環境を構築する2019-04-19by@wapa5powKubernetes上に分析環境を構築する機会があったのでどのように構築したかを紹介します。同じような構成でKubernetes上で構築するのは3回目になったので構築方法も洗練されてきました。構成は以下のようになっています。サービスのデータベース。ここのテーブルからBigQueryにEmbulkでデータをエクスポートします。Digdagのデータベース。今回新たにつくりました。データベースのエクスポートなどを実行するタスクスケジューラ。失敗したときにリトライもできます。プラグインを使ってデータベースをMySQLからBigQueryにエクスポートします。Digdagと同じDockerコンテナでDigdagのタスクから実行されます。すべてのエクスポートされたデータをここに集約させます。Serviceを使いました。普通に使う分には$99/月と値段がそんなに高くないのでメンテナンスコストなども考え選択しました。Kubernetes側で構築するのはDigdagとEmbulkだけです。ワーカーノードの作成EKSは構築されている前提なので、分析環境用のワーカーノードを作成します。基本的にここの手順ですが、変更したところを書きます。analytics-20190330としました。今後新しいノードグループを作ることもあるのと思うので日付をグループ名に入れてあります。1台でリソース大丈夫かなと思っていますが必要なら増やしてください。t3.largeです。ここらへんもあまり小さいインスタンスサイズでないものを適当に選んでください。100GBにしてあります。ここも適度に大きければ大丈夫です。ワーカーノードをクラスターと結合したら以下のコマンドでノードがクラスタ上で表示されるか確認してみます。STATUSがReadyになっていたら大丈夫です。v1.11.9DigdagとEmbulkのDockerビルドDigdagでEmbulkを動かすのでDigdagとEmbulkがはいったDockerfileを作ります。以下のフォルダ構成です。mysql_backup.digDockerfileでEmbulkとDigdagをインストールします。変わったことはしていないです。4"]digdag.propertiesにはDigdagの設定情報を記載します。database.*の情報は先に説明したDigdag用のRDSの設定を保存してください。16文字の英数字をbase64でエンコードした値をシークレットキーとして記載してください。base64のように実行すればエンコードされた値を取得できます。VURaRGNUVG1EN3V3bTNBdgo=embulk_configs/jobs.yml.liquidにはMySQLからBigQueryへのエクスポート設定を書きます。今回のデータベースの時間がUTCだったのでUTCで設定しています。各種環境変数で設定してステージング・本番で変更できるようにしてあります。ここらへんの設定に関してはDigdagのembulk-input-jdbcや、embulk-output-bigqueryを見るといいかなと思います。1mysql_backup.digにはDigdagで動かすタスクの設定を記載します。毎日2時(日本時間)にembulk_configs/jobs.yml.liquidを実行します。リトライ処理も入れてあります。embulk_configs/jobs.yml.liquid設定ファイルを編集したらDockerでビルドします。今回は以下のようにビルドし、ECRにプッシュしておきます。xxx.dkr.ecr.ap-northeast-1.amazonaws.com/analytics:1.0.0KubernetesにDigdag/EmbulkをデプロイKubernetes用のDeploymentを作ってデプロイします。Deploymentのファイルをつくります。analytics-credentialsEMBULK_INPUT_MYSQL_HOSTなどのMySQL関係の環境変数はエクスポートしたいMySQLの情報を設定してください。EMBULK_OUTPUT_KEY_FILEPATHでGCPのサービスアカウントのJSONキーの位置を指定しています。これは後述しますがKubernetesのシークレットの仕組みを使ってファイルを保存したものをマウントしています。EMBULK_OUTPUT_DATASETはBigQueryのデータセット名です。作っておいてください。analytics-credentialsというシークレットをあらかじめ作る必要があるので以下のように作ります。gcp-service-account-key.jsonはサービスアカウントのキーです。--from-file=digdag.json=gcp-service-account-key.json作り終わったらデプロイします。analytics.yamlしばらくしてポッドが立ち上がったらDigdagのポッドに入ってタスクを設定します。schedulerこれでDigdagの設定は完了したのでDigdagのポッドにポートフォーワードしてローカルからブラウザでhttp://localhost:65432にアクセスしDigdagの管理画面がみれたら完了です。Serviceは無料期間があるので有料がいやだなと思う人はそれで試してみるといいかなと思います。登録したらBigQueryのデータソースを登録します。AdminをつけてからJSONキーを取得したものを設定してください。まとめDockerとKubernetesを使うことによりすばやく分析環境が構築できました。分析したいけどデータがちらばっていてどうしたらいいかわからないという場合は、DigdagとEmbulkを使って各データベースなどの情報をBigQueryに流してRedashで分析すると効率的にサービス改善ができます。EmbulkからBigQueryへのエクスポートはときどき失敗するのですが、Digdagを使うことによりリトライができ失敗確率も減り安心して開発に専念できます。Digdagは他にもBigQueryのクエリを実行してその結果をBigQueryに保存するということを定期的に行えば中間テーブルを日別に生成できるので便利です。よさそうだと思ったらぜひ、Embulk・Digdag・Redashの組み合わせを試してみてください。blogHomeAboutTool。