最近digdagだったりDigdagだったりそろえるのが面倒になってきたhandaです。
今回は前回の記事で使用したこのPowerShellを使用して、Embulkコマンドを実行してみたいと思います。
www.capybara-engineer.com
Embulkで使用するファイルは、以下の過去記事で使用したものを流用します。
www.capybara-engineer.com
尚、ついでに実行ログを出力したいので、以下の記事を参考にログ出力設定も実装しました。
www.miraclejob.com
実施作業
Embulkコマンド確認
まずは実行するEmbulkコマンドを確認します。
embulk run config.yml

バッチファイル作成
次にEmbulkコマンドを実行するPowerShellのバッチを作成します。(変な実装があってもご容赦ください)
※embulkの実行ログを出力すると、ログが長くなってしまうので、今回は入れないようにしています
function LogMessage($Message , $Log){
Write-Output "$(Get-Date -Format G): $Message"
Write-Output "$(Get-Date -Format G): $Message" >> $Log
}
$logfile="C:\opt\embulk\logs\embulk_run_$(Get-Date -Format "yyyyMMdd_HHmm").log"
LogMessage "start embulk" $logfile
embulk run C:\work\embulk\config.yml
if ($? -ne "True"){
LogMessage "error embulk" $logfile
exit 1
}
LogMessage "end embulk" $logfile
実際に運用していく際はログは日次でローテートされるほうが良いとは思うのですが、今回はそこまでする必要はないので、時分でローテートされるように実装しています。
$logfile="C:\opt\embulk\logs\embulk_run_$(Get-Date -Format "yyyyMMdd_HHmm").log"
実際に実行してみます。
# C:\opt\embulk\embulk_run.ps1
特に問題なく実行できてそうです。

digdag設定・実行
Embulk実行バッチが作成できたら、digdagのworkflowファイルを以下の内容で作成してサーバにアップロードします。
timezone: UTC
_export:
sh:
shell: ["powershell.exe", "-"]
+embulk:
sh>: C:\opt\embulk\embulk_run.ps1
アップロードできたので、実行していきます。

正常終了しました。

digdagのタスクログを見てもEmbulkバッチが正常に実行されていることが確認できます。

Embulkバッチから出力したログを見ると開始、終了のメッセージだけ出力されていることも確認できました。

バッチのログも分単位で分割されていました。

感想及び所感
今回はdigdagでembulkコマンドを実行するところまで実施しました。
次回は今回出力したEmbulkバッチのログをCloudWatchに転送して、エラーが発生した場合にアラートを出すように設定したいと思います。