この Codelab について
1. はじめに
最終更新日: 2022 年 5 月 6 日
Cloud Run のジョブ
Cloud Run ジョブを使用すると、Cloud Run で長時間実行ジョブを実行できます。
この Codelab は、Cloud Run ジョブをいつどのように使用するかについての情報を提供するものです。この Codelab では、Cloud Run ジョブを使用するの方法を学習します。Cloud Run ジョブでは、Google Cloud Console を使用して、コンテナを構築し、Cloud Run ジョブを作成して実行し、ジョブをジョブ
学習内容
- Cloud Run ジョブの概要
- Cloud Run ジョブを使用するタイミング
- Cloud Run ジョブ ワークフロー
- Cloud Run ジョブの作成方法
- Cloud Run ジョブを実行する方法
- スケジュールに従ってジョブを実行する方法
- 実行ステータスを表示する方法
- ジョブとジョブの実行を管理する方法
- ジョブの完了を検出する方法
- ジョブの更新方法
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 Console または gcloud CLI のいずれかを使用して、コマンドラインからジョブを実行します。
ジョブは、コードを実行するために 1 つのコンテナ インスタンスを起動できます。また、実行するタスクの数を指定することで、多数の独立した独立したコンテナ インスタンスを並行して開始することもできます。 たとえば、Cloud Storage から 1,000 枚の画像を読み取ってサイズ変更や切り抜きを行う場合、連続して処理する方が、多くのコンテナ インスタンスで同時に処理する場合より時間がかかります。
4. ジョブを作成する
ジョブを作成するには、次のコマンドを使用して Cloud Console または gcloud CLI を使用します。
gcloud beta run jobs create JOB_NAME --image IMAGE_URL 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 Console または gcloud CLI を使用します。
- Cloud Console で、ジョブ名をクリックし、ページ上部の [実行] をクリックします。
- gcloud CLI で、次のコマンドを使用します。
gcloud beta run jobs execute JOB_NAME EXECUTION_OPTIONS
JOB_NAME
をジョブの名前に置き換えます。必要に応じて、EXECUTION_OPTIONS
を置き換えて次の項目を指定します。
- ジョブの作成後、即時のジョブ実行。
gcloud beta run jobs create JOB_NAME --execute-now
- 実行が完了するまで待機する場合。
gcloud beta run jobs create JOB_NAME --wait
- 新しい実行の作成後にすぐに終了する場合。
gcloud beta run jobs create JOB_NAME --async
6. スケジュールに従ってジョブを実行する
スケジュールに従ってジョブを実行する場合は、Cloud Scheduler を使用します。
たとえば、請求書を定期的に作成して送信したり、データベース クエリの結果を XML 形式で保存し、ファイルを数時間ごとにアップロードしたりできます。
Cloud Scheduler では、ジョブのスケジュールを設定し、すべての自動化タスクを 1 か所で管理できます。
- バッチジョブとビッグデータ ジョブを毎週、日、時間に同時に実行して、実行を確実に保証し、失敗した場合は再試行する。
- 信頼性が高くフルマネージドの方法で、クラウド インフラストラクチャの実行に関連する面倒なタスクの多くを自動化します。
- 実質的にすべてを自動化する
- 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 Console または gcloud CLI を使用して次のリストを表示します。
次の機能もご利用いただけます。
- 実行中のジョブを削除して停止します。
- 実行されていないジョブ実行を削除します。
- 求人を削除します。
ジョブを削除すると、そのジョブの保留中のジョブ実行がすべてキャンセルされますが、ログの残りの期間(通常は 30 日間)は引き続きジョブログとモニタリング データを利用できます。データのモニタリングは、Cloud Monitoring で引き続き利用できます。
9. ジョブ実行の完了を検出する
ジョブの実行が終了したことを検出するには、いくつかの方法があります。
--wait
フラグを指定してジョブを実行すると、ジョブが完了すると gcloud CLI が終了します。
gcloud beta run jobs execute JOB_NAME --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 alpha run jobs update JOB_NAME --image NEW-IMAGE
コンテナ イメージを指定しても、すべてのタスクで同じダイジェストが常に使用されます。
更新が適用されている間は、新しい実行を開始できません。更新が完了するまで待つ必要がありますが、これには通常、数秒かかります。 更新が失敗した場合、新しい実行は作成できません。もう一度更新して、ジョブを良好な状態に戻す必要があります。
11. 完了
お疲れさまでした。Cloud Run ジョブをいつ、どのように使用するかについて学習しました。
学習した内容は以下のとおりです。
- Cloud Run ジョブの概要
- Cloud Run ジョブを使用するタイミング
- Cloud Run ジョブ ワークフロー
- Cloud Run ジョブの作成方法
- Cloud Run ジョブを実行する方法
- スケジュールに従ってジョブを実行する方法
- 実行ステータスを表示する方法
- ジョブとジョブの実行を管理する方法
- ジョブの完了を検出する方法
- ジョブの更新方法
次のステップ
ヘルプ
gcloud リファレンス全体を参照するには、help コマンドを使用します。
gcloud alpha run jobs --help
gcloud alpha run jobs executions --help