如何使用 API 閘道解決 API HTTP 504 逾時錯誤?

2 分的閱讀內容
0

使用 Amazon API Gateway 調用我的 REST API、HTTP API 或 Websocket API 時,收到一個 HTTP 504 錯誤狀態碼。

簡短描述

如果整合要求花費的時間超過您的 API 閘道 REST API 最大整合逾時參數,則 API 閘道會傳回 HTTP 504 狀態碼。

若要從 API 閘道疑難排解 504 逾時錯誤,請先在 Amazon CloudWatch 執行日誌中識別並驗證錯誤來源。然後,使用下列一或多個方法來減少整合要求的執行期,直到整合要求未逾時為止。

解決方法

識別並驗證您的 Amazon CloudWatch 日誌中 504 錯誤的來源

1.    針對 Rest APIWebsocket API,請為 504 錯誤設定 API 閘道執行日誌。如果是 HTTP API,請啟用日誌,並將日誌寫入 CloudWatch 日誌

2.    手動嘗試在 API 中重現 504 錯誤。

3.    啟動 API 的存取日誌,然後使用下列參數變數診斷錯誤來源:

$context.integration.status: The status code returned from an integration. For AWS Lambda proxy integrations, this is the status code that your Lambda function code returns.
$context.integrationStatus: For Lambda proxy integration, this parameter represents the status code returned from Lambda, not from the backend Lambda function.
$context.integrationLatency: The integration latency in ms.

如需詳細資訊,請參閱資料模型、授權者、對應範本和 CloudWatch 存取日誌的 $context 變數

4.    使用下列 CloudWatch 日誌洞察查詢,從存取日誌篩選「5XX」狀態碼:

fields @timestamp, @message, @logStream
| filter status like ‘5’
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId

5.    在 CloudWatch 主控台中,檢視 API 閘道執行日誌 (針對接收錯誤的整合)。

6.    在您的 CloudWatch 日誌中追蹤請求識別碼。如果整合逾時,您就會在「轉換後的端點要求主體:」行之後,看到「因逾時而執行失敗」錯誤。如需詳細資訊,請參閱如何在我的 CloudWatch 日誌中尋找 API 閘道 REST API 錯誤?

7.    使用下列 CloudWatch 日誌洞察查詢來篩選錯誤,並選取您的 API 閘道執行日誌群組:

fields @timestamp, @message
|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc

8.    若要判斷錯誤的來源,請確認已調用相關聯的整合端點。

9.    確認整合完成處理要求並回應 API 閘道所花費的時間。

10.    如果未調用整合,請在用戶端上實作 API 重試。(此錯誤可能是因為 API 閘道服務中的暫時性網路失敗所導致。)

注意:確保您的應用程式具有等冪性。這樣可以避免重試 API 要求時的資料衝突。

-或-

如果已調用整合,但仍傳回 504 錯誤訊息,請嘗試縮短整合的執行期。如果它是 HTTP API,您可以嘗試增加最大整合要求逾時參數

**注意:**API 閘道 REST API 的預設最大整合逾時時間為 29 秒。對於 HTTP API,可以將逾時設定為最多 30 秒的最大值。無法增加最大值限制。

若要縮短整合的執行期

  • 請確定您的後端整合僅包含 API 閘道傳送 HTTP 回應至用戶端所需的邏輯。請考慮將任何非相依或後處理邏輯移至其他服務,例如 Lambda
  • 如果網路延遲導致 504 錯誤,請在用戶端應用程式上實作重試邏輯
  • 遵循適用於您平台的最佳化作法,改善後端整合效能。
  • 考慮設定後端 Lambda 函數的非同步調用

相關資訊

設定其他 API 整合

在 API 閘道中設定 WebSocket API 整合要求

設定 HTTP API 的整合

Amazon API Gateway 配額和重要注意事項