IT業務効率化

ワークフローエンジンdigdagをmacにインストールする

digdag mac python

digdagとは

digdagはTreasure Dataが開発したオープンソースのワークフローエンジンです。cronと似ていて、定期的な実行タイミングを設定し、Pythonやshellや実行したり、embulkというデータ転送エンジンを起動したりできます。

  • cronと同様に定期実行ができる
  • それぞれのタスクをどのような順番で処理するかルールを定義できる
  • 並列を処理を行ったり、エラー時の分岐・再実行なども定義可能
  • GUIからエラーログの確認、再実行が可能
  • Python、shell、TreasureData・postgresへのクエリなどを実行可能

またdigdagから実行可能なものをオペレータとよび以下にまとまっています。

https://docs.digdag.io/operators.html

むっちゃ便利なcronってことね!

macにdigdagを導入する

digdagのインストール

公式のGetting Startedに従います。まずは以下のコマンドを実行します。

$ curl -o ~/bin/digdag --create-dirs -L "https://dl.digdag.io/digdag-latest"
$ chmod +x ~/bin/digdag
$ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc

bashrcを実行します。

source ~/.bashrc

これでdigdagコマンドが実行できたら、インストールは完了です。

サーバモードで起動する

任意の場所で問題ないかと思いますが、/usr/localの下にdigdag-serverというディレクトリを作成しました。

yuki-PC:digdag-server yuki$ pwd
/usr/local/digdag-server

そしてディレクトリを好きな名前で作成します。これはプロジェクトと呼ばれ、この後作成するdigdagのワークフローをカテゴライズする役割があります。

python-testという名前で作成しました。

yuki-PC:python-test yuki$ pwd
/usr/local/digdag-server/python-test

そしてpython.digというファイルを作成します。中身は以下のように書きました。(以下を参考にしております:詳細

+step1:
  py>: bin.tasks.python_test

+step1はタスクの名前で、任意につけることができます。

そのあとのpy>はオペレータと呼ばれ、pythonのコードを実行することを明示しています。pythonのコードを実行するためにはpythonファイルの関数か、クラスのメソッドを指定する必要があります。

そのときの書き方は

<ディレクトリ1>.<ディレクトリ2>…<ディレクトリn><ファイル名><関数名>

もしくは

<ディレクトリ1>.<ディレクトリ2>…<ディレクトリn><ファイル名><クラス名><メソッド名>

となります。

詳しくは公式のドキュメントにて。

 

pythonのファイルは以下のように内容です。

import digdag
  

def python_test():
    print("hello digdag")

import digdagはdigdagで実行するときのお約束のようなものです。このライブラリを用いて、digdagの環境変数を読み取ったり、書き込んだりすることも可能です。

ディレクトリの構成は以下のようになっています。

.
├── bin
│   └── tasks.py
└── python_test.dig

そして実験的にコマンドラインから実行するためにはdigdag run コマンドを使います。

実行結果は以下のようになります。

yuki-PC:python-test yuki$ digdag run python_test.dig 
2019-09-08 09:42:15 +0900: Digdag v0.9.39
2019-09-08 09:42:18 +0900 [INFO] (main): Database migration started
2019-09-08 09:42:18 +0900 [INFO] (main): Applying database migration:20151204221156
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160602123456
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160602184025
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160610154832
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160623123456
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160719172538
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160817123456
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160818043815
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160818220026
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160908175551
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160926123456
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20160928203753
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20161005225356
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20161028112233
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20161110112233
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20161209001857
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20170116082921
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20170116090744
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20170223220127
2019-09-08 09:42:19 +0900 [INFO] (main): Applying database migration:20190318175338
2019-09-08 09:42:19 +0900 [INFO] (main): Database migration successfully finished.
2019-09-08 09:42:19 +0900 [WARN] (main): Using a new session time 2019-09-08T00:00:00+00:00.
2019-09-08 09:42:19 +0900 [INFO] (main): Using session /usr/local/digdag-server/python-test/.digdag/status/20190908T000000+0000.
2019-09-08 09:42:19 +0900 [INFO] (main): Starting a new session project id=1 workflow name=python_test session_time=2019-09-08T00:00:00+00:00
2019-09-08 09:42:21 +0900 [INFO] (0017@[0:default]+python_test+step1): py>: bin.tasks.python_test
hello digdag
Success. Task state is saved at /usr/local/digdag-server/python-test/.digdag/status/20190908T000000+0000 directory.
  * Use --session <daily | hourly | "yyyy-MM-dd[ HH:mm:ss]"> to not reuse the last session time.
  * Use --rerun, --start +NAME, or --goal +NAME argument to rerun skipped tasks.

下から4行目の箇所でpythonのprint文が成功しています。

おわりに

この記事は入門記事です。

このあとにdockerを用いてpythonの環境を統一する方法と、GUIから操作するためにdigdag serverを立ち上げる方法を取り上げたいと思います。

【追記】dockerによる、digdag_python環境の管理について書きました。

digdag docker python
digdagで実行するPythonをDocker環境でバージョン管理する前回の記事がこちらなので、ぜひ合わせてご覧ください。 https://www.hirayuki.com/it-enh/instal...
ABOUT ME
hirayuki
今年で社会人3年目になります。 日々体当たりで仕事を覚えています。 テーマはIT・教育です。 少しでも技術に親しんでもらえるよう、noteで4コマ漫画も書いています。 https://note.mu/hirayuki