概要
- 第2世代のCloud Run上で特定の処理を実行できる
- リクエストのリッスンなどは不要で、処理実行時はパラメータの入力も受け付けず、事前に実装した処理が実行されるのみ
- 直列/並列処理が可能
ユースケース
- ジョブはタスクを実行するだけなので、ユースケースとしては主にバッチ処理など
構成
ジョブ(=アプリケーション)
- エグゼキューション(タスク全体を管理) → タスク(1タスクにつき1インスタンス。ジョブで定義した並行処理に応じて増減する)
Batchとの使い分け
- バッチ処理を行う場合のGoogle Cloud上のサービスのその他の選択肢としてBatch が挙げられる
- Batchはジョブの実行時間に制限がないため、ジョブの実行時間が1時間以上で、CPUやメモリを多く使用する、またはGPUを使用するジョブを実行するようなケースに向いている
- Cloud Runジョブはジョブの実行時間が1時間以内で負荷の軽いジョブを低コストで実行するケースに向いている
Cloud Run(サービス)とCloud Run(ジョブ)の違い
Cloud Run(サービス)
指定ポートでリクエストをリッスンして(もしくはイベントの通知を受けて)インスタンスを起動して処理を捌く
Cloud Run(ジョブ)
- タスクを実行するだけで、完了すると終了する
- ジョブが正常に完了したときに、コンテナは終了コード0で終了し、失敗した場合は、ゼロ以外の終了コードで終了する必要がある
- ジョブはリクエストを処理しないため、コンテナでポートのリッスンや、ウェブサーバーの起動は行ってはいけない
CPU
デフォルトでは、Cloud Runコンテナインスタンスは1つのCPUに制限されている。最大8つ
料金
- Cloud Run jobsの料金設定は、CPU を常に割り当てる Cloud Run service と共通 (参考:東京リージョンの場合の料金)。
- CPUを常に割り当てるCloudRunサービスと異なり、処理を行っているときだけ料金が発生するので、処理の内容によってはかなり安価で利用することができる
並列処理
概要
- 複数タスクの同時実行による並列処理が可能(最大タスク数は10,000個)
- 例えばタスク数を6、並列数を6とした場合、タスクは6つ同時に並行して実行される
- デフォルトの設定では、可能な限り多くのタスクを並列実行するようになっている
設定方法
- コンソールの設定画面から並列処理→同時に実行されるタスクの最大数
- スケーリングを制約するには、[同時タスクの数を制限する] を選択して、[並列処理のカスタム上限] テキストボックスに同時実行タスクの数を指定する
ジョブの実行時間
- タスクの最大実行時間を設定可能
- 1タスクあたりのデフォルトの最長実行時間は10分(10分以上かかる処理は不可)。10分を超過した場合にタイムアウトとなり、タスクが再試行される
- タイムアウトの時間は秒単位で調整することができ、最長で86400秒(24時間)に変更することが可能
- 各タスクは、この時間内に完了する必要がある
- タスクがタイムアウトした場合はジョブで指定した数だけ再試行され、いずれかのタスクの再試行が指定された回数を超過した場合、そのタスクは失敗とされ、エグゼキューション全体が失敗となる
- タイムアウトのデフォルトは3回であり、0~10の範囲で設定することが可能。最大再試行回数を超過したタスクがあった場合、ジョブの実行は失敗となる。
ビルド
- これはCloud Runと同様にDockerイメージをビルドする
- Cloud Runではサーバーを起動するのに対し、Cloud Run Jobsではサーバー起動ではなく、特定のファイルを実行する
CMD ["python", "main.py"]
デプロイ
Cloud Runサービスと同様にCloud Buildで継続的デプロイが可能。デプロイコマンドは以下の通り
gcloud run jobs deploy ・・・
トリガー
手動
- コンソールや gcloud コマンド、Google Cloud APIs 経由でジョブを実行可能
- gcloudコマンドを使用する場合--execute-nowオプションを指定することで、ジョブの作成後すぐに実行することが可能
- ジョブの実行時にジョブに構成されている引数、環境変数、タスク数、タスクのタイムアウトをオーバーライドして手動実行することも可能(ジョブの詳細→編集→オーバーライドを使用して実行)
Cloud Scheduler トリガー
Cloud Schedulerでcronジョブを設定し、スケジュールに従ってジョブを実行することが可能
Workflows トリガー
サーバーレスのジョブ自動化サービスであるCloudWorkflowsでCloudRunAdminAPIコネクタを使用することで、ワークフローからジョブを実行することが可能
ジョブの作成
- コンテナイメージを指定(一番最初はコンテナ イメージが存在していないはずなので、適当に選択する)
- ジョブ名を指定
- リージョンを指定
- タスク数を指定
- 全般タブでタイムアウトの時間と再試行回数を設定
- 変数とシークレットタブで環境変数やシークレット変数を指定
- DBを使用する必要があれば、接続タブで接続したいCloud SQLインスタンスを指定
- セキュリティタブで権限があるサービスアカウントを指定まとめ
いかがでしたでしょうか。本記事では、Cloud Runを実務でしっかり運用するために押さえておきたい内容を解説しました。具体的にはCloud Runの特徴、ユースケース、Cloud Functionsとの違い、料金体系、CI/CDとの連携方法など実務で利用する上で必須の内容を中心に説明していますので、ぜひ参考にしてみてください