App Engine 彈性環境的已知問題

區域 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 開始提供服務。在此之前,您可能會看到 HTTP 503 錯誤。

    App Engine 通常會在全域外部應用程式負載平衡器記錄檔中,將這些錯誤記錄為 backend_timeoutfailed_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 彈性環境應用程式。

  • 使用 gcloud app deploy 在 App Engine 彈性環境中部署現有服務的新版本後,App Engine 資訊主頁「摘要」圖表中顯示的「計數/秒」指標可能會大幅減少。在接下來的 5 到 10 分鐘內,指標會逐漸恢復為預期的要求計數。

    這並不表示應用程式會提供較少要求。部署新版應用程式時,新版準備好處理要求的時間與新執行個體的指標可用時間之間會有延遲。

    如要確保這項指標不會受到新版本部署作業的影響,請按照下列步驟操作:

    1. 使用 gcloud app deploy --no-promote 部署新版本。
    2. 部署完成後,請等候 15 分鐘。
    3. 將流量遷移至新版本

    如果您使用 --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 連線。

執行個體數量意外減少

  • 在極少數情況下,應用程式可能會因區域故障或整個執行個體群組停止回應,而導致執行個體數量異常減少。為避免這種情況,Google 建議您為應用程式超額佈建執行個體,以免系統的執行個體數量低於最低值。您可以在部署 App Engine 彈性環境應用程式時設定 min_num_instances 大小。以下是可能影響 App Engine 彈性環境執行個體數量下限的部分事件:

    1. 更新導入彈性環境執行個體
    2. 區域失敗 (缺貨問題,例如所選 CPU 的區域已達容量上限等)

    App Engine 彈性環境會使用 3 個區域來分配執行個體,在這種設定下,我們建議為執行個體配置比需求多 50% 的資源。

Cloud Load Balancing 指標不一致

App Engine 彈性環境資訊主頁只會針對透過彈性環境管理後端路由的要求,顯示所有指標。如果您使用 App Engine 彈性環境搭配 Cloud Load Balancing,App Engine 指標表中的特定指標會改為以 loadbalancing 表中的指標回報。如需更多資訊,請參閱「HTTP(S) 負載平衡記錄和監控」。

在健康狀態檢查失敗期間,使用 JVM 的執行階段中的 InterruptedException

當健康狀態檢查失敗時,VM 會關閉。當應用程式容器的健康狀態不佳時,JVM 會回應 InterruptedExceptionNullPointerException 錯誤。處理常式可以回應容器在關機期間傳送的 SIGTERM 訊號,執行任何必要的清理或偵錯動作,以防發生例外狀況。