再起動ポリシーによるコンテナー化タスクの実行

Azure Container Instances ではコンテナー デプロイを簡単にすばやく行えるため、コンテナー インスタンスでのビルド、テスト、イメージ レンダリングなどの一度のみ実行されるタスクの実行に優れたプラットフォームを提供します。

構成可能な再起動ポリシーを使用して、プロセスが完了したらコンテナーが停止するように指定できます。 コンテナーのインスタンスは秒単位で課金されるため、タスクを実行するコンテナーの実行中に使用されるコンピューティング リソースのみが課金されます。

この記事にある例では、Azure CLI を使用します。 Azure CLI バージョン 2.0.21 以上がローカルにインストールされているか、Azure Cloud Shell で CLI を使用する必要があります。

コンテナー再起動ポリシー

Azure Container Instances でコンテナー グループを作成する場合、3 つの再起動ポリシー設定のいずれかを指定できます。

再起動ポリシー 説明
Always コンテナー グループ内のコンテナーを常に再起動する。 これは既定の設定で、コンテナー作成時に再起動ポリシーが指定されていない場合に適用されます。
Never コンテナー グループ内のコンテナーを再起動しない。 コンテナーは最大で 1 回実行されます。
OnFailure コンテナーで実行されたプロセスが失敗 (0 以外の終了コードで終了) した場合にのみ、コンテナー グループ内のコンテナーを再起動する。 コンテナーは少なくとも 1 回実行されます。

Note

お使いのコンテナー グループに IP アドレスが構成されている場合、コンテナー グループを再起動すると、その IP アドレスが変わる場合があります。

再起動ポリシーの指定

再起動ポリシーを指定する方法は、Azure CLI や Azure PowerShell コマンドレット、または Azure Portal を使うなどのコンテナー インスタンスを作成する方法によって異なります。 Azure CLI では、az container create を呼び出すときに、--restart-policy パラメーターを指定します。

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mycontainerimage \
    --restart-policy OnFailure

完了まで実行の例

再起動ポリシーが動作しているのを確認するには、Microsoft aci-wordcount イメージからコンテナー インスタンスを作成し、OnFailure 再起動ポリシーを指定します。 このコンテナー例では、既定でシェイクスピアのハムレットのテキストを解析し、最もよく使われる単語 10 個を STDOUT に書き込んで終了する Python スクリプトを実行します。

このコンテナー例を次の az container create コマンドで実行します。

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
    --restart-policy OnFailure

Azure Container Instances はコンテナーを開始し、そのアプリケーション (ここではスクリプト) が終了すると停止します。 Azure Container Instances が再起動ポリシー Never または OnFailure のコンテナーを停止すると、そのコンテナーの状態は終了に設定されます。 az container show コマンドで、コンテナーの状態を確認できます。

az container show \
    --resource-group myResourceGroup \
    --name mycontainer \
    --query containers[0].instanceView.currentState.state

出力例:

"Terminated"

コンテナー例の状態が終了と表示されたら、コンテナー ログを表示してタスクの出力を確認できます。 az container logs コマンドを実行して、スクリプトの出力を表示します。

az container logs --resource-group myResourceGroup --name mycontainer

出力:

[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

この例は、スクリプトが STDOUT に送信した出力を示しています。 ただし、コンテナー化されたタスクでは、後で取得できるように、その出力を永続的ストレージに書き込む場合があります。 たとえば、Azure ファイル共有に書き込むなどです。

次の手順

いくつかのコンテナーがある大きなデータセットのバッチ処理など、タスク ベースのシナリオでは、ランタイムではカスタムの環境変数またはコマンド ラインのメリットが得られます。

完了まで実行するコンテナーの出力を保存する方法の詳細については、「Azure Container Instances での Azure ファイル共有のマウント」をご覧ください。