チェックポイントと並列処理を調べる

完了

ワークフローを使用すると、コード内で複雑なロジックを実装できます。 ワークフローで使用できる 2 つの機能は、チェックポイントと並列処理です。

チェックポイント

チェックポイントは、ワークフローの現在の状態を示すスナップショットです。

チェックポイントには、変数の現在の値と、その時点までに生成されたすべての出力が含まれます。 (チェックポイントの詳細については、チェックポイントに関する Web ページを参照してください)。

ワークフローがエラーで終了したり中断されたりした場合、次回の実行時には、ワークフローの先頭ではなく、最後のチェックポイントから開始されます。

Checkpoint-Workflow アクティビティを使用してワークフローにチェックポイントを設定できます。

たとえば、Activity2 の後に例外が発生した場合、ワークフローは次のサンプル コードで終了します。

ワークフローは再実行されると、最後のチェックポイントが設定されたすぐ後の Activity2 から開始されます。

    <Activity1>
        Checkpoint-Workflow
            <Activity2>
                <Exception>
            <Activity3>

並列処理

スクリプト ブロックには、一般的なスクリプトに関しては、順次ではなく同時に (つまり "並列で") 実行される複数のコマンドがあります。

これは、"並列処理" と呼ばれます。 (並列処理の詳細については、並列処理 に関する Web ページを参照してください)。

次の例では、2 つの vm0vm1 VM が同時に開始され、vm2vm0vm1 が開始した後にのみ開始されます。

    Parallel
    {
        Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg 
        Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
    }

    Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg 

別の並列処理の例としては、いくつかの追加オプションが導入される次のコンストラクトがあります。

  • ForEach -ParallelForEach -Parallel コンストラクトを使用すると、コレクション内の各項目に対して同時にコマンドを処理できます。 コレクション内の項目は並行して処理され、スクリプト ブロック内のコマンドは順番に実行されます。

次の例で、Activity1 はコレクション内のすべての項目に対して同時に開始されます。

各項目に対して、Activity2Activity1 の完了後に開始されます。 Activity3 は、すべての項目に対して Activity1Activity2 の両方が完了した後にのみ開始されます。

  • ThrottleLimit - ThrottleLimit パラメーターを使用して、並列処理を制限します。 ThrottleLimit が高すぎると問題が発生する可能性があります。 ThrottleLimit パラメーターの理想的な値は、いくつかの環境要因によって異なります。 低い ThrottleLimit 値から開始し、特定の状況に適した値が見つかるまで値を増やしていきます。
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
    <Activity1>
    <Activity2>
}
<Activity3>

実際の例は次のコードのようになります。ファイルがコピーされた後、それぞれに対してメッセージが表示されます。 すべてのファイルがコピーされた後にのみ、完了メッセージが表示されます。

    Workflow Copy-Files
    {
        $files = @("C:\LocalPath\File1.txt","C:\LocalPath\File2.txt","C:\LocalPath\File3.txt")
   
        ForEach -Parallel -ThrottleLimit 10 ($File in $Files)
        {
            Copy-Item -Path $File -Destination \\NetworkPath
            Write-Output "$File copied."
        }
   
        Write-Output "All files copied."
    }