如果服務執行時間過長,系統會採取步驟終止或節流該服務。
如果是 Cloud Run 服務,要求逾時設定會指定部署到 Cloud Run 的服務必須傳回回應的時限。如果沒有在指定的時限內傳回回應,要求會結束,並傳回錯誤 504。請注意,系統不會終止處理要求的容器執行個體。容器或程式碼可能會繼續處理已終止的要求,也可能會處理其他要求。為避免發生這種情況,請使用下列技巧,防止服務發生逾時:
- 將逾時時間設為高於預期執行時間。
- 追蹤執行期間的剩餘時間。然後執行清除作業,並提早返回。
逾時時間
逾時時間預設為 5 分鐘 (300 秒),最長可延長至 60 分鐘 (3600 秒)。
從 Eventarc 事件、Pub/Sub 推送訂閱項目或 Cloud Scheduler 觸發服務時,適用這些服務的逾時設定。
您可以透過更新服務設定,或在部署容器映像檔時變更這項設定。
除了變更 Cloud Run 要求逾時之外,您也應該要檢查您的語言架構,查看您的語言架構是否有自己的要求逾時設定。若有,則也必須更新這項設定。Cloud Run 服務的部分用戶端也可能會設定更嚴格的逾時限制。
必要的角色
如要取得設定及部署 Cloud Run 服務所需的權限,請要求管理員授予下列 IAM 角色:
-
Cloud Run 開發人員 (
roles/run.developer
) 在 Cloud Run 服務上 -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) 服務身分
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色和 Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。
設定和更新要求逾時
變更任何設定都會建立新的修訂版本。除非您明確做出更新,變更這項設定,否則後續的修訂版本也會自動取得這個設定。
當您建立新服務或部署新修訂版本時,可以使用 Google Cloud 控制台、gcloud 指令列或 YAML 檔案設定要求逾時。
控制台
前往 Google Cloud 控制台的 Cloud Run:
從選單中選取「服務」,然後按一下「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」。
如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。
按一下「容器」分頁標籤。
- 在「Request timeout」(要求逾時) 欄位中,輸入要使用的逾時值 (以秒為單位)。使用介於
1
到3600
秒之間的值,或介於 1 到60
分鐘之間的值。
- 在「Request timeout」(要求逾時) 欄位中,輸入要使用的逾時值 (以秒為單位)。使用介於
按一下 [Create] (建立) 或 [Deploy] (部署)。
gcloud
針對某個修訂版本,您可以使用下列指令,隨時更新要求逾時:
gcloud run services update SERVICE --timeout=TIMEOUT
取代:
- SERVICE 改為您的服務名稱。
TIMEOUT 改為必須傳回回應的時間。請使用整數值或持續時間絕對值,例如
1m20s
代表 1 分 20 秒。如果您使用整數值,系統將假設單位是「秒」。您指定的值必須少於 60 分鐘。
您也可以在部署期間,使用以下指令設定要求逾時:
gcloud run deploy --image IMAGE_URL --timeout=TIMEOUT
取代:
- IMAGE_URL,並參照容器映像檔,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
- TIMEOUT 改為必須傳回回應的時間。請使用整數值或持續時間值,例如
1m20s
代表 1 分 20 秒。如果您使用整數值,系統將假設單位是「秒」。指定的值必須少於 60 分鐘。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
timeoutSeconds
屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE timeoutSeconds: VALUE
取代
- SERVICE 改為 Cloud Run 服務名稱
- IMAGE_URL,並參照容器映像檔,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
- VALUE,以秒為單位。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定中,將下列內容新增至google_cloud_run_v2_service
資源:將 300s
改為您服務所需的請求逾時時間。
查看要求逾時設定
如要查看 Cloud Run 服務目前的「要求逾時」設定:
控制台
前往 Google Cloud 控制台的 Cloud Run:
按一下感興趣的服務,開啟「服務詳細資料」頁面。
按一下「Revisions」(修訂版本) 分頁標籤。
在右側的詳細資料面板中,要求逾時設定會列在「容器」分頁下方。
gcloud
使用下列指令:
gcloud run services describe SERVICE
在傳回的設定中找出要求逾時設定。