您可以使用 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 改成您的專案 ID。 Google Cloud
將專案存取權授予服務帳戶,讓服務帳戶有權限對專案中的資源完成特定動作:
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
或PUT
HTTP 方法,這個資料會在要求主體中傳送。按一下「更多」即可顯示驗證設定。
從下拉式選單中選取「新增 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 工作的要求觸發。您可以檢查這項服務的記錄,確認並監控這項作業。