LoginSignup
3
1

More than 5 years have passed since last update.

DigDagをEC2にいれてHelloWorld的なワークフローを動かしてみる

Posted at

DigDagとは?

Workflowのためのツールです。定期的に何か処理をしたいという時に使うものです。
毎日の天気をSlackに通知したいとか?そんな感じ。

要はcronとかWindowsのサービスでバッチを動かしたりするのをモダンに出来る仕組みです。

さっそくインストールしてみる

今回はAWS EC2に入れてみます。

Javaを8系にUpdateする

java -version

時と場合によるかもしれませんがEC2 LinuxではJava 1.7が入っているかもしれませんがDigDagでは8系が必要なようです。まずバージョンを確認して 1.8 になっているか確認してみてください。1.8ならOKなので次の手順は飛ばしてください。 1.7だった場合には下記手順で8系にしてください。

まずyumでインストール。

$ sudo yum install java-1.8.0-openjdk-src.x86_64

その後使うバージョンをalternativesコマンドで入れ替えます。メニューが出てくるので 1.8 を選択。

$ sudo alternatives --config java

バージョンを確認しておいてください。1.8とかになってればOKです。

$ java -version

DigDagを入れる

基本は公式の通りです。
http://docs.digdag.io/getting_started.html

ただ今回は諸事情で ~/bin/diag ではなく /usr/local に入れたかったのでパスを書き換えています。この辺りはお好きなところへどうぞです。

$ cd /usr/local
$ sudo curl -o ./digdag/digdag --create-dirs -L "https://dl.digdag.io/digdag-latest"
$ sudo chmod +x ./digdag/digdag
$ sudo chown ec2-user:ec2-user ./digdag
$ echo 'export PATH="/usr/local/digdag/:$PATH"' >> ~/.bashrc
$ . ~/.bashrc

入ったことを念のため確認しておきます。

$ digdag --version
0.9.35

サンプルを動かしてみる

適当な場所を作って。

$ mkdir digdag_test
$ cd digdag_test

initでプロジェクトを作ってみる。

$ digdag init mydag
2019-03-26 09:30:44 +0900: Digdag v0.9.35
  Creating mydag/mydag.dig
  Creating mydag/.gitignore
Done. Type `cd mydag` and then `digdag run mydag.dig` to run the workflow. Enjoy!

出来上がったファイルを見てみる。

$ cd mydag
$ ls
mydag.dig

中身を見てみる。

mydag.dig
timezone: UTC

+setup:
  echo>: start ${session_time}

+disp_current_date:
  echo>: ${moment(session_time).utc().format('YYYY-MM-DD HH:mm:ss Z')}

+repeat:
  for_each>:
    order: [first, second, third]
    animal: [dog, cat]
  _do:
    echo>: ${order} ${animal}
  _parallel: true

+teardown:
  echo>: finish ${session_time}

とりあえず実行してみる。

$ digdag run mydag.dig
    :

日時が出たり、dog とか cat とか出てたら成功です。
無事に実行されました。

HelloWorld的な簡単なものを作ってみる

ちょっとサンプルだけだとよくわからないので簡単なものを作ってみます。
ファイルの中身をがさっと書き換えてください。

mydag.dig
timezone: Asia/Tokyo

+step1:
  echo>: Hello World!! ${session_time}

+step2:
  echo>: Fin.

実行。

$ digdag run mydig.dag

色々ログも一緒にでますが要は下記のように出ると思います。

  :
Hello World!! 2019-03-26 09:00:00 +09:00
  :
Fin.
  :

何度か連続で動かそうと思うと何も出ないかもしれません。
実行済みのタスクになっているためです。その場合には --rerun オプションを付けてやってみてください。
digdag run mydig.dag --rerun です。

echo>: で書いた文字列が順番に出るだけなのでなんとなく想像通りの動きだったかと思います。

少しだけこったものを作ってみる

せっかくなのでREST的な通信も加えたサンプルです。

timezone: Asia/Tokyo

+setup:
  echo>: Hello World!! ${session_time}

+a:
  http>: https://us-central1-get-simple-json.cloudfunctions.net/hello
  content_type: "applicication/json"
  store_content: true

+b:
  _export:
    date: ${JSON.parse(http.last_content).date}
    msg: ${JSON.parse(http.last_content).msg}

  +c:
    echo>: date is ${date}, msg is ${msg} .

+teardown:
  echo>: Fin.

結果こうなります(ログとかは省略)。

$ digdag run mydag.dig  --rerun
  :
2019-03-27 17:18:39 +0900: Digdag v0.9.35
  :
Hello World!! 2019-03-26T09:00:00+09:00
  :
date is Wed Mar 27 2019 08:18:59 GMT+0000 (UTC), msg is hogehoge .
  :
Fin.

説明するほど複雑ではありませんが。
上から簡単に説明してみます。

  • +{label_name} で書いたタスクが上から順に実行されます。今回は setupabcteardown の順に実行されます。
  • timezone: Asia/Tokyo でタイムゾーンを日本にしてます。
  • http>: {URL} でREST APIをたたいて store_content: true で結果を保持して。
  • _export: でDigDag内で使う変数定義が出来るので date: ${JSON.parse(http.last_content).date}date にJSONのパース結果を保存。
  • echo>: date is ${date}, msg is ${msg} . で結果を出力。

次には何をする?

ここまでで簡単なチュートリアルは完了です。

あとは DigDag で検索! ということで調べながらやりたいオペレータを調べて付け加えていってください。
例えば今回使った http>: 以外にも mail>: であったり、処理の制御を行う loop>: if>: や、凝った処理をRubyやPythonで行うための rb>: py>: などたくさんあります。

あとは良い感じでデーモン化するなりして動かしておけば処理の自動化がはかどります。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1