[アップデート]Cloud Batchでジョブの実行をキャンセルできるようになりました

[アップデート]Cloud Batchでジョブの実行をキャンセルできるようになりました

Clock Icon2025.03.13

2025/3/10のアップデートで、プレビューだったBatchジョブのキャンセル機能がGAになりました。
https://cloud.google.com/batch/docs/cancel-job

いままではBatchのジョブを停止することができなかったため、開発時にテストで起動して途中で止めたい場合でも削除するか実行完了を待つしかありませんでした。
削除してしまうと、ジョブの詳細などがわからなくなってしまうためデバッグなどが若干大手間になるため停止する(キャンセルする)機能は私としては本当に欲しい機能でした。

せっかくGAになったのでBatchジョブのキャンセルを試してみたのでよかったら読んでみてください。

試してみる

使い方

gcloudコマンドかAPIでキャンセルできます。
https://cloud.google.com/batch/docs/cancel-job#cancel-job

今回はgcloudコマンドでキャンセルをしてみます。キャンセルのコマンドは以下となります。

gcloud batch jobs cancel ジョブ名 --location ジョブが作成されたリージョン

キャンセルを試すために、5分間待機するだけのスクリプトを用意しました。

#!/bin/bash

echo "5分待機します..."
sleep 300  # 300秒 (5分) 待機
echo "待機が完了しました。"

このスクリプトを実行するジョブを実行して、実行中にキャンセルして動作を観察してみます。

ジョブ作り

コンソールから作成してしまいます。コンソールから作成したジョブはdefault VPCに作成されるので注意が必要です。今回は検証のためだけなので気にせず作成しています。
バッチ > ジョブ > ジョブの作成で新しいジョブ作成画面を開き、新たしい実行可能物スクリプトを選択して作成したスクリプトを貼り付けます。
スクリーンショット 2025-03-13 20.16.57

上記以外のタスク数やマシンタイプなどは最低限のスペックで作成しています。作成したらジョブが実行されるのでキャンセルをしてみます。

キャンセルしてみる

ジョブが開始されるとステータスが キューに格納済みスケジュール設定済みの状態になります。少し待つと実行中に変わります。実行中に変わったらキャンセルコマンドを実行します。

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分程度かかっていました。
またキャンセルしたジョブをコンソールで見るとステータスは不明となっていました。
スクリーンショット 2025-03-13 20.05.04.png

ジョブリストではステータスは空欄となった状態で残っていました。
スクリーンショット 2025-03-13 20.08.07.png

また、ログやイベント履歴などはキャンセル完了後も問題なく確認することができました。
ステータスの表示などは今後変更されるかもしれませんね。

おわりに

派手なアップデートではないですが、キャンセルできるようになったことで開発時に楽になったなと思います。テストのジョブを作成して実行して、途中でプログラムのミスに気づいて止めたくなった時に削除しかできないのは地味にストレスに感じていたので。
なかなか嬉しいアップデートでした。

それではまた。ナマステー

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.