Digdagではsecretsパラメータを使って認証情報をdigファイル内に記載しないようにすることができる。
例えばローカルで動かすときには、
$ digdag secrets --local --set s3.access_key=xxxx
で実現できる。ちなみにローカルの場合には、~/.config/digdag/secrets/s3.access_keyに保持される。 一方でこの情報をpythonやrubyから呼び出したいときには、直接参照するメソッドは現状なさそう。 ちなみにdigdag内の変数を参照する場合は、下記のサンプルがある。
https://github.com/treasure-data/digdag/blob/master/examples/python_args.dig
# test.dig timezone: "Asia/Tokyo" +a: py>: python_args.required_arguments required1: "1" required2: 2
# python_args.py from __future__ import print_function import digdag def required_arguments(required1, required2): print("required1 = " \+ str(required1)) print("required2 = " \+ str(required2))
上記を実行すると下記のようになる。
$ digdag run test.dig --rerun 2017-06-09 12:00:52 +0900: Digdag v0.9.12 2017-06-09 12:00:54 +0900 [WARN] (main): Reusing the last session time 2017-06-09T00:00:00+09:00. 2017-06-09 12:00:54 +0900 [INFO] (main): Using session /Users/takahashi/Downloads/testProject/.digdag/status/20170609T000000+0900. 2017-06-09 12:00:54 +0900 [INFO] (main): Starting a new session project id=1 workflow name=test session_time=2017-06-09T00:00:00+09:00 2017-06-09 12:00:55 +0900 [INFO] (0017@[0:default]+test+a): py>: python_args.required_arguments required1 = 1 required2 = 2
しかし、これにならっても、Secretの変数は参照できない。
# test.dig timezone: "Asia/Tokyo" _export: test: value +a: py>: python_args.required_arguments required1: ${secret:s3.access_key} required2: ${test}
$ digdag run test.dig --rerun 2017-06-09 12:04:04 +0900: Digdag v0.9.12 2017-06-09 12:04:05 +0900 [WARN] (main): Reusing the last session time 2017-06-09T00:00:00+09:00. 2017-06-09 12:04:05 +0900 [INFO] (main): Using session /Users/takahashi/Downloads/testProject/.digdag/status/20170609T000000+0900. 2017-06-09 12:04:05 +0900 [INFO] (main): Starting a new session project id=1 workflow name=test session_time=2017-06-09T00:00:00+09:00 2017-06-09 12:04:06 +0900 [INFO] (0017@[0:default]+test+a): py>: python_args.required_arguments required1 = ${secret:s3.access_key} required2 = value
ではどうするかというと、環境変数を介することで、Secretを参照することができる。
timezone: "Asia/Tokyo" _export: test: value +a: py>: python_args.required_arguments _env: required1: ${secret:s3.access_key} required2: ${test}
from __future__ import print_function import digdag import os def required_arguments(required2): print("required1 = " \+ str(os.environ.get('required1'))) print("required2 = " \+ str(required2))
$ digdag run test.dig --rerun 2017-06-09 12:06:29 +0900: Digdag v0.9.12 2017-06-09 12:06:30 +0900 [WARN] (main): Reusing the last session time 2017-06-09T00:00:00+09:00. 2017-06-09 12:06:30 +0900 [INFO] (main): Using session /Users/takahashi/Downloads/testProject/.digdag/status/20170609T000000+0900. 2017-06-09 12:06:30 +0900 [INFO] (main): Starting a new session project id=1 workflow name=test session_time=2017-06-09T00:00:00+09:00 2017-06-09 12:06:32 +0900 [INFO] (0017@[0:default]+test+a): py>: python_args.required_arguments required1 = xxxx required2 = value Success. Task state is saved at /Users/takahashi/Downloads/testProject/.digdag/status/20170609T000000+0900 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.
Rubyも同様にできるはず。。。