AWSでdigdagを試したメモ (get started)

Treasure Data社製のDataflow Automation OSS DigdagをAWS上で試してみた。
とりあえず EC2(Amazon Linux) x 1、RDS(postgresql) x 1 の構成で。
クライアントサーバモデルだが、今回はEC2 1台でクライアントとサーバを兼ねる。

参考）
https://github.com/treasure-data/digdag
http://www.digdag.io/

概要）
https://youtu.be/OAaFr_CnXvk

参考）
http://blog.techium.jp/entry/2016/06/20/090000
http://dev.classmethod.jp/server-side/getting-started-digdag/

#digdagインストール
Amazon Linuxで以下スクリプトを実行
javaのバージョンを1.8にする必要あり （2016.9時点）

```
#re-install java latest version
sudo yum -y remove java
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.rpm
sudo rpm -ivh jdk-8u102-linux-x64.rpm 


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

```digdag --help```コマンドが有効になればOK


#PostgreSQLを準備
digdagのプロジェクト情報等を格納するDBに、デフォルトでは永続化されないオンメモリDBのH2が設定されるが、通常運用を想定するとPostgreSQLモードなのでRDSで準備。

DBインスタンス作成後、digdag用のDB設定ファイルを作成。
postgresql.config

```
database.type = postgresql
database.user = DBユーザ　　
database.password = パスワード
database.host = XXX.ap-northeast-1.rds.amazonaws.com ※ホスト名
database.port = 5432
database.database = DB名
```


#digdag サーバーを起動

作成したDB設定ファイルを引数に以下コマンド起動

```
digdag server -c postgresql.conf
```

これでdigdag serverが起動


#サンプルデータフローを作成

プロジェクト作成 
```
digdag init test
```
※プロジェクト名：test

すると、プロジェクト名のディレクトリが生成され、中にtest.digが作られる。
以下のように編集。

```
timezone: UTC

+task1:
  sh>: echo "execute task1"

+task2:
  sh>: echo "execute task2"
```

内容はshellで記載されたtask1実行後にtask2を実行するだけ。
　"+" はタスクを意味する。意味付けをして、+loadとか+getとか任意に決めても良い。
sh>: はshellでタスクの処理を書く という意味。
他にも、py>: pythonや、rb>: ruby などもあり、好きな言語で処理を書ける。

このディレクトリ上で以下を実行し、作成したプロジェクトをdigdag serverへpushする。
```digdag push [プロジェクト名]```

git的にコードの履歴管理もできる模様。更新があれば再度Pushで上書きすれば良い。

```
$ digdag push testpj 
2016-09-29 11:09:31 +0000: Digdag v0.8.15
Creating .digdag/tmp/archive-3107467629901268204.tar.gz...
  Archiving test.dig
  Archiving query.sql
Workflows:
  test

Uploaded:
  id: 1
  name: testpj
  revision: 9c30a1a1-fb73-4031-a836-bce014453fc4
  archive type: db
  project created at: 2016-09-29T11:09:32Z
  revision updated at: 2016-09-29T11:09:32Z

Use `digdag workflows` to show all workflows.
```

pushされたプロジェクトの確認コマンド

```
$ digdag workflows
2016-09-29 11:09:41 +0000: Digdag v0.8.15
  testpj
    test

Use `digdag workflows <project-name> <name>` to show details.
```

#サンプルデータフローを実行

```digdag start [プロジェクト名] [ジョブ名] --session now```

```
$ digdag start testpj test --session now
2016-09-29 11:14:10 +0000: Digdag v0.8.15
2016-09-29 11:14:11 +0000 [INFO] (XNIO-1 task-12): Starting a new session project id=1 workflow name=test session_time=2016-09-29T11:14:11+00:00
Started a session attempt:
  session id: 1
  attempt id: 1
  uuid: 8c7a517c-906f-4a92-be3e-af6e9c8e09db
  project: testpj
  workflow: test
  session time: 2016-09-29 11:14:11 +0000
  retry attempt name: 
  params: {}
  created at: 2016-09-29 11:14:11 +0000

* Use `digdag session 1` to show session status.
* Use `digdag task 1` and `digdag log 1` to show task status and logs.

$ 2016-09-29 11:14:12 +0000 [INFO] (0170@+test+task1): sh>: echo "execute task1"
execute task1
2016-09-29 11:14:12 +0000 [INFO] (0170@+test+task2): sh>: echo "execute task2"
execute task2
```

動いた。

＃実行結果ログを確認

```
$ digdag sessions
2016-09-29 11:18:48 +0000: Digdag v0.8.15
Sessions:
  session id: 1
  attempt id: 1
  uuid: 8c7a517c-906f-4a92-be3e-af6e9c8e09db
  project: testpj
  workflow: test
  session time: 2016-09-29 11:14:11 +0000
  retry attempt name: 
  params: {}
  created at: 2016-09-29 11:14:11 +0000
  kill requested: false
  status: success

```


今後は、以下を試す予定
・ちゃんとしたETLと自動リカバリ
・docker上で稼働
・複数クラスタでの分散処理