ジョブキュー内の RUNNABLE 状態にある AWS Batch ジョブをすべてキャンセルまたは終了したい。
簡単な説明
AWS マネジメントコンソールでは、ジョブキューから一度に 1 つの AWS Batch ジョブをキャンセルまたは終了できます。キューから複数の AWS Batch ジョブをキャンセルまたは終了するには、AWS コマンドラインインターフェイス (AWS CLI) または AWS Tools for PowerShell を使用します。
ジョブキュー内の RUNNABLE 状態にあるジョブをすべてキャンセルするには、CancelJob API または TerminateJob API のいずれかを使用します。
解決策
CancelJob API または TerminateJob API を使用して、以下の状態にあるすべてのジョブをキャンセルします。
- SUBMITTED
- PENDING
- RUNNABLE
- STARTING
ただし、TerminateJob は、RUNNING 状態にあるすべてのジョブもキャンセルします。状況に最も適した API を使用してください。詳細については、「TerminateJob」と「CancelJob」を参照してください。
これらのコマンドのいずれかを実行する前に、$myJOBQueue 環境変数をジョブキューの名前に設定します。
Linux
export myJOBQueue="job-queue-name"
PowerShell
$myJOBQueue="job-queue-name"
**注:**AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI または AWS Tools for PowerShell を使用していることを確認してください。
(オプション) キュー内のすべての RUNNABLE ジョブを表示する
ジョブキュー内の RUNNABLE 状態のすべてのジョブのリストを返すには、次のように list-jobs コマンドを実行します。
aws batch list-jobs --job-queue $myJOBQueue --job-status runnable --output text --query "jobSummaryList[*].[jobId]"
PowerShell の場合は、次のコマンドを使用します。
Get-BATJobList -JobQueue $myJOBQueue -JobStatus RUNNABLE | select -ExpandProperty jobid
次の出力例には、RUNNABLE 状態の 3 つのジョブが含まれています。
0cffddb0-8bfa-4ba4-86ba-c5cad59e4529
884d8bdf-6192-4d4c-ac85-c51093460a01
236670e3-127a-4fe1-afd6-3f21cf1fe02e
CancelJob API を使用してジョブをキャンセルする
ジョブキュー内の RUNNABLE 状態の AWS Batch ジョブをすべてキャンセルするには、次のように bash スクリプトを実行します。
for i in $(aws batch list-jobs --job-queue $myJOBQueue --job-status runnable --output text --query "jobSummaryList[*].[jobId]")
do
echo "Cancel Job: $i"
aws batch cancel-job --job-id $i --reason "Cancelling job."
echo "Job $i canceled"
done
PowerShell の場合は、次のスクリプトを使用します。
Foreach ($I in Get-BATJobList -JobQueue $myJOBQueue -JobStatus RUNNABLE | select -ExpandProperty jobid) {
echo "Cancel job $I"
Stop-BATJob -JobId $I -Reason "Cancelling job."
}
TerminateJob API を使用してジョブを終了する
すべての RUNNING ジョブを含め、ジョブキュー内のすべてのジョブを終了するには、次のように bash スクリプトを実行します。
for state in SUBMITTED PENDING RUNNABLE STARTING RUNNING
do
for job in $(aws batch list-jobs --job-queue $myJOBQueue --job-status $state --output text --query "jobSummaryList[*].[jobId]")
do
echo "Stopping job $job in state $state"
aws batch terminate-job --reason "Terminating job." --job-id $job
done
done
PowerShell の場合は、次のスクリプトを実行します。
Foreach ($STATE in "SUBMITTED","PENDING","RUNNABLE","STARTING","RUNNING") {
Foreach ($I in Get-BATJobList -JobQueue $myJOBQueue -JobStatus $STATE | select -ExpandProperty jobid) {
echo "Stopping job $I in state $STATE"
Remove-BATJob -JobId $I -Reason "Terminating job." -Force
}
}