digdagのパラメータ(store)を環境ごとにセットアップをしたいということがあったので、その方法を紹介します。
digdagのrbオペーレーターを利用しますがPythonでも同じことが実現可能です。
サンプル
先に最終的な構成を紹介します。
最終的な構成はGitHubからも確認できます。(https://github.com/katsuyan/digdag_sample_set_params)
ディレクトリ構成
.
├── config
│ └── config.yml
├── digdag.dig
└── tasks
└── setup.rb
digdag.dig
digdag.dig
timezone: Asia/Tokyo
+set_state:
_retry: 3
_export:
docker:
image: ruby:2.5.1
rb>: Setup.set_state
require: 'tasks/setup'
+echo_db_user:
echo>: ${db_user}
+echo_db_pass:
echo>: ${db_pass}
setup.yml
setup.rb
require 'yaml'
class Setup
def set_state
environment = Digdag.env.params['environment']
config = YAML.load_file('config/config.yml')[environment]
config.each do |key, value|
Digdag.env.store(key.to_sym => value)
end
end
end
config.yml
config.yml
production:
db_user: user
db_pass: pass
development:
db_user: user_dev
db_pass: pass_dev
test:
db_user: user_dev
db_pass: pass_dev
環境ごとにDigdag storeをセットアップする流れ
1. config.ymlを用意
config.ymlに環境ごとの設定を記述します。
production:
db_user: user
db_pass: pass
development:
db_user: user_dev
db_pass: pass_dev
test:
db_user: user_dev
db_pass: pass_dev
2. config.ymlから設定をDigdagのstoreに格納するスクリプトを用意
environment = Digdag.env.params['environment']
config = YAML.load_file('config/config.yml')[environment]
config.each do |key, value|
Digdag.env.store(key.to_sym => value)
end
3. Digdagからconfigをsotreするスクリプトを呼び出す
+set_state:
_retry: 3
_export:
docker:
image: ruby:2.5.1
rb>: Setup.set_state
require: 'tasks/setup'
4. digdag実行時にenvironment
環境変数を渡す
digdag run digdag.dig -p digdag_env=development
以上はdevelopment環境時のコマンドになります。development部分をproduction, testに書き換えることで環境ごとにconfig.ymlの設定から対象のパラメータをstoreに設定することができます。
まとめ
yamlファイルで環境ごとの設定を管理する方法を紹介しました。これにより、環境ごとの設定をこのyamlファイルに閉じ込めることができます。