以下の内容はhttps://blog.g-gen.co.jp/entry/cloud-run-jobs-explainedより取得しました。


Cloud Run jobsを徹底解説!

記事タイトルとURLをコピーする

G-gen の佐々木です。当記事では Google Cloud(旧称 GCP)のサーバーレスなコンテナサービスである Cloud Run の提供形態の1つである Cloud Run jobs について解説します。

Cloud Run jobs とは

Cloud Run jobs とは、Google Cloud におけるサーバーレス コンテナコンピューティングサービスである Cloud Run の提供形態の1つです。

HTTPS リクエストをトリガーとして実行される Cloud Run services とは異なり、Cloud Run jobs は手動やスケジュール、ワークフローの一部など、任意のタイミングで実行されることを前提としているのが特徴です。

Cloud Run の詳細については以下の記事で解説しています。

blog.g-gen.co.jp

Cloud Run jobs のリソースモデル

Cloud Run Jobs はジョブ(job)、実行(execution)、タスク(task)という 3 つのリソースで構成されています。

Cloud Run jobs のリソースモデル

ジョブ(job)

Cloud Run jobs にコンテナをデプロイすると、ルートリソースである ジョブ(job)が作成されます。

ジョブには、コンテナイメージ、タスク数、並列実行数、CPU、メモリ量、環境変数などの設定が保持されます。

ジョブの実行がトリガーされると、設定に応じてタスクが作成されます。

実行(execution)

実行(execution)は、1回のジョブ実行を指します。ジョブが実行されると、指定したとおりにタスクが生成されます。

実行は、全てのタスクが完了した場合に成功とされます。

タスク(task)

タスク(task)は、ジョブで指定された数だけ作成されます。1つのタスクにつき1つのコンテナインスタンスが起動して処理を行います。つまり、1タスク = 1コンテナインスタンスです。

ジョブの設定内容に応じて、複数のタスクを並行で実行することができます。

タスクが失敗した場合、事前に指定した最大試行回数の範囲で再試行が行われます。最大試行回数を超過した場合、タスクは失敗になり、そのタスクを含んだ実行も失敗となります。

また、タスクにはタイムアウト(最大実行時間)を設定することができ、デフォルトで10分、最長168時間(7日間)に設定できます。ただし GPU を使用するタスクの最大実行時間は1時間です。なおタスクが再試行された場合、タイムアウトは各試行ごとに適用されます。

なお Cloud Run jobs のコンテナインスタンスは、Cloud Run 第2世代の実行環境を使用します。

Cloud Run jobs の特徴

Cloud Run services との違いに着目した場合、Cloud Run jobs の主な特徴は 3 つあります。

任意のタイミングでの実行

Cloud Run services ではサービスを作成すると HTTPS エンドポイントが生成され、HTTP リクエストをトリガーとしてコンテナが実行されます。

それに対して Cloud Run jobs では、HTTPS エンドポイントを使用しません。以下のいずれかのトリガーで、ユーザーの任意のタイミングでコンテナを実行することができます。

実行方法 説明
手動実行 コンソールや gcloud コマンド、Google Cloud APIs 経由でジョブを実行します。
gcloud コマンドを使用する場合 --execute-now オプションを指定することで、ジョブの作成後すぐに実行することが可能です。
Cloud Scheduler トリガー Cloud Scheduler で cron ジョブを設定し、スケジュールに従ってジョブを実行することができます。
Workflows トリガー サーバーレスのジョブ自動化サービスである Cloud Workflows で Cloud Run Admin API コネクタ を使用することで、ワークフローからジョブを実行することができます。

Cloud Scheduler、Cloud Workflows の詳細については、以下の記事も参照してください。

blog.g-gen.co.jp

blog.g-gen.co.jp

長時間の実行

タスクあたりの最大実行時間は、デフォルトで10分、最長で168時間(7日間)です。ただし、GPU を使用するタスクの場合は、最長1時間です。

なお、タスクには最大実行時間の制限がありますが、タスクの上位リソースであるジョブには最大実行時間には制限がありません。そのため、複数のタスクを直列で実行することで、より長時間の処理を実現することができます。

並列処理

リクエストの負荷に応じてコンテナインスタンスをスケーリングする Cloud Run services とは異なり、Cloud Run jobs では並列して実行するコンテナインスタンス(= タスク)の数を明示的に指定することができます。

並列実行される各タスクには整数値のインデックスが割り当てられ、環境変数 CLOUD_RUN_TASK_INDEX を参照することで、その値を使用することができます。

インデックスを利用することで、タスクごとにデータベースや CSV ファイル内の異なるデータを参照するような処理を実装することが可能です。

また、環境変数 CLOUD_RUN_TASK_ATTEMPT にはタスクの再試行回数が格納され、再試行されるたびに値が 1 増加します。再試行回数に応じた処理を実装する場合にこの値を利用することができます。

制限事項

Cloud Run jobs を使用する際に意識する必要がある制限事項を記載します。

コンピューティングリソース

タスクが実行するコンテナインスタンスに対して、割り当てる CPU 数・メモリ量を指定できます。

Cloud Run services 同様、CPU とメモリ量は、一方の値によってもう一方で設定できる値の範囲に制限があります。たとえば、CPU 数が 4 の場合、メモリ量は 2 GiB ~ 16 GiB の範囲で設定する必要があります。

項目 設定値
CPU 数 1・2・4・6・8
メモリ量 512 Mib・1 GiB・2 GiB・4 GiB・8 GiB・15 GiB・32 GiB
(カスタム設定として 512 Gib ~ 34 GiB の範囲で設定することも可能)

タスクの実行数と並列実行数

タスクは最大 10,000 個まで実行することができます。またタスクの並列で実行数の最大値は、ジョブを作成したリージョンと、コンテナインスタンスに割り当てた CPU 数・メモリ量に依存します。

リソースを多く持つリージョンではより多くのタスクを並列実行することができ、また CPU とメモリを多く割り当てる場合は、タスクの最大並列実行数が減少します。 デフォルトの設定では、可能な限り多くのタスクを並列実行するようになっています。

Cloud Run におけるコンテナインスタンスの最大実行数は、プロジェクト・リージョンごとに上限値が設定されており、Cloud Run jobs タスクで実行されるコンテナインスタンスと Cloud Run services で実行されるコンテナインスタンスは上限値を共有しているため、同じプロジェクト・リージョンで利用する場合は注意が必要です。

タスクのタイムアウト

タスクのタイムアウト(最長実行時間)は、デフォルトで10分間です。タイムアウトは秒単位で調整することができ、最長で168時間(7日間)に変更することが可能です。ただし、GPU を使用するタスクの場合、最長1時間です。

ジョブ設定で最大再試行回数が1以上に設定されている場合、タイムアウトは各試行回に適用されます。

なお、ジョブの実行中は、メンテナンスイベントにより、タスクを実行しているインスタンスが別のインスタンスに移行する可能性があります。メンテナンスは透過的に行われ、インスタンスの移行によってタスクの状態が失われることはありませんが、移行中は処理が短時間停止する可能性があります。

タスクの最大再試行回数

タスクの実行が失敗すると、設定した最大再試行回数だけ再試行されます。最大再試行回数のデフォルトは 3 回であり、0 ~ 10 の範囲で設定することが可能です。

VPC リソースとの接続

Cloud Run services 同様、Cloud SQL や Memorystore といった VPC に紐づくリソースに対してプライベートネットワーク経由で接続したい場合、サーバーレス VPC アクセスまたは Direct VPC Egress を使用します。

サーバーレス VPC アクセス と Direct VPC Egress については、以下の記事でも解説しています。

blog.g-gen.co.jp

料金

Cloud Run jobs の料金体系は、実行時間とその間に割り当てた CPU、メモリ量に応じた従量課金です。Cloud Run jobs では処理を行っているときだけ料金が発生します。us-central1 リージョンでの実行に限り、毎月の無料枠も用意されています。

Cloud Run jobs の料金単価は、Cloud Run services のインスタンスベースの課金と同じ料金単価になっています。

Batch との違い

Batch とは

Google Cloud 上でバッチ処理を行う場合のその他の選択肢として、Batch が挙げられます。

Batch は、マネージドな Compute Engine 仮想マシンを使用して大規模なバッチワークロードを実行できるプロダクトです。バッチジョブ作成時に記述したスクリプトをそのまま実行できるほか、Cloud Run jobs 同様、コンテナイメージを仮想マシンにデプロイして処理を行うこともできます。

以下の記事に Batch の概要、および Cloud Run jobs や Cloud Run functions との比較について記載があります。

blog.g-gen.co.jp

Cloud Run jobs を使用するケース

  • ジョブの実行時間が168時間(7日間)以内
  • 負荷の軽いジョブを安価に実行する
  • 処理をコンテナ化している、またはコンテナの可搬性を利用したい

Cloud Run jobs ではコンテナ化した処理を簡単に繰り返し実行できるため、実装の容易さや、プラットフォーム間の可搬性が利点です。

Batch と比較すると使用できるコンピュートリソースの上限は低くなっていますが、月ごとの無料枠を上手く利用することで、負荷の軽いジョブであればかなり安価に実行することができます。

Batch を使用するケース

  • ジョブの実行時間が168時間(7日間)以上
  • CPU、メモリを多く使用するジョブを実行する
  • オンプレミスや Compute Engine 仮想マシン上で実行していたバッチスクリプトを移行する

Batch ではジョブの実行時間に制限がないため、長時間のバッチ処理で利用します。また Compute Engine 仮想マシン上でジョブが実行されるため、Cloud Run jobs と比較して、より多くのコンピュートリソースを割り当てることができます。

さらに、Cloud Run jobs ではジョブをコンテナ化する必要があるのに対して、Batch ではスクリプトをそのまま使用できるため、少ない手間でバッチスクリプトをサーバーレスの実行基盤に移行することができます。

佐々木 駿太 (記事一覧)

G-gen 最北端、北海道在住のクラウドソリューション部エンジニア

2022年6月に G-gen にジョイン。Google Cloud Partner Top Engineer に選出(2024 / 2025 Fellow / 2026)。好きな Google Cloud プロダクトは Cloud Run。

趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。




以上の内容はhttps://blog.g-gen.co.jp/entry/cloud-run-jobs-explainedより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14