カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

DigdagでPowerShellを使う

今Digdagを使用している環境がWindowsなので、digdagでPowerShellを実行したいという場合もあるかと思います。

デフォルトではPowerShellで実行されているように設定されていないため、以下の記事を参考に設定してみます。

qiita.com

使用するworkflowファイルは以下の記事で使用したサンプルを流用します。
www.capybara-engineer.com

実施作業

workflowファイル修正・実行

まずはPowerShell設定せずに実行してみます。

元のworkflowファイルは以下の内容になっています。

timezone: UTC

+setup:
  echo>: start ${session_time}

+disp_current_date:
  echo>: ${moment(session_time).utc().format('YYYY-MM-DD HH:mm:ss Z')}

+repeat:
  for_each>:
    order: [first, second, third]
    animal: [dog, cat]
  _do:
    echo>: ${order} ${animal}
  _parallel: true

+teardown:
  echo>: finish ${session_time}

これに以下のPowerShellのコマンドを実行する処理を追加します。

+date:
  sh>: Get-Date -Format G


修正したworkflowファイルをdigdagサーバにアップロードします。

# digdag push [digdagサーバ上のプロジェクト名] --project [ファイルが格納されているディレクトリ名]

f:id:live-your-life-dd18:20201105112926p:plain


修正したworkflowがサーバにアップロードされました。
これで実行してみます。
f:id:live-your-life-dd18:20201105113104p:plain


エラーで失敗しました。
f:id:live-your-life-dd18:20201105113231p:plain

workflowファイル修正(2回目)・実行

次はPowerShellで実行されるように設定してアップロードします。

timezone: UTC

_export:
    sh:
      shell: ["powershell.exe", "-"]

+date:
  sh>: Get-Date -Format G

+setup:
  echo>: start ${session_time}

+disp_current_date:
  echo>: ${moment(session_time).utc().format('YYYY-MM-DD HH:mm:ss Z')}

+repeat:
  for_each>:
    order: [first, second, third]
    animal: [dog, cat]
  _do:
    echo>: ${order} ${animal}
  _parallel: true

+teardown:
  echo>: finish ${session_time}



アップロードを確認して、実行してみます。
f:id:live-your-life-dd18:20201105113506p:plain


今度は成功しました。
f:id:live-your-life-dd18:20201105113600p:plain


digdagのログを見ても正常に実行されていることが確認できました。
f:id:live-your-life-dd18:20201105113700p:plain

感想及び所感

以下のドキュメントにある通り、デフォルトではShellコマンドとして実行されるため、Windows PowerShellで実行する場合はsh変数を再定義して、PowerShell.exeで実行されるように変更する必要があります。
docs.digdag.io

WindowsでDigdagを使用する場合は、コマンドをラップして実行する、といったことがあると思うので、覚えていて損はないと思います。