LoginSignup
3
0

More than 3 years have passed since last update.

Digdagで環境毎に設定値を変える(RubyOnRails)

Last updated at Posted at 2020-07-15

Digdagについて

Getting started
Architecture
Concepts
Workflow definition
Scheduling workflow
Operators
Command reference
Language API -Ruby
Digdagで環境毎に設定値を変える(RubyOnRails)
Digdagを用いてRubyOnRails環境でバッチ実装

やること

Ruby on Rails チュートリアルのサンプルアプリケーションにDigdag用YAML形式の環境設定ファイルを作ってRubyタスクから環境変数を取得しDigdag環境変数に設定、別のRubyタスクからDigdag環境変数を取得できるまで確認しようと思います。

今回の説明にはRuby on Rails チュートリアルのサンプルアプリケーショコードは関係ありませんが次回のバッチ実装で使うため、タウンロードしてそのフロジェクトにDigdagのWorkflowを追加します。

Ruby on Rails チュートリアルのサンプルアプリケーションダウンロード

https://github.com/yasslab/sample_app
スクリーンショット 2020-07-15 23.06.34.png

workflow生成

$ digdag init workflow
$ cd workflow
$ digdag run workflow.dig

以下のような結果が表示されればDigdagのWorkflow環境は問題なし〜

結果
2020-07-15 22:01:56 +0900 [INFO] (0017@[0:default]+workflow+setup): echo>: start 2020-07-15T00:00:00+00:00
start 2020-07-15T00:00:00+00:00
2020-07-15 22:01:57 +0900 [INFO] (0017@[0:default]+workflow+disp_current_date): echo>: 2020-07-15 00:00:00 +00:00
2020-07-15 00:00:00 +00:00
2020-07-15 22:01:57 +0900 [INFO] (0017@[0:default]+workflow+repeat): for_each>: {order=[first, second, third], animal=[dog, cat]}
2020-07-15 22:01:57 +0900 [INFO] (0018@[0:default]+workflow+repeat^sub+for-0=order=0=first&1=animal=1=cat): echo>: first cat
first cat
2020-07-15 22:01:57 +0900 [INFO] (0019@[0:default]+workflow+repeat^sub+for-0=order=1=second&1=animal=0=dog): echo>: second dog
second dog
2020-07-15 22:01:58 +0900 [INFO] (0020@[0:default]+workflow+repeat^sub+for-0=order=1=second&1=animal=1=cat): echo>: second cat
second cat
2020-07-15 22:01:58 +0900 [INFO] (0022@[0:default]+workflow+repeat^sub+for-0=order=2=third&1=animal=1=cat): echo>: third cat
third cat
2020-07-15 22:01:58 +0900 [INFO] (0021@[0:default]+workflow+repeat^sub+for-0=order=2=third&1=animal=0=dog): echo>: third dog
third dog
2020-07-15 22:01:58 +0900 [INFO] (0017@[0:default]+workflow+repeat^sub+for-0=order=0=first&1=animal=0=dog): echo>: first dog
first dog
2020-07-15 22:01:58 +0900 [INFO] (0017@[0:default]+workflow+teardown): echo>: finish 2020-07-15T00:00:00+00:00
finish 2020-07-15T00:00:00+00:00

YAML形式の環境変数ファイル作成

$ cd workflow
$ mkdir config
$ vi environment.yml

development, staging, production別にurl, user,passwordを設定しました。
この環境変数をDigdagのタスクから参照します。

environment.yml
development:
  url: development.jp
  user: development_user
  password: development_password

staging:
  url: staging.jp
  user: staging_user
  password: staging_password

production:
  url: procuction.jp
  user: procuction_user
  password: procuction_password

YAMLファイルの環境変数をDigdagの環境変数に設定するRubyクラスを作ります。

workflow フォルダの下にtasks フォルダを作ります
そこにenvironment.rbを作ります。こちらのクラスがYAMLファイルから環境変数を読み取ってDigdagの環境変数に保存します。

$ cd workflow
$ mkdir tasks
environment.rb
require 'yaml'

class Environment
  def load
    environment = Digdag.env.params['environment']
    environment = case environment
                  when 'stg'
                    'staging'
                  when 'prd'
                    'production'
                  else
                    'development'
                  end

    # 該当する環境の環境変数を取得
    config = YAML.load_file('config/environment.yml')[environment]
    config.each do |key, value|
      # Digdag環境変数に保存
      Digdag.env.store(key.to_sym => value)
    end
  end
end

Workflow.digにタスク追加

$ digdag init workflow で自動生成されたコードは削除して以下のコードを追加

workflow.dig
timezone: UTC

+load_environment:
  rb>: Environment.load
  require: 'tasks/environment'
+print_environment_value:
  sh>: echo url:${url} user:${user} password:${password}
+print_ruby:
  rb>: DigdagEnvironment.show
  require: 'tasks/digdag_environment'

■load_environmentタスク:Digdag実行の時の環境パラメーターから該当する環境変数をDigdag環境変数に設定するタスク
■print_environment_value:Digdag環境変数をシェルタスクから出力するタスク
■print_ruby:RubyクラスからDigdag環境変数を出力するタスク

development環境から実行してみます。

$digdag run workflow.dig -p environment=development --rerun

development環境で実行結果
2020-07-15 22:49:35 +0900 [INFO] (0017@[0:default]+workflow+load_environment): rb>: Environment.load
2020-07-15 22:49:35 +0900 [INFO] (0017@[0:default]+workflow+print_environment_value): sh>: echo url:development.jp user:development_user password:development_password
url:development.jp user:development_user password:development_password
2020-07-15 22:49:36 +0900 [INFO] (0017@[0:default]+workflow+print_ruby): rb>: DigdagEnvironment.show
url: development.jp
user: development_user
password: development_password

次はStaging環境

$digdag run workflow.dig -p environment=stg --rerun

staging環境で実行結果
2020-07-15 22:55:33 +0900 [INFO] (0017@[0:default]+workflow+load_environment): rb>: Environment.load
2020-07-15 22:55:33 +0900 [INFO] (0017@[0:default]+workflow+print_environment_value): sh>: echo url:staging.jp user:staging_user password:staging_password
url:staging.jp user:staging_user password:staging_password
2020-07-15 22:55:34 +0900 [INFO] (0017@[0:default]+workflow+print_ruby): rb>: DigdagEnvironment.show
url: staging.jp
user: staging_user
password: staging_password

最後にProduction環境

$digdag run workflow.dig -p environment=prd --rerun

production環境で実行結果
2020-07-15 22:56:30 +0900 [INFO] (0017@[0:default]+workflow+load_environment): rb>: Environment.load
2020-07-15 22:56:30 +0900 [INFO] (0017@[0:default]+workflow+print_environment_value): sh>: echo url:procuction.jp user:procuction_user password:procuction_password
url:procuction.jp user:procuction_user password:procuction_password
2020-07-15 22:56:31 +0900 [INFO] (0017@[0:default]+workflow+print_ruby): rb>: DigdagEnvironment.show

これで環境変数設定が終わったので次回からはRubyOnRailsのチュートリアルアプリのデータでバッチを作ってみようと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0