「Digdag」を使って依存関係のあるタスクをコードベースで管理する
こんにちは!
タダケン(@tadaken3)です。
会社で使っている分析基盤に、Digdagというワークフローエンジンを導入しました。digdagはとても魅力的なツールで、ぜひより多くの人にも使ってほしいなと思い、Digdagの導入方法をまとめてみました。
Digdagとは
Digdagは複雑なタスクを実行するためのTresure Dataが開発したOSSのワークフローエンジンです。
例えば、
- 外部APIからデータを取得する
- 取得したデータを成形する
- データをデータベースにインサートする
みたいな処理を順番に実行したいとします。
cronで実行することもできますが、何らかの理由でAPIからデータ取得に時間がかかったりした場合、その後の処理がエラーとなってしまいます。
ワークフローエンジンを使えば、タスクの依存関係も含めて管理するとことがでますし、エラーが発生した場合に、リトライをしたり、通知を送ったりすることができます。
類似のツールとしてAirflow、Luigiなどがあります。Digdagは、ワークフローを「*.dig」というファイルに記述していくのですが、他のツールと比較して、ワークフローの内容をシンプルに記述できる点がわかりやすくて良いなと感じ導入しました。
シンプルなツールですが、スケジュール機能、WEB上でモニタリング画面なども提供されています。詳しい内容は開発者の以下のスライドをご覧ください。
www.slideshare.net
Digdagをインストールする
centOS 7.4で試しています。digdagを動かすためには、Java 8(8u72) 以上が必要になります。基本的に公式のチュートリアル通りにインストールすれば、オッケーです。
$ curl -o ~/bin/digdag --create-dirs -L "https://dl.digdag.io/digdag-latest" $ chmod +x ~/bin/digdag $ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
念のため、きちんとインストールできたか、確認します。
$ digdag --version
digファイルを作成してワークフローを記述する
digdag initでプロジェクトファイルが作成されます。コマンドを実行してみます。
$ digdag init project-name
porject-nameディレクトリの配下にproject-name.digというファイルが作られます。
$ cd project-name $ ls project-name.dig
このdigファイルにワークフローを記述していきます。フォーマットはYAML拡張です。 このような感じで記述してきます。
timezone: Asia/Tokyo # Timezoneの設定 schedule: #スジェジュールを記載します。この場合、毎日7時に実行されます。 daily>: 07:00:00 +step1: #タスク1 (+がタスクを表します) sh>:echo "start task1 ${session_time}" +step2: #タスク2 sh> : ./src/sample_script.sh #シェルスクリプトも実行できます。 _error: #タスクが失敗したときの処理も記述できます。 echo>: echo "failure!" sh>: ./src/error_notify.sh #
少し話がそれますが、ボクはSlackやLINEなどに通知をするためのシェルスクリプトを作って、エラー時に通知するようにしています。
とくにLINE Notifyはトークンを用意するだけで簡単に通知が送れるので、色々試しているときは、LINE Notifyを重宝しています。
LINE Notifyの詳細については、以下の記事を参考にしてみてください。
コマンドラインから LINE にメッセージを送れる LINE Notify : LINE Engineering Blog
ワークフローを実行する
digファイルの記述ができたら、ワークフローを実行します。まずは手動で実行できるか試してみましょう。以下のコマンドで、ワークフローを手動で実行できます。
$ digdag run project-name.dig
ワークフローを定期実行するには、schedulerを起動します。以下のコマンドを実行すると、先程のdigファイルがschedulerに登録されます。設定されたタスクが毎日7字に実行されるようになります。
$ digdag sched
digファイルを更新すると、scheduler1にも自動で反映されます。
まとめ
駆け足でありましたが、digdagの使い方をまとめてみました。digdagを使うとタスクの依存関係などをコードベースでかつ簡単に管理できるようになります。
digファイルを記述していくだけでいいので、覚えることも少なくて、そのあたりがとても魅力的だなと思います。
cronで消耗している方は、ぜひ試してみてはいかがでしょうか。
参考URL
読者登録をお願いします!
本ブログでは、副業やプログラミングに関する記事を公開しています。(ときどき、それ以外のことも)読者登録してもらうと更新の励みになります。ぜひ一緒にプログラミングを学びましょう。
-
Digdagには3つのモードがあります。ローカルモード、サーバーモード、クライアントモードです。今回はお試しということで、ローカルモードのスケジューラーの機能を利用していますが、本格的に利用するのであれば、サーバーモードを使った方が良いようです。digファイルはそのまま流用できます。↩