我已使用虛擬私有雲端 (VPC) 連結整合設定了 Amazon API Gateway。當我呼叫 API 時,我收到含有 HTTP 500 狀態碼的組態或內部錯誤。
簡短說明
基於以下原因,具有 VPC 連結的 AWS API Gateway 可能無法將流量轉送到後端資源,而且會傳回 HTTP 500 狀態碼:
- VPC 連結處於失敗狀態。或者,端點服務已刪除或處於拒絕狀態。
- 目標群組的已註冊目標運作狀態不良,或者處於非使用中狀態。
注意: 如果 60 天內沒有透過 VPC 連結傳送流量,其狀態就會變成非作用中.如需詳細資訊,請參閱使用 HTTP API 的 VPC 連結。
- 安全群組不允許特定連接埠上的流量。
- 網路存取控制清單 (ACL) 會封鎖流量。
- 目標不會接聽目標連接埠。
- 網域名稱憑證與啟用 TLS 的 Network Load Balancer 或 Application Load Balancer 不符。
如果 API 啟用 Amazon CloudWatch Logs,執行日誌中會顯示錯誤訊息,說明錯誤的原因。
CloudWatch Logs 中的 HTTP 500 錯誤訊息範例
「Thu Aug 04 17:48:21 UTC 2022 : Execution failed due to configuration error: There was an internal error while executing your request Thu Aug 04 17:48:21 UTC 2022 : Method completed with status: 500」
-或-
「Thu Aug 04 19:50:21 UTC 2022 : Execution failed due to configuration error: Host name 'domain.com.com' does not match the certificate subject provided by the peer (CN=myinstance.com)
Thu Aug 04 19:50:21 UTC 2022 : Method completed with status: 500」
解決方法
確認錯誤的原因
開啟 CloudWatch API 記錄功能。請務必設定執行記錄功能。
注意: 當您進行記錄功能設定時,請在日誌級別中選擇 資訊。然後,選擇日誌完整請求/回應資料。
若要識別錯誤的原因,請檢閱 CloudWatch 中的 REST API 執行日誌。
檢查執行日誌中是否有錯誤訊息
錯誤: Execution failed due to configuration error: There was an internal error while executing your request
檢查以下組態:
- 確認 VPC 連結負載平衡器存取且未遭刪除。
- 確認 VPC 連結處於可用狀態。如果 VPC 連結處於失敗狀態,則您必須建立新的 VPC 連結並建立其與 API 之間的關聯。
注意: 請在修改整合請求之後部署 API。
- 確認 VPC 連結的端點連線處於可用狀態。
- 如果參照的 VPC ID 中含有階段變數,請確認 VPC 連結 ID 是否正確。
- 確認 VPC 連結負載平衡器會接聽請求所設定的 HTTP/HTTPS 連接埠。檢查接聽程式是否已設定正確的連接埠。確定網路 ACL 未封鎖請求。
- 確認目標群組接受請求。網路 ACL 必須允許輸入和輸出流量,而安全群組必須允許設定連接埠的輸入流量。
- 如果請求傳回 500 錯誤,則連線可能會收到 TCP RST 封包。確認後端伺服器正在執行。確認服務正在目標連接埠的後端目標上執行。確認後端目標正在接聽目標連接埠。
- 確認在 AWS PrivateLink 上強制執行輸入規則流量選項已關閉。在 PrivateLink 流量上強制執行輸入規則會將所有輸入和輸出安全群組規則套用至 VPC 連結的流量。如果您並未將安全群組設定為允許來自 VPC 連結的流量,則安全群組可以封鎖 API Gateway 流量。若要將安全群組規則套用至 VPC 連結之外的流量,請關閉在 PrivateLink 流量上強制執行輸入規則。
錯誤: Execution failed due to configuration error: Host name 'domain.com.com' does not match the certificate subject provided by the peer (CN=myinstance.com)
確定端點網域名稱與啟用 TLS 之負載平衡器目標傳回的憑證相符。
錯誤: Execution failed due to configuration error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
當 API Gateway 找不到根憑證授權單位時,即會發生此錯誤。即使在整合 TlsConfig 屬性上將 insecureSkipVerification 設為 True,API Gateway 還是會執行基本憑證驗證。驗證會檢閱以下資訊:
您在目標執行個體設定的憑證必須從支援的憑證授權單位提供者清單受到信任。
錯誤: Execution failed due to configuration error: Cannot verify ECDH ServerKeyExchange signature
當金鑰與相應憑證不符,而且 TLS 信號交換錯誤時,即會發生此錯誤。若要解決此問題,請檢查您用於設定之憑證授權單位、憑證及金鑰的檔案內容。
錯誤: Execution failed due to an internal error
當 Amazon API Gateway 因負載平衡器上的目標重設,而未透過 VPC 連結連線至負載平衡器時,即會發生此錯誤。若要解決此問題,請將目標的逾時值設為高於負載平衡器的預設逾時值 (350 秒)。
錯誤: Execution failed due to configuration error: Not a valid protocol version: {Text of string}
當整合所發出的 HTTP 回應無效,且不符合 HTTP 規格時,即會發生此錯誤。這可能表示經過整合的後端傳回 Amazon API Gateway 的資料無效。
若要對此錯誤進行疑難排解,請執行以下操作:
- 重現您從 Amazon API Gateway 發出的請求。若要測試 Amazon API Gateway 使用的服務端點,請建立連結至服務端點 ID 的 VPC 端點。您也可以執行封包擷取,以檢閱從經過整合之後端傳回的回應。
- 若要避免重複加密,請根據目標回應將負載平衡器通訊協定變更為 TLS 或 TCP。
- 確定整合 TlsConfig 屬性上的 insecureSkipVerification 設為 True。
相關資訊
了解 Amazon API Gateway 私有整合中的 VPC 連結
使用 Amazon CloudWatch 指標來監控 REST API 執行
設定 API Gateway 私有整合的 Network Load Balancer