このページでは、VPC Service Controls 境界を使用する場合に、プロジェクトのスケジュール設定された Cloud Run ジョブを実行するためのベスト プラクティスについて説明します。 Google Cloud
Cloud Scheduler は、VPC Service Controls の境界内でジョブをトリガーできません。スケジュール設定されたジョブを設定するには、追加の手順が必要です。特に、別のコンポーネントを介してリクエストをプロキシする必要があります。プロキシとして Cloud Run サービスを使用することをおすすめします。
次の図にアーキテクチャを示します。
始める前に
VPC Service Controls 用に Cloud Run を設定する。これは、後続のすべてのスケジュール設定されたジョブで使用される 1 回限りの設定です。また、後でサービスごとに設定を行う必要があります。この設定については、後述します。
スケジュールされたジョブを設定する
VPC Service Controls の境界内にスケジュールされたジョブを設定するには:
ジョブを作成し、ジョブの名前をメモします。
ジョブごとの Cloud Run 固有の VPC Service Controls の設定を完了します。ジョブを VPC ネットワークに接続し、すべてのトラフィックをそのネットワーク経由で転送する必要があります。
トリガーする既存の Cloud Run ジョブがない場合は、サンプルの Cloud Run ジョブ コンテナ
us-docker.pkg.dev/cloudrun/container/job:latest
を Cloud Run にデプロイして、この機能をテストします。プロキシとして機能する Cloud Run サービスをデプロイします。リクエストに応答して Cloud Run ジョブをトリガーするサンプル サービスについては、サンプル プロキシ サービスをご覧ください。デプロイが完了すると、コンソールに「URL:」というテキストの横にサービスの URL が表示されます。
サービスごとの Cloud Run 固有の VPC Service Controls の設定を完了します。サービスを VPC ネットワークに接続し、そのネットワーク経由ですべてのトラフィックを転送する必要があります。ingress は必ず [内部] に設定してください。
Cloud Run プロキシ サービスをトリガーする Cloud Scheduler cron ジョブを作成します。
[ジョブを作成] をクリックします。
[名前]、[リージョン]、[頻度]、[タイムゾーン] の各フィールドに必要な値を入力します。詳細については、Cloud Scheduler を使用して cron ジョブを作成するをご覧ください。
[実行内容を構成する] をクリックします。
ターゲット タイプとして [HTTP] を選択します。
[URL] に、前の手順でメモした Cloud Run プロキシ サービスの URL を入力します。
HTTP メソッドとして [Get] を選択します。
Auth ヘッダーで [OIDC トークンを追加] を選択します。
[サービス アカウント] で、Compute Engine のデフォルトのサービス アカウントまたは、
run.routes.invoke
権限またはCloud Run Invoker
ロールを持つカスタム サービス アカウントを選択します。[オーディエンス] に、前の手順でメモした Cloud Run プロキシ サービス URL を入力します。
その他のフィールドは空欄のままにします。
[作成] をクリックして、Cloud Scheduler cron ジョブを作成します。
サンプル プロキシ サービス
次のセクションでは、リクエストをプロキシし、Cloud Run ジョブをトリガーする Python サービスのサンプルを示します。
main.py
という名前のファイルを作成し、次のコードを貼り付けます。ジョブ名、リージョン、プロジェクト ID を必要な値に更新します。import os from flask import Flask app = Flask(__name__) # pip install google-cloud-run from google.cloud import run_v2 @app.route('/') def hello(): client = run_v2.JobsClient() # UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME' print("Triggering job...") request = run_v2.RunJobRequest(name=job_name) operation = client.run_job(request=request) response = operation.result() print(response) return "Done!" if __name__ == '__main__': app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
requirements.txt
という名前のファイルを作成し、次のコードを貼り付けます。google-cloud-run flask
次の内容の Dockerfile を作成します。
FROM python:3.9-slim-buster WORKDIR /app COPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python3", "main.py"]
コンテナをビルドしてデプロイします。ソースベースのデプロイは、Cloud Build カスタム ワーカーを設定する必要があり、VPC Service Controls 環境で設定するのが難しい場合があります。既存のビルド デプロイ パイプラインがある場合は、そのパイプラインを使用してソースコードをコンテナにビルドし、コンテナを Cloud Run サービスとしてデプロイします。
既存のビルドとデプロイの設定がない場合は、コンテナをローカルでビルドして Artifact Registry に push します。次に例を示します。
PROJECT_ID=YOUR_PROJECT_ID REGION=YOUR_REGION AR_REPO=YOUR_AR_REPO CLOUD_RUN_SERVICE=job-runner-service docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE
deploy コマンドから返されたサービス URL をメモします。
次のステップ
この機能の使用後に、以下を読んで詳細を確認してください。