digdag v 0.8.9以降からシークレットモードが追加されていてapikeyやパスワードなどセキュアな情報を扱う場合にはsecretsコマンドを使わないとInternalServerErrorやproperty not foundと怒られてワークフローが動かなくなりました。
下記にドキュメントがありますが、パッとみて分かりづらかったのでひとまず動かすまでのメモを残しておきます。
http://www.digdag.io/command_reference.html#server-mode-commands
サーバを動かすまで
- デーモン化する
- セッションの永続化先の設定(H2DB(オンメモリorファイル)、Postgresql
- シークレットモードの設定
1.デーモン化
幾つか選択肢はあるようですが、自分は下記記事を参考にsupervisordでデーモン化しました。
https://blog.manabusakai.com/2016/08/digdag-supervisor/
設定ファイル等を食わせるときに環境変数を指定できるので起動用シェルを作るのがポイントです。
#!/bin/sh
export PATH=$PATH:/usr/local/digdag/
exec ~/bin/digdag server --config /usr/local/digdag/conf/digdag.properties
また、supervisordで設定した場合起動ユーザに注意してください。
userを指定しないとrootで起動してしまい、いろんなもののパスが通っていなかったり
パーミッションで苦労する事になります。
2.永続化先の設定
選択肢としては3つあります。
- H2DB(オンメモリ)
- H2DB(ファイル)
- porsgresql
1. H2DB(オンメモリ)
プロセスが消えるとデータも消えます。
サーバモードで使う意味が殆ど無いかと。テスト用?
2. H2DB(ファイル)
1台構成でサクッとやる文にはこちらで十分だと思います。
v0.8.7ぐらいの頃は一晩起動してるとコネクションが残り続けてエラーになるというバグが有りました。今はおきてません。H2DBが古かったせいらしいです。
3. Postgresql(DB)
digdagサーバを複数台に分けて冗長化したり負荷分散する場合には必要になると思います。
2で動かなかったときに構築しましたがpostgresに不慣れだったのもありセットアップが手間だったので1台構成でやる場合はおすすめしません。
3.シークレットモードの設定
digdag serverは各種設定を記述したpropertiesファイルを
-c (--config)オプションで指定して起動します。
必要なファイルは下記2種類です。名前はなんでもいいはず。
- 各種設定・・・digdag.properties
- シークレット設定ファイルを用意する・・・secret-access-policy.yaml
Secret Access Policy File
database.type = h2 # DBの種類を指定
database.path = /var/tmp/test.db #永続化ファイルのパス(新規作成されます。書き込み権限忘れないように。)
digdag.secret-access-policy-file = /usr/local/digdag/conf/secret-access-policy.yaml # シークレット設定ファイルのパス(起動スクリプトでパス通してると相対でよい?)
digdag.secret-encryption-key = MDEyMzQ1Njc4OTAxMjM0NQ== # secretsを永続化する際の暗号化キー
digdag.secret-encryption-key は暗号化鍵の設定です。
128-bitのAES方式でbase64でエンコードした文字列を記載します。
公式のサンプルにあるMDEyMzQ1Njc4OTAxMjM0NQ==
は、デコードすると0123456789012345
になります。
http://www.convertstring.com/ja/EncodeDecode/Base64Decode
セッションを永続化する際にこの鍵を使ってDBに書き込むためのもので、都度何かするたびにキーが聞かれるわけではない、という認識です。間違ってたらごめんなさい。
operators:
mail:
secrets:
- mail.*
pg:
secrets:
- pg.*
s3_wait:
secrets:
- aws.*
td:
secrets:
- td.*
#(...中略..) 公式を参照のこと
td_wait:
secrets:
- td.*
td_wait_table:
secrets:
- td.*
こちらはオペレータ毎にsecretsが必要かどうかを設定するようです。個々にapikeyを書くわけではないです。
これを指定するとシークレットモードで起動します。
secretコマンドの使い方
登録(digdag push)したワークフローについて下記コマンドを打つとsecretsが必要な値を設定することが出来ます。(例はTDのapikey)
digdag secrets --project <project-name> --set td.apikey
こうすると対話型で入力できます。
これで一通りdigdagサーバを動かすことが出来ると思います。間違いがあったら教えてください。
digdagサーバについてはまだ本番環境で稼働している話をあまり聞かないので、みんな試行錯誤しつつ試している段階なんですかね。もっと色々情報共有したいです。