🐈

Ubuntu20.04にdigdag入れて遊んでみた

2023/02/26に公開

Embulkの記事からの続きです。
Embulkにはワークフロー機能が無いので、digdagと言うワークフローツールを入れてdigdag経由でEmbulkを実行してみたい思います〜。

digdagのインストール

インストールは公式の手順通りに実施ます。
https://docs.digdag.io/getting_started.html

その前にJavaのインストール

digdagを動かすにはJava8もしくは11が必要なので11をインストールします。

$ sudo apt update -y && sudo apt upgrade -y
$ sudo apt install -y openjdk-11-jre

digdagのインストール

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

digdagのバージョン確認

ubuntu@embulk:~$ digdag --version
0.10.5

FireWallの穴あけ

$ sudo ufw allow 65432
$ sudo ufw reload
$ sudo reboot

digdagサーバの起動

起動コマンドはdigdag server -mです。
※OCIのインスタンス(グローバルIP付与)なのでオプションの-b 0.0.0.0を付けています。

実際に起動してみる
ubuntu@embulk:~$ digdag server -m -b 0.0.0.0
2023-02-25 11:17:08 +0000: Digdag v0.10.5
2023-02-25 11:17:12 +0000 [INFO] (main): secret encryption engine: disabled
2023-02-25 11:17:14 +0000 [INFO] (main): XNIO version 3.3.8.Final
2023-02-25 11:17:14 +0000 [INFO] (main): XNIO NIO Implementation Version 3.3.8.Final
2023-02-25 11:17:14 +0000 [INFO] (main): Starting server on 0.0.0.0:65432
2023-02-25 11:17:14 +0000 [INFO] (main): Bound on 0:0:0:0:0:0:0:0:65432 (api)

ブラウザにhttp://{サーバのIPアドレス}:65432を入力してアクセスしてみます。

無事に

GUIからDAGを作成し実行してみる

画面右上の「New Project」をクリックします。

プロジェクトの作成

プロジェクトの名前を「Name」欄で設定し、「Add file」をクリックします。
すると画面下のように入力画面が表示されるのでサンプルコードを入力します。
ここにdigdagで実行したい内容を書くイメージです。
続いて「new.dig」ですが、これはdigのファイル名です。
お好きな名前を入れてください。(私は面倒なのでこのままです。。)
最後に「保存」をクリックします。

digの実行

作成したdig「new」にアクセスし、画面右上の「RUN」をクリックします。

digの実行結果

実行するとSessions配下に実行ログのようなものが表示されました。
Statusも無事「Success」となっています。

実行ログの「Success」をクリックしてみる

より詳細な実行ログを確認することができます。

注意事項

今回インストールした手法は簡易的な方法で商用利用には向いていません。
何故なら一度digdagサーバを落とすと作成したプロジェクトが消えてしまうからです。
試しに落としてみます。

Ctrl+Cで強制終了させすぐに起動させる
finish 2023-02-25T11:41:43+00:00
^C2023-02-25 11:48:31 +0000 [INFO] (shutdown): Started shutdown process
2023-02-25 11:48:31 +0000 [INFO] (shutdown): Shutting down workflow executor loop
2023-02-25 11:48:31 +0000 [INFO] (shutdown): Closing HTTP listening sockets
2023-02-25 11:48:31 +0000 [INFO] (shutdown): Waiting for completion of running HTTP requests...
2023-02-25 11:48:31 +0000 [INFO] (shutdown): Shutting down HTTP worker threads
2023-02-25 11:48:31 +0000 [INFO] (shutdown): Shutting down system
2023-02-25 11:48:31 +0000 [INFO] (shutdown): Shutdown completed
ubuntu@embulk:~$ digdag server -m -b 0.0.0.0  ★再度実行
2023-02-25 11:49:45 +0000: Digdag v0.10.5
2023-02-25 11:49:49 +0000 [INFO] (main): secret encryption engine: disabled
2023-02-25 11:49:50 +0000 [INFO] (main): XNIO version 3.3.8.Final
2023-02-25 11:49:50 +0000 [INFO] (main): XNIO NIO Implementation Version 3.3.8.Final
2023-02-25 11:49:50 +0000 [INFO] (main): Starting server on 0.0.0.0:65432
2023-02-25 11:49:51 +0000 [INFO] (main): Bound on 0:0:0:0:0:0:0:0:65432 (api)

ブラウザを更新し、プロジェクト画面へアクセスすると先ほど作成したプロジェクトが消えています。

商用作業で利用する場合はプロジェクトやdigファイル、実行ログなどを保存するDBを入れてあげる必要があります。

もしGUIを利用せず、CLIの運用でもOKならdigファイルや実行ログはサーバに吐き出されるのでワンチャン運用できると思います。
ためにしコマンドで実行してみます。

CLIでdigを実行する

まずはサンプルdigファイルを作成しておきます。

ubuntu@embulk:~/digdag/test$ cat test.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}

ubuntu@embulk:~/digdag/test$

digdag run {digファイル名}コマンドで実行します。

ubuntu@embulk:~/digdag/test$ digdag run test.dig
2023-02-25 12:03:17 +0000: Digdag v0.10.5
2023-02-25 12:03:22 +0000 [WARN] (main): Using a new session time 2023-02-25T00:00:00+00:00.
2023-02-25 12:03:22 +0000 [INFO] (main): Using session /home/ubuntu/digdag/test/.digdag/status/20230225T000000+0000.
2023-02-25 12:03:23 +0000 [INFO] (main): Starting a new session project id=1 workflow name=test session_time=2023-02-25T00:00:00+00:00
2023-02-25 12:03:28 +0000 [INFO] (0016@[0:default:1:1]+test+setup): echo>: start 2023-02-25T00:00:00+00:00
start 2023-02-25T00:00:00+00:00
2023-02-25 12:03:30 +0000 [INFO] (0016@[0:default:1:1]+test+disp_current_date): echo>: 2023-02-25 00:00:00 +00:00
2023-02-25 00:00:00 +00:00
2023-02-25 12:03:30 +0000 [INFO] (0016@[0:default:1:1]+test+repeat): for_each>: {order=[first, second, third], animal=[dog, cat]}
2023-02-25 12:03:36 +0000 [INFO] (0019@[0:default:1:1]+test+repeat^sub+for-0=order=1=second&1=animal=1=cat): echo>: second cat
second cat
2023-02-25 12:03:36 +0000 [INFO] (0018@[0:default:1:1]+test+repeat^sub+for-0=order=1=second&1=animal=0=dog): echo>: second dog
second dog
2023-02-25 12:03:36 +0000 [INFO] (0016@[0:default:1:1]+test+repeat^sub+for-0=order=0=first&1=animal=0=dog): echo>: first dog
first dog
2023-02-25 12:03:36 +0000 [INFO] (0020@[0:default:1:1]+test+repeat^sub+for-0=order=2=third&1=animal=0=dog): echo>: third dog
third dog
2023-02-25 12:03:36 +0000 [INFO] (0017@[0:default:1:1]+test+repeat^sub+for-0=order=0=first&1=animal=1=cat): echo>: first cat
first cat
2023-02-25 12:03:36 +0000 [INFO] (0021@[0:default:1:1]+test+repeat^sub+for-0=order=2=third&1=animal=1=cat): echo>: third cat
third cat
2023-02-25 12:03:37 +0000 [INFO] (0021@[0:default:1:1]+test+teardown): echo>: finish 2023-02-25T00:00:00+00:00
finish 2023-02-25T00:00:00+00:00
Success. Task state is saved at /home/ubuntu/digdag/test/.digdag/status/20230225T000000+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.
ubuntu@embulk:~/digdag/test$

実行ログも吐き出されています。

ubuntu@embulk:~/digdag/test$ cat /home/ubuntu/digdag/test/.digdag/status/20230222T000000+0000/+test.yml
fullName: "+test"
state: "success"
result:
  subtaskConfig: {}
  exportParams: {}
  resetStoreParams: []
  storeParams: {}
  report:
    inputs: []
    outputs: []
ubuntu@embulk:~/digdag/test$

次回はDBも入れて商用向けに使える環境構築をやってみたいと思います。

Discussion