![[アップデート]Cloud Batchでジョブの実行をキャンセルできるようになりました](https://devio2024-media.developers.io/image/upload/v1741864547/user-gen-eyecatch/gmngbqvrxo2qqu1w3g07.png)
[アップデート]Cloud Batchでジョブの実行をキャンセルできるようになりました
2025/3/10のアップデートで、プレビューだったBatchジョブのキャンセル機能がGAになりました。
いままではBatchのジョブを停止することができなかったため、開発時にテストで起動して途中で止めたい場合でも削除するか実行完了を待つしかありませんでした。
削除してしまうと、ジョブの詳細などがわからなくなってしまうためデバッグなどが若干大手間になるため停止する(キャンセルする)機能は私としては本当に欲しい機能でした。
せっかくGAになったのでBatchジョブのキャンセルを試してみたのでよかったら読んでみてください。
試してみる
使い方
gcloudコマンドかAPIでキャンセルできます。
今回はgcloudコマンドでキャンセルをしてみます。キャンセルのコマンドは以下となります。
gcloud batch jobs cancel ジョブ名 --location ジョブが作成されたリージョン
キャンセルを試すために、5分間待機するだけのスクリプトを用意しました。
#!/bin/bash
echo "5分待機します..."
sleep 300 # 300秒 (5分) 待機
echo "待機が完了しました。"
このスクリプトを実行するジョブを実行して、実行中にキャンセルして動作を観察してみます。
ジョブ作り
コンソールから作成してしまいます。コンソールから作成したジョブはdefault VPCに作成されるので注意が必要です。今回は検証のためだけなので気にせず作成しています。
バッチ
> ジョブ
> ジョブの作成
で新しいジョブ作成画面を開き、新たしい実行可能物
でスクリプト
を選択して作成したスクリプトを貼り付けます。
上記以外のタスク数やマシンタイプなどは最低限のスペックで作成しています。作成したらジョブが実行されるのでキャンセルをしてみます。
キャンセルしてみる
ジョブが開始されるとステータスが キューに格納済み
やスケジュール設定済み
の状態になります。少し待つと実行中
に変わります。実行中
に変わったらキャンセルコマンドを実行します。
gcloud batch jobs cancel cancell-test-1 --location us-central1
実行した出力としては以下となりました。
$ gcloud batch jobs cancel cancell-test-1 --location us-central1
Job projects/プロジェクト名/locations/us-central1/jobs/cancell-test-1 cancellation is in progress
done: false
metadata:
'@type': type.googleapis.com/google.cloud.batch.v1.OperationMetadata
apiVersion: v1
createTime: '2025-03-13T10:55:51.830160161Z'
requestedCancellation: false
target: projects/プロジェクト名/locations/us-central1/jobs/cancell-test-1
verb: update
name: projects/プロジェクト名/locations/us-central1/operations/operation-1741863351786-630372a549aa5-f85ae217-2386ee77
ジョブの詳細をdescribe
コマンドでみてみます。以下はdescribe
コマンドの抜粋で、ジョブのステータスの遷移です。
state: CANCELLED
statusEvents:
- description: Job state is set from QUEUED to SCHEDULED for job projects/プロジェクト/locations/us-central1/jobs/cancell-test-1.
eventTime: '2025-03-13T10:51:32.717209615Z'
type: STATUS_CHANGED
- description: Job state is set from SCHEDULED to RUNNING for job projects/プロジェクト番号/locations/us-central1/jobs/cancell-test-1.
eventTime: '2025-03-13T10:52:51.732630390Z'
type: STATUS_CHANGED
- description: Job state is set from RUNNING to CANCELLATION_IN_PROGRESS for job
projects/プロジェクト番号/locations/us-central1/jobs/cancell-test-1.
eventTime: '2025-03-13T10:55:51.801154740Z'
type: STATUS_CHANGED
- description: Job state is set from CANCELLATION_IN_PROGRESS to CANCELLED for job
projects/プロジェクト番号/locations/us-central1/jobs/cancell-test-1.
eventTime: '2025-03-13T10:57:35.814376926Z'
type: STATUS_CHANGED
上記を表にすると以下となります。
状態変更 | 説明 | JST時刻 |
---|---|---|
QUEUED → SCHEDULED | ジョブがキューからスケジュールされた状態に変更 | 2025-03-13 19:51:32 JST |
SCHEDULED → RUNNING | ジョブがスケジュールされた状態から実行中に変更 | 2025-03-13 19:52:51 JST |
RUNNING → CANCELLATION_IN_PROGRESS | ジョブのキャンセル処理が開始 | 2025-03-13 19:55:51 JST |
CANCELLATION_IN_PROGRESS → CANCELLED | ジョブのキャンセル完了 | 2025-03-13 19:57:35 JST |
ジョブの状態遷移や最終的にキャンセル状態となっていることがわかります。
時刻を見ると、キャンセル処理をしてからキャンセル完了までは1分程度かかっていました。
またキャンセルしたジョブをコンソールで見るとステータスは不明
となっていました。
ジョブリストではステータスは空欄となった状態で残っていました。
また、ログやイベント履歴などはキャンセル完了後も問題なく確認することができました。
ステータスの表示などは今後変更されるかもしれませんね。
おわりに
派手なアップデートではないですが、キャンセルできるようになったことで開発時に楽になったなと思います。テストのジョブを作成して実行して、途中でプログラムのミスに気づいて止めたくなった時に削除しかできないのは地味にストレスに感じていたので。
なかなか嬉しいアップデートでした。
それではまた。ナマステー