使用 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 API 和 Websocket 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 整合
在 API 閘道中設定 WebSocket API 整合要求
設定 HTTP API 的整合
Amazon API Gateway 配額和重要注意事項