本頁面說明使用 VPC Service Controls 範圍時,為 Google Cloud 專案執行排定的 Cloud Run 工作時的最佳做法。
Cloud Scheduler 無法在 VPC Service Controls 範圍內觸發工作。您必須採取額外步驟才能設定排定工作。特別是,您必須透過其他元件代理要求。建議您使用 Cloud Run 服務做為 Proxy。
下圖顯示相關架構:
事前準備
設定 VPC Service Controls 專用的 Cloud Run。這是一次性設定,所有後續排定的工作都會使用這項設定。您稍後也必須進行個別服務的設定,請參閱後續操作說明。
設定排程工作
如要在 VPC Service Controls 範圍內設定排程工作,請按照下列步驟操作:
建立工作,並記下工作名稱。
完成每個工作專屬的 Cloud Run VPC Service Controls 設定。您必須將工作連結至虛擬私有雲網路,並將所有流量轉送至該網路。
如果您沒有要觸發的現有 Cloud Run 工作,請將範例 Cloud Run 工作容器
us-docker.pkg.dev/cloudrun/container/job:latest
部署至 Cloud Run,以便測試這項功能。部署 Cloud Run 服務,做為 Proxy。如要瞭解會在收到要求時觸發 Cloud Run 工作,以回應範例服務,請參閱範例 Proxy 服務。部署完成後,主控台會在「網址:」文字旁顯示服務的網址。
完成各服務的 Cloud Run 專屬 VPC Service Controls 設定。您必須將服務連線至虛擬私有雲網路,並透過該網路轉送所有流量。請務必將 ingress 設為「Internal」。
建立 Cloud Scheduler Cron 工作,以便觸發 Cloud Run 代理服務:
按一下 [Create Job] (建立工作)。
在「名稱」、「區域」、「頻率」和「時區」欄位中輸入所需值。詳情請參閱「使用 Cloud Scheduler 建立 Cron 工作」。
按一下「設定執行作業」。
選取「Target type」(目標類型) HTTP。
在「網址」中,輸入您在上一個步驟中記下的 Cloud Run 代理服務網址。
在 HTTP 方法中,選取「Get」。
在「Auth header」(驗證標頭) 部分,選取「Add OIDC token」(新增 OIDC 權杖)
如要選取服務帳戶,請選取「Compute Engine 預設服務帳戶」,或具備
run.routes.invoke
權限或Cloud Run Invoker
角色的自訂服務帳戶。在「目標對象」中,輸入與您在上一個步驟中記下的 Cloud Run 代理服務網址相同的網址。
將所有其他欄位留空。
按一下「建立」,即可建立 Cloud Scheduler Cron 工作。
範例 Proxy 服務
以下節顯示範例 Python 服務,可代理要求並觸發 Cloud Run 工作。
建立名為
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,例如:
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
請注意部署指令傳回的服務網址。
後續步驟
使用這項功能後,請參閱以下文章進一步瞭解: