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

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

DigdagでEmbulkを実行する

最近digdagだったりDigdagだったりそろえるのが面倒になってきたhandaです。

今回は前回の記事で使用したこのPowerShellを使用して、Embulkコマンドを実行してみたいと思います。
www.capybara-engineer.com


Embulkで使用するファイルは、以下の過去記事で使用したものを流用します。
www.capybara-engineer.com


尚、ついでに実行ログを出力したいので、以下の記事を参考にログ出力設定も実装しました。
www.miraclejob.com

実施作業

Embulkコマンド確認

まずは実行するEmbulkコマンドを確認します。

embulk run config.yml

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

バッチファイル作成

次に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



特に問題なく実行できてそうです。
f:id:live-your-life-dd18:20201105115629p:plain

digdag設定・実行

Embulk実行バッチが作成できたら、digdagのworkflowファイルを以下の内容で作成してサーバにアップロードします。

timezone: UTC

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

+embulk:
  sh>: C:\opt\embulk\embulk_run.ps1



アップロードできたので、実行していきます。
f:id:live-your-life-dd18:20201105120100p:plain


正常終了しました。
f:id:live-your-life-dd18:20201105120752p:plain


digdagのタスクログを見てもEmbulkバッチが正常に実行されていることが確認できます。
f:id:live-your-life-dd18:20201105120816p:plain


Embulkバッチから出力したログを見ると開始、終了のメッセージだけ出力されていることも確認できました。
f:id:live-your-life-dd18:20201105120932p:plain


バッチのログも分単位で分割されていました。
f:id:live-your-life-dd18:20201105121353p:plain

感想及び所感

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