Azure Data FactoryをPowerShellで実行する


AzureのETLサービスであるAzure Data FactoryのPipelineをトリガー機能によるスケジュールではなくPowerShellから実行したい。

Pipelineの実行

以下コマンドでPipelineを実行できます。
ただし、Invoke-AzDataFactoryV2Pipelineコマンドは実行完了を待ちませんのでRun IDを取得して別のコマンドで処理の状態をチェックする必要があります。

$runid = Invoke-AzDataFactoryV2Pipeline -ResourceGroupName hoge-rg -DataFactoryName hoge-df -PipelineName pipeline1

実行結果の確認

先ほど取得したRun IDを使用して処理の状態を取得します。
正常終了している場合はStatusがSucceededとなります。

Get-AzDataFactoryV2PipelineRun -ResourceGroupName hoge-rg -DataFactoryName hoge-df -PipelineRunId $runid

ResourceGroupName : hoge-rg
DataFactoryName   : hoge-df
RunId             : 0f5dae66-c986-49ee-bb60-f4c787517014
PipelineName      : pipeline1
LastUpdated       : 2020/03/20 15:03:10
Parameters        : {}
RunStart          : 2020/03/20 15:03:04
RunEnd            : 2020/03/20 15:03:10
DurationInMs      : 6215
Status            : Succeeded
Message           :

処理が完了していない…

成否問わず一回の結果確認で完了ステータスが取得できれば良いですが、中々そうもいきませんね。
ですので完了するまで何度もコマンドを実行してステータスを取得します。
ループで定期的にステータスを取得するようにすれば問題ないでしょう。
次のサンプルでは10秒ごとに結果を確認し、処理が10分で完了しない場合ループを抜けるようにしています。

$limitTime = (Get-Date).AddSeconds(600)
$RunEnd= $false
do{
    Start-Sleep 10

    $result = Get-AzDataFactoryV2PipelineRun -ResourceGroupName hoge-rg -DataFactoryName hoge-df -PipelineRunId $runid

    Write-Output $result.Status
    if (!$result.RunEnd) {
        continue
    }
    $RunEnd= $true
    break
} while ((Get-Date) -lt $limitTime)

まとめ

トリガーによるPipelineのスケジュール実行は便利ですが、Pipelineに設定できない別のプログラム等と
先行後続関係を持っての実行制御が難しいです。
PowerShellから実行することでその辺りの制御に有効だと思います。