如何使用 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 事件日誌中識別並驗證錯誤來源。然後,使用下列一或多個方法來減少整合要求的執行時期,直到整合要求未逾時為止。

解決方法

識別並驗證您的 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 Gateway 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,那麼請嘗試增加最大整合請求逾時參數。如需詳細資訊,請參閱Amazon API 閘道整合逾時限制提高超過 29 秒

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

若要縮短整合的執行期

執行下列一個或多個動作:

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

相關資訊

API 閘道中的 REST API 整合

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

在 API 閘道中建立 HTTP API 的整合

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