AWS Batch のジョブステートを図解で説明してみた

AWS Batch のジョブステートを図解で説明してみた

Clock Icon2024.08.14

AWS Batch を利用しているとRUNNABLEなどのジョブステートがなんなのかわからなくなるときがきっと訪れることでしょう。本記事では、AWS Batch のジョブステートを図解で説明し、ついでにジョブのキャンセルと停止の違いについても解説します。

ジョブステートの概要

AWS Batch のジョブは、実行中に様々な状態(ステート)を遷移します。これらのステートを理解することで、ジョブの進行状況を把握し、トラブル時に適切に対応できます。細かいことは後にして全体の流れをおさえておきましょう。

AWS Batch job state 理解(4)

ジョブステートの遷移

以下の図は、ジョブをサブミット後、キューに登録されたジョブがたどる可能性のあるステートとその遷移を示しています。

AWS Batch job state 理解

各ステートの詳細説明

各ジョブステートの詳細な説明を以下に示します。これらの状態を理解することで、ジョブの現在の状況を正確に把握できます。文字が小さければ拡大か、画像保存してからご確認ください。

AWS Batch job state 理解(1)

補足

リトライ戦略について

ジョブが失敗した場合、AWS Batch はリトライ戦略に基づいて再実行を試みる設定ができます。

例えばキャパシティ不足でスポットインスタンスが停止し、中断されたジョブは FAILED になります。その後、自動的に RUNNABLE へステートを戻すことができます。RUNNABLE ステートではスポットインスタンスのキャパシティが空き次第、ジョブを再実行できます

AWS Batch job state 理解(3)

RUNNABLE 状態でスタックするとき

AWS Batch を利用しているとジョブが RUNNABLE で止まってしまい STARTINGへ遷移しなくて困った経験はないでしょうか。

AWS Batch job state (1)

スタックしてしまった場合、自動キャンセル設定が可能ですので必要に応じて検討してください。

https://dev.classmethod.jp/articles/aws-batch-alerts-detect-jobs-runnable-state/

ジョブのキャンセルと停止の違い

ジョブをキューに登録した後、実行を取り消したい場合、AWS Batch ではキャンセル停止の2つの操作が用意されています。

ジョブのキャンセル

ジョブのキャンセルは、待機中のジョブの実行を取り消す操作です。以下の図は、キャンセル操作の概要を示しています。

AWS Batch job state 理解(2)

AWS Batch job state 理解(6)

Jobs that progressed to the STARTING or RUNNING state aren't canceled. However, the API operation still succeeds, even if no job is canceled. These jobs must be terminated with the TerminateJob operation.
引用: CancelJob - AWS Batch

ジョブの停止

ジョブの停止は、待機中と実行中のジョブも含めて取り消す操作です。キャンセル操作より対象が広く、終了したジョブ以外はすべて取り消すことができます。以下の図は、停止操作の概要を示しています。

AWS Batch job state 理解(5)

停止操作の内部動作

停止操作の実態は Amazon ECS の StopTask API が実行され、以下のプロセスが行われます。

  1. 実行中のコンテナタスクに SIGTERM シグナルが送られる
  2. 30秒後もコンテナが起動中の場合、SIGKILL シグナルが送られ強制停止

待機中のジョブ(SUBMITTED, PENDING, RUNNABLE)に対しては、コンテナが起動前のため、実際にはキャンセル操作が行われます。

AWS Batch job state 理解(7)

キャンセルと停止の使い分け

停止操作がキャンセル操作の上位互換のように見えますが、使い分けについては AWS HPC ブログで以下のようなユースケースが紹介されています:

予算管理の観点から、新規ジョブの開始は防ぎたいが、既に投資されたリソースからの結果は取得したい場合、キャンセル操作を使用することで、実行中のジョブはそのままに、有用な結果を最大限得ることができます。

詳細はAWS HPC ブログを参照してください。

まとめ

AWS Batch のジョブステート遷移を理解することは、トラブルシュートするときには不可欠な要素です。本記事では、各ステートの詳細、リトライ戦略の重要性、そしてジョブのキャンセルと停止の違いについて解説しました。

おわりに

AWS Batch はフルマネージドな HPC サービスとして私は重宝しているのですが。まだまだ世の中に情報が少ないです。本記事が AWS Batch の理解を深める一助となれば幸いです。

参考資料

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.