前言
前一篇有跟各位介紹了三種在 GCP 上跑排程的方式, 相信大家對於 GCP 上的排程功能已經有初步的認識了吧!
這一篇會手把手帶著各位實作基於 "Cloud Scheduler & Cloud Run" 的排程方法, 詳細的步驟如下
Step 1. Deploy Service on Cloud Run
Build Container Image使用 Cloud Build 將原始碼打包成 Container Image
gcloud builds submit --tag gcr.io/<PROJECT_ID>/<CONTAINER_NAME>
Example:gcloud builds submit \
--tag gcr.io/my-project/my-cronjob
Deploy
將服務部屬到 Cloud Run 上跑, 並且要求每個請求都要做身分認證
gcloud run deploy <CONTAINER_NAME> \
--image gcr.io/<PROJECT_ID>/<CONTAINER_NAME> \
--platform managed \
--no-allow-unauthenticated
Example:gcloud run deploy my-cronjob \
--image gcr.io/my-project/my-cronjob \
--platform managed \
--no-allow-unauthenticated
這個步驟做完後會得到服務的 Endpoint
Step 2. Create Cloud Scheduler With IAM
這邊首先建立一個新的 Service Account, 並賦予執行 Cloud Run 上服務的權限Create Service Account
gcloud iam service-accounts create <SERVICE_ACCOUNT_ID> \
--display-name=<DISPLAY_NAME>
Example:gcloud iam service-accounts create cloud-run-invoker \
--display-name=cloud-run-invoker
Grant Permission
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member=serviceAccount:<SERVICE_ACCOUNT_ID>@<PROJECT_ID>.iam.gserviceaccount.com \
--role=roles/run.invoker
Example:gcloud projects add-iam-policy-binding my-project \
--member \
serviceAccount:cloud-run-invoker@my-project.iam.gserviceaccount.com \
--role=roles/run.invoker
參考連結
若不想打指令也可以直接在GCP Portal上完成以上的動作建立服務帳戶 (Service Account)
Create Cloud Scheduler
最後在 Cloud Scheduler 上建立排程, 並且設定以 Service Account 的身份來發請求給 Cloud Run
gcloud scheduler jobs create http <JOB_NAME> \
--schedule=<SCHEDULE> \
--uri=<CLOUD_RUN_ENDPOINT> \
--http-method=<HTTP_METHOD> \
--oidc-service-account-email '<SERVICE_ACCOUNT>@<PROJECT_ID>.iam.gserviceaccount.com'
Example:gcloud scheduler jobs create http my-job \
--schedule="0 0 * * *" \
--uri="https://my-cronjob-nnml24uemq-uc.a.run.app/api/status" \
--http-method=GET \
--oidc-service-account-email 'cloud-run-srv@my-prj.iam.gserviceaccount.com'
參考連結
留言
張貼留言