Azure Batch のジョブとタスクのエラー

Azure Batch のジョブとタスクを追加、スケジュール、または実行するときには、さまざまなエラーが発生する可能性があります。 ジョブとタスクを追加するときに発生するエラーを検出するのは簡単です。 API、コマンド ライン、またはユーザー インターフェイスは、通常、失敗を直ちに返します。 この記事では、ジョブとタスクが送信された後に発生するエラーを確認して処理する方法について説明します。

ジョブの失敗

ジョブとは、1 つ以上のタスクから成るグループであり、これにより、実行するコマンド ラインが指定されます。 ジョブを追加するときには、次の省略可能なパラメーターを指定できます。 これらのパラメーターは、ジョブがどのように失敗するかに影響します。

  • JobConstraints。 ジョブの最大アクティブ時間または最大実行時間を設定するための maxWallClockTime プロパティを必要に応じて使用できます。 ジョブが maxWallClockTime を超える場合、ジョブは強制終了され、JobExecutionInformation では terminateReason プロパティが MaxWallClockTimeExpiry に設定されます。

  • JobPreparationTask。 ジョブ タスクを実行するようにスケジュールされた各コンピューティング ノード上で実行するジョブ準備タスクを必要に応じて指定できます。 ノードは、ジョブのタスクを初めて実行する前に、ジョブ準備タスクを実行します。 ジョブ準備タスクが失敗した場合、タスクは実行されず、ジョブは完了しません。

  • JobReleaseTask。 ジョブ準備タスクがあるジョブのジョブ解放タスクを必要に応じて指定できます。 ジョブが強制終了されるときには、ジョブ準備タスクを実行した各プール ノード上でジョブ解放タスクが実行されます。 ジョブ解放タスクが失敗した場合でも、ジョブは completed 状態に移行します。

Azure portal では、Batch の[ジョブの追加] 画面の[Job manager, preparation and release tasks] (ジョブ マネージャー タスク、ジョブ準備タスク、ジョブ解放タスク) セクションと [詳細設定] セクションでこれらのパラメーターを設定できます。

ジョブ プロパティ

JobExecutionInformation の次のジョブ プロパティで、エラーの有無を確認します。

  • ジョブがジョブ制約で指定された maxWallClockTime を超えたために、ジョブが強制終了された場合、terminateReason プロパティは MaxWallClockTimeExpiry を示します。 このプロパティは、ジョブの onTaskFailure 属性が performExitOptionsJobAction に設定されていて、terminatejobjobAction を指定する終了条件でタスクが失敗した場合に、taskFailed に設定されることもあります。

  • スケジュール エラーが発生した場合は、JobSchedulingError プロパティが設定されます。

ジョブの準備タスク

ジョブ準備タスクのインスタンスは、ノードがジョブのタスクを初めて実行するときに、各コンピューティング ノード上で実行されます。 ジョブ準備タスクは、実行されるインスタンスを (プール内のノード数を上限として) 複数含んだタスク テンプレートと考えることができます。 ジョブ準備タスクのインスタンスを確認して、エラーの有無を判断します。

ジョブ - 準備タスクと解放タスクの状態の一覧表示 API を使用すると、指定されたジョブのジョブ準備タスクとジョブ解放タスクのすべてのインスタンスの実行状態を一覧表示できます。 他のタスクと同様に、JobPreparationTaskExecutionInformation は、failureInfoexitCoderesult などのプロパティで使用できます。

ジョブ準備タスクが実行されるときに、ジョブ準備タスクをトリガーしたタスクは、preparingtaskState に移行します。 ジョブ準備タスクが失敗した場合、トリガーしていたタスクは active 状態に戻り、実行されません。

ジョブ準備タスクが失敗した場合、トリガーしていたジョブ タスクは実行されません。 ジョブは完了せず、スタックします。 スケジュール可能なタスクを含むジョブがほかになければ、プールは使用されない可能性があります。

ジョブのリリース タスク

ジョブ準備タスクを実行した各ノード上でジョブが強制終了されるときには、ジョブ解放タスクのインスタンスが実行されます。 ジョブ解放タスクのインスタンスを確認して、エラーの有無を判断します。

ジョブ - 準備タスクと解放タスクの状態の一覧表示 API を使用すると、指定されたジョブのジョブ準備タスクとジョブ解放タスクのすべてのインスタンスの実行状態を一覧表示できます。 他のタスクと同様に、JobReleaseTaskExecutionInformation は、failureInfoexitCoderesult などのプロパティで使用できます。

ジョブ解放タスクが 1 つ以上失敗しても、ジョブは強制終了され、completed 状態に移行します。

タスクの失敗

ジョブ タスクは、次の理由により失敗する可能性があります。

  • タスクのコマンド ラインが失敗し、0 以外の終了コードが返される。
  • タスクに指定された resourceFiles が 1 つ以上ダウンロードされない。
  • タスクに指定された outputFiles が 1 つ以上アップロードされない。
  • タスクの経過時間が、TaskConstraints で指定された maxWallClockTime プロパティを超えた。

いずれのケースも、次のプロパティで、エラーの有無やエラーに関する情報を確認します。

  • TaskExecutionInformation プロパティには、エラーに関する情報を提供するプロパティが複数含まれています。 なんらかの理由でタスクが失敗したかどうかは、taskExecutionResult によって示され、その exitCodefailureInfo では、その失敗に関する詳細情報が提供されます。

  • 成功しても失敗しても、タスクは常に completedTaskState に移行します。

タスクの失敗がジョブやタスクの依存関係に及ぼす影響を考慮します。 ExitConditions を指定して、依存関係用のアクションとジョブ用のアクションを構成できます。

  • DependencyAction は、失敗したタスクに依存するタスクをブロックするか実行するかを制御します。
  • JobAction は、失敗したタスクが原因でジョブが無効になるか、強制終了されるか、未変更のままかを制御します。

タスクのコマンド ライン

タスクのコマンド ラインは、コンピューティング ノード上のシェルの下で実行されないため、環境変数の拡張などのシェルの機能をネイティブに使用することはできません。 このような機能を利用するには、コマンド ラインでシェルを呼び出す必要があります。 詳細については、「環境変数のコマンド ライン拡張」を参照してください。

タスクのコマンド ラインの出力は、stderr.txt ファイルと stdout.txt ファイルに書き込まれます。 アプリケーションがアプリケーション固有のログ ファイルに書き込む場合もあります。 問題を迅速に検出して診断するために、アプリケーションに包括的なエラー チェックを実装してください。

タスク ログ

タスクを実行したプール ノードがまだ存在する場合は、タスク ログ ファイルを取得して表示できます。 ファイル - タスクから取得などのいくつかの API では、タスク ファイルを一覧表示および取得できます。 Azure portal を使用して、タスクまたはノードのログ ファイルを一覧表示および表示することもできます。

  1. ノードの [概要] ページの上部で、[Batch ログのアップロード] を選択します。

    [Batch ログのアップロード] が強調表示されている、ノードの [概要] ページのスクリーンショット。

  2. [Batch ログのアップロード] ページで、[Pick storage container] (ストレージ コンテナーの選択) を選択し、アップロード先の Azure Storage コンテナーを選択し、[Start upload] (アップロードの開始) を選択します。

    [Batch ログのアップロード] ページのスクリーンショット。

  3. ストレージ コンテナー ページからログを表示したり、開いたり、ダウンロードしたりできます。

    ストレージ コンテナー内のタスク ログのスクリーンショット。

出力ファイル

Batch のプールとプール ノードは一時的であることが多く、ノードは継続的に追加および削除されるため、ジョブが実行されるときにはログ ファイルを保存することをお勧めします。 タスク出力ファイルは、ログ ファイルを Azure Storage に保存するための便利な方法です。 詳細については、「Persist task data to Azure Storage with the Batch service API (Batch サービス API を使用した Azure Storage へのタスクのデータの保持)」を参照してください。

各ファイルのアップロードのたびに、Batch は、fileuploadout.txtfileuploaderr.txt の 2 つのログ ファイルをコンピューティング ノードに書き出します。 特定のエラーの詳細について、これらのログ ファイルを確認することができます。 タスクそのものを実行できなかった場合など、ファイルのアップロードが試行されなかった場合には、これらのログ ファイルは存在しません。

次のステップ