本頁面說明如何排解對您的 API 要求所回應的錯誤。
Upstream backend unavailable
如果您收到錯誤代碼 14
和訊息 upstream backend unavailable
,表示可擴充服務 Proxy (ESP) 無法連線到服務後端。請確認下列事項:
- 確認後端服務正在執行,操作方式取決於您使用的後端。
- 對於 Compute Engine,請參閱在 Compute Engine 上排解 Cloud Endpoints 的問題。
-
對於 GKE,您需要用 SSH 來存取 pod 並使用
curl
,詳情請參閱在 Google Kubernetes Engine 中排解 Endpoints 的問題。
- 後端服務的正確 IP 位址通訊埠如下所述:
-
對於 GKE,請檢查部署資訊清單檔案 (經常稱為
deployment.yaml
) 中的 ESP--backend
標記值 (短選項為-a
)。 -
對於 Compute Engine,請檢查
docker run
指令中的 ESP--backend
標記值 (短選項為-a
)。
-
對於 GKE,請檢查部署資訊清單檔案 (經常稱為
reset reason: connection failure
如果您收到 HTTP 代碼 503
或 gRPC 代碼 14
,以及訊息 upstream connect error or disconnect/reset before headers. reset reason: connection failure
,表示 ESPv2 無法連線到服務後端。
如要排解問題,請仔細檢查下列項目。
後端位址
請使用正確的後端位址設定 ESPv2。常見問題包括:
- 後端地址的配置應與後端應用程式類型相符。OpenAPI 後端應為
http://
,gRPC 後端應為grpc://
。 - 對於在 Cloud Run 上部署的 ESPv2,後端位址的架構應為
https://
或grpcs://
。s
會指示 ESPv2 與後端設定 TLS。
DNS 查詢
根據預設,ESPv2 會嘗試將網域名稱解析為 IPv6 位址。如果 IPv6 解析失敗,ESPv2 會改用 IPv4 位址。
部分聯播網的備用機制可能無法正常運作。您可以改為透過 --backend_dns_lookup_family
標記,強制 ESPv2 使用 IPv4 位址。
如果您為在 Cloud Run 上部署的 ESPv2 設定無伺服器虛擬私有雲連接器,就會發生這種錯誤。虛擬私人雲端不支援 IPv6 流量。
API is not enabled for the project
如果您在要求中傳送 API 金鑰,系統會顯示「API my-api.endpoints.example-project-12345.cloud.goog is not enabled for the project」(專案未啟用 API my-api.endpoints.example-project-12345.cloud.goog) 等錯誤訊息,表示 API 金鑰是在與 API 不同的專案中建立。 Google Cloud如要修正這個問題,您可以在與 API 相關聯的 Google Cloud 專案中建立 API 金鑰,或是在 API 金鑰建立的 Google Cloud 專案中啟用 API。
Service control request failed with HTTP response code 403
如果您收到錯誤代碼 14
和訊息 Service control request failed
with HTTP response code 403
,表示 Service Control API (servicecontrol.googleapis.com
) 未在專案中啟用。
Method doesn't allow unregistered callers
當您已在 gRPC API 設定檔中指定 allow_unregistered_calls: false
,但向 API 提出的要求並未具備指派給名稱為 key
的查詢參數的 API 金鑰時,ESP 就會回應錯誤 Method doesn't allow unregistered callers
。
如要產生 API 金鑰以呼叫 API,請參閱建立 API 金鑰。
Method does not exist
Method does not exist
這則回應表示系統找不到指定網址路徑上的 HTTP 方法 (GET
、POST
或其他)。如要排解問題,請比對檢查您已部署的服務設定,以確保方法名稱和您在要求中傳送的網址路徑相符:
在 Google Cloud 控制台中,前往專案的「Endpoints Services」頁面。
如果您有多個 API,請選取您傳送要求的 API。
按一下 [Deployment history] (部署記錄) 分頁標籤。
選取最新的部署以查看服務設定。
Transport is closing
如果您收到錯誤代碼 13
和訊息 transport is closing
,表示系統無法連上 ESP。
請檢查 ESP 錯誤記錄,操作方式取決於您使用的後端。詳情請參閱下列說明文章:
非預期的回應
如果 HTTP 回應看起來像二進位檔,這可能表示要求是透過 HTTP2
通訊埠抵達 API,而非您預期使用的 HTTP1
通訊埠。
檢查 ESP 的連接埠設定選項。由於簡短格式的標記 -p
(適用於 HTTP1
) 和 -P
(適用於 HTTP2
) 看起來相似,建議您改用較長的標記:--http_port
(適用於 HTTP1
) 和 --http2_port
(適用於 HTTP2
)。
ESP 後端的錯誤設定可能也會造成非預期的回應。請確認後端標記 (-a
或 --backend
) 設為 gRPC 網址,像是 --backend=grpc://127.0.0.1:8081
。
如要進一步瞭解 ESP 標記,請參閱 ESP 啟動選項。
檢查 Cloud Logging 記錄
如要使用 Cloud Logging 記錄檔排解回應錯誤:
在 Google Cloud 控制台中,前往「Logging」頁面。
選取頁面頂端的 Google Cloud 專案。
在左側的下拉式選單中,選取 [Produced API] (產生的 API) > [YOUR_SERVICE_NAME]。
調整時間範圍直到您看見顯示回應錯誤的資料列。
展開 JSON 酬載並尋找
error_cause
。如果
error_cause
設為application
,表示程式碼有問題。如果
error cause
設為其他選項,且您無法修正問題,請匯出記錄,並附在您與 Google 的任何通訊訊息中。
詳情請參閱下列說明文章:
如要進一步瞭解記錄檔探索工具中的記錄結構,請參閱 Endpoints 記錄參考資料。
開始使用記錄檔探索工具。
使用進階記錄查詢功能進行進階篩選,例如取得延遲時間大於 300 毫秒的所有要求。