この Codelab について
1. はじめに
最終更新日: 2022 年 5 月 16 日
Cloud Run ジョブ
Cloud Run ジョブを使用すると、Cloud Run で長時間実行ジョブを実行できます。
この Codelab は情報提供のみを目的としており、Cloud Run ジョブを使用するタイミングと方法に関する情報を提供します。この Codelab では、Google Cloud コンソールを使用してコンテナを作成し、Cloud Run ジョブの作成と実行、ジョブの更新とスケジュールを実際に体験し、Codelab の「Cloud Run ジョブを使ってみる」に取り組みます。
学習内容
- Cloud Run ジョブとは
- Cloud Run ジョブを使用するタイミング
- Cloud Run ジョブ ワークフロー
- Cloud Run ジョブの作成方法
- Cloud Run ジョブを実行する方法
- スケジュールに従ってジョブを実行する方法
- 実行ステータスを表示する方法
- ジョブとジョブ実行を管理する方法
- ジョブの完了を検出する方法
- ジョブを更新する方法
最初は、Cloud Run ジョブは europe-west9 リージョンでのみ使用できます。
2. Cloud Run ジョブの概要
Cloud Run でコードを実行する方法は 2 つあります。これをサービスとして継続的に実行できますが
また、コードが作業を実行した後に停止する場合は、Cloud Run ジョブを使用できます。
Cloud Run サービスは、無期限に実行され HTTP リクエストをリッスンするコンテナに適していますが、Cloud Run ジョブは、完了まで実行され、リクエストを処理しないコンテナ(データ処理や管理ジョブなど)に適しています。
Cloud Run ジョブのその他のユースケース:
- データベース移行などの運用タスクを実行するスクリプトの実行。
- Cloud Storage バケット内のすべてのファイルの高度な並列処理。
- 毎月請求書を作成して送信する。
- 4 時間ごとに、データベース クエリの結果を XML として保存し、ファイルをアップロードします。
Cloud Run ジョブは、長時間実行ジョブをサポートする他のプラットフォームと比較して、作成後すぐに開始されます。シンプルなコンテナは、コンテナの複雑さにもよりますが、10 秒ほどで起動できます。このため、Cloud Run ジョブは、VM の起動を数分待つことが問題となる状況に適しています。
3. Cloud Run ジョブ ワークフロー
Cloud Run ジョブのワークフローは、次の 2 つのステップで構成されています。
- ジョブを作成します。ジョブは、コンテナ イメージなど、ジョブを実行するために必要なすべての構成をカプセル化します。
- ジョブを実行する。Cloud コンソールまたは gcloud CLI を使用して、コマンドラインからジョブを実行します。
ジョブは、コードを実行するために 1 つのコンテナ インスタンスを起動できます。または、実行するタスクの数を指定して、同一の独立したコンテナ インスタンスを複数起動することもできます。たとえば、Cloud Storage から 1,000 枚の画像を読み取ってサイズ変更や切り抜きを行う場合、連続して処理する方が、多くのコンテナ インスタンスで同時に処理する場合より時間がかかります。
4. ジョブを作成します
ジョブを作成するには、Cloud コンソールまたは gcloud CLI で次のコマンドを使用します。
gcloud beta run jobs create JOB_NAME --image IMAGE_URL --region europe-west9 OPTIONS
次のように置き換えます。
JOB_NAME
は、作成するジョブの名前に置き換えます。IMAGE_URL
は、コンテナ イメージへの参照に置き換えます。- 必要に応じて、
OPTIONS
を使用可能なフラグに置き換えます。フラグの完全なリストを確認するには、gcloud beta run jobs create --help
を実行します。
フラグの例を以下に示します。
--tasks
: 実行するタスクの数。-–max retries
: 失敗したタスクが再試行される回数。--parallelism
: 並行して実行できるタスクの最大数。--execute-now
: ジョブが作成された直後に実行します。--async
: 新しい実行を作成した直後にジョブを終了します。
通常の Cloud Run 機能を使用して Cloud Run ジョブを保護し、Google Cloud Platform(GCP)環境の他の部分に接続することもできます。
5. ジョブの実行
ジョブを実行するには、Cloud コンソールまたは gcloud CLI で次のコマンドを使用します。
- Cloud コンソールでジョブ名をクリックし、ページの上部にある [実行] をクリックします。
- gcloud CLI で、次のコマンドを使用します。
gcloud beta run jobs execute JOB_NAME --region europe-west9 EXECUTION_OPTIONS
JOB_NAME
は、ジョブの名前に置き換えます。必要に応じて、EXECUTION_OPTIONS
を置き換えて以下を指定します。
- ジョブの作成後、即時にジョブを実行します。
gcloud beta run jobs create JOB_NAME --region europe-west9 --execute-now
- 実行が完了するまで待機してから終了する場合。
gcloud beta run jobs create JOB_NAME --region europe-west9 --wait
- 新しい実行を作成した後すぐに終了する場合。
gcloud beta run jobs create JOB_NAME --region europe-west9 --async
6. スケジュールに従ってジョブを実行する
スケジュールに従ってジョブを実行する場合は、Cloud Scheduler を使用します。
たとえば、請求書を定期的に作成して送信することや、データベース クエリの結果を XML として保存し、ファイルを数時間ごとにアップロードすることなどが考えられます。
Cloud Scheduler を使用すると、ジョブのスケジューリングとすべての自動化タスクを 1 か所で管理できます。
- バッチジョブとビッグデータ ジョブを毎週、毎日、毎時間同時に実行し、確実な実行と障害発生時の再試行を行います。
- クラウド インフラストラクチャの運用に関連する面倒なタスクの多くを、信頼性の高いフルマネージド方式で自動化します。
- ほぼすべての業務を自動化
- 単一の UI またはコマンドライン インターフェースから、すべてのジョブを表示、管理できます。
プロジェクトで Cloud Scheduler を使用できるように環境を設定したら、Cloud Run ジョブを作成し、名前、リージョン、説明、頻度、タイムゾーンを入力してスケジュールを定義します。Cloud Scheduler は、指定した頻度で Cloud Run ジョブを実行します。
7. ジョブ実行ステータスを表示する
ジョブの実行後、Cloud Logging のログでログを表示し、Cloud Monitoring でモニタリング データを確認できます。
ログを表示するには、次の方法があります。
- Cloud Console で Cloud Run ページを使用する。
- Cloud Console で Cloud Logging のログ エクスプローラを使用します。
どちらの表示方法でも、Cloud Logging に保存されている同じログを調べることができますが、Cloud Logging のログ エクスプローラでは、より詳細な情報が表示されます。また、より高度なフィルタ機能を使用できます。
Cloud Monitoring は、Cloud Run のパフォーマンス モニタリングと指標に加え、特定の指標のしきい値を超えたときに通知を送信するアラートを提供します。Cloud Run は Cloud Monitoring と自動的に統合されます。設定や構成の必要はありません。つまり、Cloud Run ジョブの指標は実行中に自動的に取得されます。
指標は、Cloud Monitoring またはコンソールの Cloud Run ページで確認できます。Cloud Monitoring では、グラフとフィルタのオプションがより充実しています。
8. ジョブとジョブ実行を管理する
ジョブを管理するには、Cloud コンソールまたは gcloud CLI を使用して、次のリストを表示します。
次の機能もご利用いただけます。
- 実行中のジョブを削除して停止します。
- 実行されていないジョブ実行を削除します。
- 求人を削除します。
ジョブを削除すると、そのジョブの保留中のジョブ実行はすべてキャンセルされますが、ジョブのログとモニタリング データは、残りのログ保持期間(通常は 30 日間)は引き続き利用できます。データ モニタリングは Cloud Monitoring で引き続き使用できます。
9. ジョブ実行の完了を検出する
ジョブの実行が終了したことを検出するには、いくつかの方法があります。
--wait
フラグを使用してジョブを実行すると、ジョブが完了すると gcloud CLI が終了します。
gcloud beta run jobs execute JOB_NAME --region europe-west9 --wait
- REST API の executions.get エンドポイントをポーリングし、
Completed
ステータス条件がTrue
であることを確認します。 - 次のような実行が完了したら、書き込まれたログエントリを探します。
Completed condition status changed to True for Execution sleepy-l8zjp.
このログメッセージを探すには、Cloud Logging で次のクエリを実行します。
resource.type="cloud_run_revision"
resource.labels.revision_name="EXECUTION_NAME" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event"
protoPayload.response.status.conditions.type="Completed"
protoPayload.response.status.conditions.status="True"
また、出力の書き込み場所をポーリングして、出力がいつ表示されたかを検出することもできます。ただし、これは、出力の書き込みがジョブの最後である場合にのみ正しく機能します。たとえば、出力の書き込み後にジョブがクリーンアップを行っても、出力の書き込み後にジョブが失敗する可能性があります。
10. ジョブを更新する
ジョブを作成するときに、タグまたは正確なダイジェストを使用してコンテナ イメージを指定できます。
- タグの例:
gcr.io/my-project/my-image:tag
- ダイジェストの例:
gcr.io/my-project/my-image@sha256:41f34ab970ee...
どちらも指定されていない場合は、タグ :latest
が使用されます。
最新バージョンのコードを実行するようにジョブを更新する方法は、コンテナ イメージの指定にタグとダイジェストのどちらを使用するかによって異なります。
タグ付きのコンテナ イメージを指定した場合、Cloud Run はジョブの実行時にイメージを特定のダイジェストに解決します。つまり、次回ジョブを実行するときに、コンテナの最新バージョンを取得するためにジョブを明示的に更新する必要はありません。
ジョブが実行されるたびに特定のコンテナ ダイジェストを使用したい場合は、正確なダイジェストを含むコンテナ イメージを指定できます。この場合、コードの変更をジョブで取得できるようにするには、別のダイジェストを使用するようにジョブを明示的に更新する必要があります。
gcloud beta run jobs update JOB_NAME --image NEW-IMAGE --region europe-west9
コンテナ イメージの指定方法に関係なく、実行のすべてのタスクで常に同じダイジェストが使用されます。
更新の適用中は、新しい実行を開始できません。更新が完了するまで待つ必要があります。通常は数秒で完了します。更新に失敗した場合、新しい実行は作成できません。まず、別の更新を行って、ジョブを適切な状態に戻す必要があります。
11. 完了
お疲れさまでした。ここでは、Cloud Run ジョブをいつ、どのように使用するかを学びました。
学習した内容は以下のとおりです。
- Cloud Run ジョブとは
- Cloud Run ジョブを使用するタイミング
- Cloud Run ジョブ ワークフロー
- Cloud Run ジョブの作成方法
- Cloud Run ジョブを実行する方法
- スケジュールに従ってジョブを実行する方法
- 実行ステータスを表示する方法
- ジョブとジョブ実行を管理する方法
- ジョブの完了を検出する方法
- ジョブを更新する方法
次のステップ
ヘルプ
gcloud の詳細なリファレンスについては、help コマンドを使用してください。
gcloud beta run jobs --help
gcloud beta run jobs executions --help