您可以使用 Cloud Scheduler,按照時間表安全地觸發 Cloud Run 服務,使用方式則與 Cron 工作相近。
可能的用途包括:
- 定期執行備份
- 執行週期性管理工作,例如:
- 重新產生 Sitemap
- 刪除舊資料、內容、設定或修訂版本
- 在資料系統之間同步處理內容
- 處理每日電子郵件通知
- 驗證及回報下游服務的存取權
 
- 生成文件,例如帳單
這個頁面會說明,如何在同一項 Google Cloud 專案中,安全地搭配使用 Cloud Scheduler 與 Cloud Run。
事前準備
在您使用的專案中啟用 Cloud Scheduler API。
建立及部署服務
如要建立及部署:
- 在服務中,實作要依排程執行的工作。 
- 請注意服務預期接收工作要求的請求類型,例如 - GET或- POST。建立會叫用服務的排定工作時,您需要指定與此相符的 HTTP 方法。
- 部署搭配 Cloud Scheduler 使用的服務時,請務必選取「需要驗證」。不允許公開存取。 
下列範例說明如何使用 Terraform 部署 Cloud Run 服務:
將 us-docker.pkg.dev/cloudrun/container/hello 替換為您自己的容器映像檔參照。
為 Cloud Scheduler 建立服務帳戶
您需要建立與 Cloud Scheduler 建立關聯的服務帳戶,並授予該服務帳戶叫用 Cloud Run 服務的權限。您可以使用現有服務帳戶代表 Cloud Scheduler,也可以建立新的服務帳戶。
如要建立服務帳戶並授予叫用 Cloud Run 服務的權限,請按照下列步驟操作:
控制台
- 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。 
- 選取專案。 
- 輸入要顯示在 Google Cloud 控制台的服務帳戶名稱。 - Google Cloud 控制台會根據這個名稱產生服務帳戶 ID。請視需要編輯 ID,ID 設定後即無法變更。 
- 選用:輸入服務帳戶的說明。 
- 按一下「建立並繼續」。 
- 選用:按一下「請選擇角色」欄位。 
- 依序選取「Cloud Run」 >「Cloud Run Invoker」。 
- 按一下 [完成]。 
指令列
- 建立服務帳戶: - gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME" - 取代 - SERVICE_ACCOUNT_NAME,並使用小寫名稱,且該名稱在專案中不得重複,例如 my-invoker-service-account-name。 Google Cloud
- DISPLAYED_SERVICE_ACCOUNT_NAME,例如在控制台中,這個服務帳戶要顯示的名稱,例如 My Invoker Service Account。
 
- SERVICE_ACCOUNT_NAME,並使用小寫名稱,且該名稱在專案中不得重複,例如 
- 若您使用 Cloud Run,請授予服務帳戶的權限以叫用您的服務: - gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker - 取代 - SERVICE 改為要由 Cloud Scheduler 叫用的服務名稱。
- SERVICE_ACCOUNT_NAME 改為服務帳戶名稱。
- 將 PROJECT_ID 改成您的 Google Cloud 專案 ID。
 
- 將專案存取權授予服務帳戶,讓服務帳戶有權限對專案中的資源完成特定動作: - gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker - 取代 - RESOURCE_ID:您的 Google Cloud 專案 ID。 
- PRINCIPAL:主體或成員的 ID,通常採用以下格式:PRINCIPAL_TYPE:ID。例如: - user:my-user@example.com。如需 PRINCIPAL 可用的值完整清單,請參閱政策繫結參考資料。
 
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
如要使用 Terraform 建立服務帳戶,請按照下列步驟操作: <0x0
建立 Cloud Scheduler 工作
您必須建立工作,在指定時間呼叫服務。您可以使用主控台或指令列:
您可以使用主控台或 gcloud 指令列建立工作。 按一下適當的分頁標籤:
主控台
- 前往「Cloud Scheduler」主控台頁面。 
- 按一下「Create job」(建立工作)。  
- 設定工作名稱。 
- 使用設定字串指定頻率或工作間隔,工作將會按照這個頻率執行。例如, - 0 */3 * * *字串每隔 3 小時會執行一次工作。您在這裡提供的字串可以是任何與 Crontab 相容的字串。- 詳情請參閱設定工作時間表一文。 
- 從下拉式清單中選擇工作頻率要使用的時區。 
- 將 - HTTP指定為目標:- 指定服務的完整網址,例如 - https://myservice-abcdef-uc.a.run.app。工作會將要求傳送至這個網址。
- 指定 HTTP 方法:這個方法必須與先前部署的 Cloud Run 服務預期的方法相符。預設值為 - POST。
- 或者指定要傳送至目標的資料。如果選擇 - POST或- PUTHTTP 方法,這個資料會在要求主體中傳送。
- 按一下「更多」即可顯示驗證設定。 
- 從下拉式選單中選取「新增 OIDC 權杖」。 
- 在「Service account」(服務帳戶) 欄位中,複製先前建立的服務帳戶電子郵件地址。 
- 在「Audience」欄位中,複製服務的完整網址。 
 
- 按一下「建立」即可建立並儲存工作。 
指令列
您必須使用 OIDC 驗證,才能從 Cloud Scheduler 存取經過驗證的 Cloud Run 服務。OIDC 驗證包含服務帳戶和目標對象標記。 詳情請參閱「使用驗證來搭配 HTTP 目標」。
如要建立 Cloud Scheduler 工作,請按照下列步驟操作:
gcloud scheduler jobs create http test-job --schedule "5 * * * *"
--http-method=HTTP-METHOD
--uri=SERVICE-URL
--oidc-service-account-email=SERVICE-ACCOUNT-EMAIL
--oidc-token-audience=SERVICE-URL
取代
- HTTP-METHOD,並使用 HTTP 方法 (即 GET、POST、PUT 等)。
- SERVICE-URL 改為您的服務網址。
- SERVICE-ACCOUNT-EMAIL 替換為您的服務帳戶電子郵件地址。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
如要為 Cloud Run 服務建立 Cloud Scheduler 工作,請按照下列步驟操作: <0x0A
Cloud Run 服務會依您定義的頻率,透過 Cloud Scheduler 工作的要求觸發。您可以檢查這項服務的記錄,確認並監控這項作業。