區域 ID
REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的縮寫代碼。即使部分區域 ID 看似常用的國家/地區和省份代碼,但該代碼並不對應至國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是這段時間前建立的現有應用程式,網址可選擇是否包含區域 ID。
進一步瞭解區域 ID。
如需已知問題的完整清單或回報新問題,請參閱問題追蹤工具。
使用
gcloud app deploy部署應用程式後,您可能要等候 1 到 2 分鐘,應用程式才會在https://PROJECT_ID.REGION_ID.r.appspot.com開始提供服務。在此之前,您可能會看到 HTTP503錯誤。App Engine 通常會在全域外部應用程式負載平衡器記錄檔中,將這些錯誤記錄為
backend_timeout或failed_to_pick_backend。全域外部應用程式負載平衡器會將要求傳送至 App Engine 彈性環境中的服務,不論個別執行個體的健康狀態為何。部署新版本後,全域外部應用程式負載平衡器需要一段時間,才能使用新的後端執行個體更新設定。在此期間,後端服務的可用性不一致。將流量遷移至新版本時,全域外部應用程式負載平衡器可能會嘗試將流量傳送至尚未完全準備好接收要求的執行個體,導致發生503錯誤。這也可能導致502錯誤,特別是使用傳統版應用程式負載平衡器時。如果專案的組織政策會限制外部 IP 的存取權,您就無法部署含有外部 IP 位址的 App Engine 彈性環境應用程式。舉例來說,機構政策可能如下所示:
constraints/compute.vmExternalIpAccess的有效政策設為DENY_ALL。constraints/compute.vmExternalIpAccess的有效政策設為只允許特定 VM 執行個體。- 專案已停用
constraints/compute.requireOsConfig的有效政策,因此無法更新中繼資料。
系統不會自動偵測這些限制,因此部署可能會逾時並失敗。您可執行
gcloud beta resource-manager org-policies describe compute.vmExternalIpAccess --project=my-project --effective指令,即可查看專案的機構政策。您也可以覆寫特定專案的機構政策。不過,即使設定了這類組織政策,您還是可以部署只使用內部 IP 位址的私人 App Engine 彈性環境應用程式。
在 App Engine 彈性環境中,使用
gcloud app deploy部署現有服務的新版本後,App Engine 資訊主頁「摘要」圖表中顯示的「每秒計數」指標可能會大幅減少。指標會在接下來的 5 到 10 分鐘內,逐步恢復為預期的要求計數。這不代表應用程式處理的要求較少。部署新版應用程式時,新版本準備好處理要求與新執行個體指標可供使用之間,會有一段延遲時間。
為確保這項指標不受新版本部署作業影響,請採取下列措施:
- 使用
gcloud app deploy --no-promote部署新版本。 - 部署作業完成後,請等待 15 分鐘。
- 將流量遷移至新版本。
如果您使用
--no-promote部署,但在部署完成後的 15 分鐘內,將任何流量分配給新版本,這項指標可能會受到影響。- 使用
在 App Engine 彈性環境中,無法設定
app.yaml,讓應用程式自動將要求重新導向,一律使用 HTTPS。這與 App Engine 標準環境不同,在標準環境中,您可以使用secure設定。或者,您也可以剖析
X-Forwarded-Proto標頭的值,在應用程式程式碼中處理重新導向。您也可以鼓勵用戶使用Strict-Transport-Security標頭。如果您將使用者管理的服務帳戶指派給 App Engine 彈性環境版本,專案可能會因
agent.googleapis.com前置字元指標而產生費用。一般來說,這些代理程式指標不會計入專案費用。建議您繼續使用 App Engine 預設服務帳戶,直到這個問題解決為止。您無法使用 IAP 建立與 VM 執行個體的 SSH 連線。
App Engine 彈性環境的請求逾時上限為 60 分鐘。不過,如果應用程式設定為使用具有嚴格輸出防火牆規則的虛擬私有雲網路 (例如拒絕輸出至
0.0.0.0),則超過 10 分鐘的要求可能會發生連線中斷問題。這是因為基礎 VPC 防火牆連線追蹤項目會在閒置 10 分鐘後到期。如果 App Engine 彈性環境執行個體在連線閒置 10 分鐘後嘗試傳送回應,防火牆會捨棄輸出封包。
如要避開這項限制,請按照下列步驟操作:
- 如要使用嚴格的輸出拒絕規則,請設定特定的輸出允許規則,允許流量傳輸至傳統版應用程式負載平衡器使用的 Google Front End (GFE) IP 範圍,例如
130.211.0.0/22和35.191.0.0/16。詳情請參閱「防火牆規則」。 - 遷移至 Envoy 型應用程式負載平衡器。這樣一來,您就能設定輸出允許規則,以自己的僅限 Proxy 子網路範圍為目標,這通常是安全團隊建議的做法,而非外部 GFE IP 範圍。
- 如要使用嚴格的輸出拒絕規則,請設定特定的輸出允許規則,允許流量傳輸至傳統版應用程式負載平衡器使用的 Google Front End (GFE) IP 範圍,例如
執行個體數量意外減少
在極少數情況下,由於區域故障,或整個執行個體群組停止回應,應用程式可能會發現執行個體數量意外減少。為避免這種情況,Google 建議您超量佈建應用程式,以免系統執行個體數量低於下限。部署 App Engine 彈性環境應用程式時,您可以設定 min_num_instances 大小。可能影響 App Engine 彈性環境最低執行個體數的事件包括:
- 推出彈性環境執行個體更新
- 區域性故障 (缺貨問題,例如所選 CPU 的區域容量已達上限等)
App Engine 彈性環境會使用 3 個可用區分配執行個體,在這種設定下,我們建議佈建的執行個體數量比需求多 50%。
Cloud Load Balancing 指標不一致
App Engine 彈性環境資訊主頁只會顯示透過彈性環境管理後端傳送的要求指標。如果您使用 App Engine 彈性環境搭配 Cloud Load Balancing,App Engine 指標表中的特定指標會改為從 loadbalancing 表格回報。詳情請參閱「HTTP(S) 負載平衡記錄和監控」。
InterruptedException (在健康狀態檢查失敗時,使用 JVM 的執行階段)
如果健康狀態檢查失敗,系統會關閉 VM。應用程式容器健康狀態不佳的徵兆包括 JVM 回應 InterruptedException和NullPointerException錯誤。處理常式可以回應容器在關機期間傳送的 SIGTERM 訊號,執行任何必要的清除或偵錯動作,避免發生例外狀況。