ジョブの作成

このページでは、既存のコンテナ イメージから Cloud Run ジョブを作成または更新する方法について説明します。リクエストをリッスンして対応する Cloud Run サービスとは異なり、Cloud Run ジョブはタスクを実行するだけで、完了すると終了します。ジョブはリクエストをリッスンすることも対応することもしません。

ジョブを作成または更新した後、次のことができます。

ジョブは、単一のタスクとしても、複数の独立したタスク(最大 10,000 個)としても構成でき、並列で処理できます。各タスクは 1 つのコンテナ インスタンスを実行し、障害発生時に再試行するように構成できます。各タスクはインデックスを認識します。インデックスは CLOUD_RUN_TASK_INDEX 環境変数に格納されます。タスクの総数は CLOUD_RUN_TASK_COUNT 環境変数に格納されます。データを並行して処理する場合は、どのタスクがデータのどのサブセットを処理するのかはコードによって判断されます。

タスクのタイムアウトを設定し、タスクが失敗した場合の再試行回数を指定できます。いずれかのタスクで再試行の最大数を超えると、そのタスクは「失敗」とマークされます。ジョブの実行は、すべてのタスクの実行後に「失敗」とマークされます。

デフォルトでは、各タスクは最大 10 分間実行されます。この時間を短くしたり、長くすることができます(最長 24 時間まで)。これを行うには、タスクのタイムアウト設定を変更します。

ジョブ実行には明示的なタイムアウトはありません。すべてのタスクが完了すると、ジョブ実行は完了します。

ジョブは第 2 世代の実行環境を使用します。

作成と実行に必要な IAM 権限

Cloud Run ジョブを使用するには、次のいずれかのロールが必要です。

  • ジョブを作成、更新、削除、実行するための完全な権限がある Cloud Run 管理者
  • ジョブを実行する Cloud Run の起動元
  • ジョブを一覧表示する Cloud Run 閲覧者

カスタムロールを構成する場合は、次の権限を使用します。

  • run.jobs.{create/update/run/delete/get/list/getIamPolicy/setIamPolicy}
  • run.executions.{get/list/delete}
  • run.tasks.{get/list}

run.jobs.run は、ユーザーがジョブを実行できるようにしてから新しい実行を開始します。個別の run.executions.create 権限はありません。実行を作成する唯一の方法はジョブの実行です。

サポートされているコンテナ レジストリとイメージ

Artifact RegistryContainer Registry非推奨)、Docker Hub に保存されているコンテナ イメージを使用できます。Google では Artifact Registry の使用をおすすめします。

次の種類のコンテナ イメージのみを使用できます。

Docker の公式イメージDocker が提供する OSS イメージなど、一般的なコンテナ イメージをデプロイする場合にのみ、Docker Hub の使用を検討してください。可用性を高めるには、これらの Docker Hub イメージを Artifact Registry リモート リポジトリ経由でデプロイすることをおすすめします。

別の種類のコンテナ レジストリにコンテナ イメージを保存する場合は、サポートされていないレジストリからイメージをデプロイするの手順に沿って操作してください。

新しいジョブを作成する

新しいジョブは、Google Cloud コンソール、Google Cloud CLI、YAML、または Terraform を使用して作成できます。

コンソール

新しいジョブを作成するには:

  1. Cloud Run に移動します

  2. [ジョブ] タブをクリックします。

  3. [ジョブを作成] をクリックして、[ジョブを作成] フォームを表示します。

    1. フォームで、ジョブコードを含むコンテナ イメージを指定するか、以前にデプロイしたコンテナのリストから選択します。
    2. ジョブ名は、コンテナ イメージから自動的に生成されます。必要に応じてジョブ名を編集または変更できます。ジョブの作成後にジョブ名を変更することはできません。
    3. ジョブを配置するリージョンを選択します。リージョン セレクタで、二酸化炭素排出の影響が最も低いリージョンがハイライト表示されます。
    4. ジョブで実行するタスクの数を指定します。ジョブが成功するには、すべてのタスクが成功する必要があります。デフォルトでは、タスクは並行して実行されます。
  4. [コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックして、追加のジョブ プロパティを設定します。

    • [タスクの容量] で、次のように設定します。
    1. [メモリ] プルダウン メニューで、必要なメモリ容量を指定します。デフォルトは 512 MiB です(これは必要最低限の値です)。
    2. [CPU] プルダウン メニューで、必要な CPU の量を指定します。デフォルトは 1 CPU です(これは必要最低限の値です)。
    3. [タスクのタイムアウト] で、タスクを実行できる最大時間を秒単位で指定します(最大 24 時間まで指定できます)。 各タスクは、この時間内に完了する必要があります。デフォルトは 10 分(600 秒)です。

    4. [失敗したタスクごとの再試行回数] で、タスクが失敗した場合の再試行回数を指定します。デフォルトの再試行回数は 3 です。

    • [並列処理] で、次の設定を行います。

      1. ほとんどの場合、[できる限り多くのタスクを同時実行する] を選択できます。
      2. ジョブがアクセスするリソースに対してスケーリングを制約することで、下限を設定する必要がある場合は、[同時タスクの数を制限する] を選択して、[並列処理のカスタム上限] テキストボックスに同時実行タスクの数を指定します。
  5. 必要に応じて、該当するタブで他の設定を行います。

  6. ジョブの構成が完了したら、[作成] をクリックして Cloud Run にジョブを作成します。

  7. ジョブを実行する方法については、ジョブを実行するまたはスケジュールに従ってジョブを実行するをご覧ください。

コマンドライン

コマンドラインを使用するには、gcloud CLI を設定しておく必要があります。

新しいジョブを作成するには:

  1. 次のコマンドを実行します。

    gcloud run jobs create JOB_NAME --image IMAGE_URL OPTIONS
    または、deploy コマンドを使用します。
    gcloud run jobs deploy JOB_NAME --image IMAGE_URL OPTIONS

    • JOB_NAME は、作成するジョブの名前に置き換えます。このパラメータは省略できますが、省略するとジョブ名の入力を求められます。
    • IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)に置き換えます。
    • 必要に応じて、OPTIONS を次のいずれかのオプションに置き換えます。

      オプション 説明
      --tasks 1 以上の整数を指定します。デフォルトは 1 です。最大値は 10,000 です。各タスクには環境変数 CLOUD_RUN_TASK_INDEX が提供されます。変数の最小値は 0、最大値はタスク数から 1 を引いた値です。CLOUD_RUN_TASK_COUNT はタスクの数です。
      --max-retries 失敗したタスクの再試行回数。この上限を超えてタスクが失敗すると、ジョブ全体が「失敗」としてマークされます。たとえば、1 に設定した場合、失敗したタスクは 1 回再試行され、合計で 2 回の試行が行われます。デフォルトは 3 です。0~10 の整数で指定します。
      --task-timeout 時間は 2s のように指定します。デフォルトは 10 分、最長は 24 時間です。
      --parallelism 並行して実行できるタスクの最大数。デフォルトでは、タスクは並列で開始されます。値の範囲については、並列処理をご覧ください。
      --execute-now 設定すると、ジョブが作成された直後にジョブ実行が開始されます。これは gcloud run jobs create の後に gcloud run jobs execute を呼び出す場合と同じです。

      上記のオプションに加えて、環境変数やメモリ制限など、追加の構成を指定することもできます。

      ジョブの作成時に使用可能なオプションの一覧については、gcloud run jobs create コマンドライン ドキュメントをご覧ください。

  2. ジョブの作成が完了するまで待ちます。完了すると、成功を示すメッセージが表示されます。

  3. ジョブを実行する方法については、ジョブを実行するまたはスケジュールに従ってジョブを実行するをご覧ください。

YAML

ジョブ仕様を YAML ファイルに保管してから、gcloud CLI を使用してデプロイできます。

  1. この内容で job.yaml ファイルを新規作成します。

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE

    次のように置き換えます。

    • JOB: Cloud Run ジョブの名前。ジョブ名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
    • IMAGE: ジョブ コンテナ イメージの URL。

    環境変数やメモリ上限など他の構成を指定することもできます。

  2. 次のコマンドを使用して、新しいジョブをデプロイします。

    gcloud run jobs replace job.yaml

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

新しい Cloud Run ジョブを作成するには、google_cloud_run_v2_job リソースを使用して、次のスニペットに示すように main.tf ファイルを変更します。

resource "google_cloud_run_v2_job" "default" {
  provider     = google-beta
  name         = "cloud-run-job"
  location     = "us-central1"
  launch_stage = "BETA"

  template {
    template {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

クライアント ライブラリ

コードからジョブを作成するには:

REST API

ジョブを作成するには、Cloud Run Admin API の jobs エンドポイントPOST HTTP リクエストを送信します。

curl の使用例を次に示します。

curl -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -X POST \
  -d '{template: {template: {containers: [{image: "IMAGE_URL"}]}}}' \
  https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobs?jobId=JOB_NAME

次のように置き換えます。

  • ACCESS_TOKEN は、ジョブを作成するための IAM 権限を持つアカウントの有効なアクセス トークンに置き換えます。たとえば、gcloud にログインしている場合は、gcloud auth print-access-token を使用してアクセス トークンを取得できます。Cloud Run コンテナ インスタンスから、コンテナ インスタンス メタデータ サーバーを使用してアクセス トークンを取得できます。
  • JOB_NAME は、作成するジョブの名前に置き換えます。
  • IMAGE_URL は、ジョブ コンテナ イメージの URL に置き換えます(例: us-docker.pkg.dev/cloudrun/container/job:latest)。
  • REGION は、ジョブの Google Cloud リージョンに置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。

Cloud Run のロケーション

Cloud Run はリージョナルです。つまり、Cloud Run サービスを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

レイテンシ、可用性、耐久性の要件を満たしていることが、Cloud Run サービスを実行するリージョンを選択する際の主な判断材料になります。一般的には、ユーザーに最も近いリージョンを選択できますが、Cloud Run サービスで使用されている他の Google Cloud サービスのロケーションも考慮する必要があります。使用する Google Cloud サービスが複数のロケーションにまたがっていると、サービスの料金だけでなくレイテンシにも影響することがあります。

Cloud Run は、次のリージョンで利用できます。

ティア 1 料金を適用

  • asia-east1(台湾)
  • asia-northeast1(東京)
  • asia-northeast2(大阪)
  • europe-north1(フィンランド) リーフアイコン 低 CO2
  • europe-southwest1(マドリッド)
  • europe-west1(ベルギー) リーフアイコン 低 CO2
  • europe-west4(オランダ)
  • europe-west8(ミラノ)
  • europe-west9(パリ) リーフアイコン 低 CO2
  • me-west1(テルアビブ)
  • us-central1(アイオワ) リーフアイコン 低 CO2
  • us-east1(サウスカロライナ)
  • us-east4(北バージニア)
  • us-east5(コロンバス)
  • us-south1(ダラス)
  • us-west1(オレゴン) リーフアイコン 低 CO2

ティア 2 料金を適用

  • africa-south1(ヨハネスブルグ)
  • asia-east2(香港)
  • asia-northeast3(ソウル、韓国)
  • asia-southeast1(シンガポール)
  • asia-southeast2 (ジャカルタ)
  • asia-south1(ムンバイ、インド)
  • asia-south2(デリー、インド)
  • australia-southeast1(シドニー)
  • australia-southeast2(メルボルン)
  • europe-central2(ワルシャワ、ポーランド)
  • europe-west10(ベルリン)
  • europe-west12(トリノ)
  • europe-west2(ロンドン、イギリス) リーフアイコン 低 CO2
  • europe-west3(フランクフルト、ドイツ) リーフアイコン 低 CO2
  • europe-west6(チューリッヒ、スイス) リーフアイコン 低 CO2
  • me-central1(ドーハ)
  • me-central2(ダンマーム)
  • northamerica-northeast1(モントリオール) リーフアイコン 低 CO2
  • northamerica-northeast2(トロント) リーフアイコン 低 CO2
  • southamerica-east1(サンパウロ、ブラジル) リーフアイコン 低 CO2
  • southamerica-west1(サンティアゴ、チリ) リーフアイコン 低 CO2
  • us-west2(ロサンゼルス)
  • us-west3(ソルトレイクシティ)
  • us-west4(ラスベガス)

Cloud Run サービスをすでに作成している場合は、Google Cloud コンソールの Cloud Run ダッシュボードにリージョンが表示されます。

新しいジョブを作成する場合、Cloud Run サービス エージェントはコンテナにアクセスする必要があります(これがデフォルトです)。

既存のジョブを更新する

構成を変更すると、コンテナ イメージに変更がない場合でも、ジョブを更新する必要があります。変更されていない設定については、以前の設定が引き続き使用されることに注意してください。

既存のジョブは、Google Cloud コンソール、Google Cloud CLI、YAML、または Terraform で更新できます。

コンソール

既存のジョブを更新するには:

  1. Cloud Run に移動します

  2. [ジョブ] タブをクリックして、ジョブのリストを表示します。

  3. ジョブをクリックして、[ジョブの詳細] ページを表示します。

  4. [編集] をクリックします。

  5. ジョブコードを変更した場合は、新しいコンテナのイメージ ダイジェストを指定します。

  6. 必要に応じて、ジョブに含まれるタスクの数を変更します。

  7. 必要に応じて、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックして、追加のジョブ プロパティを更新します。

    • [タスクの容量] で、次のように設定します。
    1. [メモリ] プルダウン メニューで、必要なメモリ容量を指定します。デフォルトは 512 MiB です(これは必要最低限の値です)。
    2. [CPU] プルダウン メニューで、必要な CPU の量を指定します。デフォルトは 1 CPU です(これは必要最低限の値です)。
    3. [タスクのタイムアウト] で、タスクを実行できる最大時間を秒単位で指定します(最大 24 時間まで指定できます)。各タスクは、この時間内に完了する必要があります。デフォルトは 10 分(600 秒)です。
    4. [失敗したタスクごとの再試行回数] で、タスクが失敗した場合の再試行回数を指定します。デフォルトの再試行回数は 3 です。
    • [並列処理] で、次の設定を行います。

      1. ほとんどの場合、[できる限り多くのタスクを同時実行する] を選択できます。
      2. ジョブがアクセスするリソースに対してスケーリングを制約することで、下限を設定する必要がある場合は、[同時タスクの数を制限する] を選択して、[並列処理のカスタム上限] テキストボックスに同時実行タスクの数を指定します。
  8. 必要に応じて、該当するタブで他の設定を行います。

  9. ジョブの構成が完了したら、[保存] をクリックして Cloud Run にジョブを作成し、ジョブの作成が完了するまで待ちます。

  10. ジョブを実行する方法については、ジョブを実行するまたはスケジュールに従ってジョブを実行するをご覧ください。

コマンドライン

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. 次のコマンドを実行します。

    gcloud run jobs update JOB_NAME

    次のように置き換えます。

    • JOB_NAME: 更新するジョブの名前。
    • 必要に応じて、OPTIONS を次のオプションに置き換えます。

      オプション 説明
      --tasks 1 以上の整数を指定します。デフォルトは 1 です。最大値は 10,000 です。各タスクには環境変数 CLOUD_RUN_TASK_INDEX が提供されます。変数の最小値は 0、最大値はタスク数から 1 を引いた値です。CLOUD_RUN_TASK_COUNT はタスクの数です。
      --max-retries 失敗したタスクの再試行回数。この上限を超えてタスクが失敗すると、ジョブ全体が「失敗」としてマークされます。たとえば、1 に設定した場合、失敗したタスクは 1 回再試行され、合計で 2 回の試行が行われます。デフォルトは 3 です。0~10 の整数で指定します。
      --task-timeout 時間は 2s のように指定します。デフォルトは 10 分、最長は 24 時間です。
      --parallelism 並行して実行できるタスクの最大数。デフォルトでは、タスクはすぐに並列で開始されます。値の範囲については、並列処理をご覧ください。

    上記のオプションに加えて、他のオプション構成も設定できます。

    ジョブの作成時に使用可能なオプションの一覧については、gcloud run jobs create コマンドライン ドキュメントをご覧ください。

  3. ジョブの更新が完了するまで待ちます。正常に完了すると、次のような成功メッセージが表示されます。

    Job [JOB_NAME] has been successfully updated.
    View details about this job by running `gcloud run jobs describe JOB_NAME`.
    See logs for this execution at: https://console.cloud.google.com/logs/viewer?project=PROJECT_ID&resource=cloud_run_revision/service_name/JOB_NAME
    
  4. ジョブを実行する方法については、ジョブを実行するまたはスケジュールに従ってジョブを実行するをご覧ください。

YAML

既存のジョブの構成をダウンロードや表示する場合は、次のコマンドを使用して結果を YAML ファイルに保存します。

gcloud run jobs describe JOB --format export > job.yaml

ジョブ構成の YAML ファイルから、必要に応じて spec.template 子属性を変更して構成設定を更新し、再デプロイします。

  1. 既存のジョブ構成を更新します。

    gcloud run jobs replace job.yaml
  2. ジョブを実行する方法については、ジョブを実行するまたはスケジュールに従ってジョブを実行するをご覧ください。

Terraform

terraform apply コマンドを使用して、main.tf ファイル内のジョブ構成を変更します。Terraform の詳細な手順については、以下をご覧ください。

詳しくは、terraform apply コマンドライン オプションをご覧ください。

クライアント ライブラリ

コードから既存のジョブを更新するには:

REST API

ジョブを更新するには、Cloud Run Admin API の jobs エンドポイントPATCH HTTP リクエストを送信します。

curl の使用例を次に示します。

curl -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -X PATCH \
  -d '{template: {template: {containers: [{image: "IMAGE_URL"}]}}}' \
  https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobs/JOB_NAME

次のように置き換えます。

  • ACCESS_TOKEN は、ジョブを更新する IAM 権限を持つアカウントの有効なアクセス トークンに置き換えます。たとえば、gcloud にログインしている場合は、gcloud auth print-access-token を使用してアクセス トークンを取得できます。Cloud Run コンテナ インスタンスから、コンテナ インスタンス メタデータ サーバーを使用してアクセス トークンを取得できます。
  • JOB_NAME は、更新するジョブの名前に置き換えます。
  • IMAGE_URL は、ジョブ コンテナ イメージの URL に置き換えます(例: us-docker.pkg.dev/cloudrun/container/job:latest)。
  • REGION は、ジョブの Google Cloud リージョンに置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。

サンプルコード

単純なジョブのコードサンプルについては、言語固有のクイックスタートをご覧ください。

次のステップ

ジョブを作成または更新したら、次の操作を行うことができます。