如何使用 Amazon API Gateway WebSocket API 對 410 GoneException 錯誤進行疑難排解?
上次更新日期:2022 年 11 月 3 日
當我嘗試將訊息發佈至 Amazon API Gateway WebSocket API 時,出現 "410 GoneException" 錯誤,類似於以下內容:
... "errorMessage":"GoneException: 410" ...
如何對此問題進行疑難排解?
簡短描述
如果出現以下情況,您可能會收到 "410 GoneException" 錯誤:
- 在建立連線之前,訊息已發佈至 WebSocket API。
- 連線已終止,或連線不再存在。
- 用戶端已中斷連線,然後嘗試使用相同的 connectionId 重新連線。
注意:對於 WebSocket API,需要 connectionId 才能從後端傳送回呼回應。
解決方案
若要對 WebSocket API 錯誤進行疑難排解,請開啟 Amazon CloudWatch Logs。
注意:針對 Log level (日誌層級),請選擇 INFO 以產生所有請求的執行日誌。
執行日誌包含可用來識別和疑難排解大部分 API 錯誤的資訊。例如:
- 您的 API 收到的請求
- 來自 API 的整合後端回應
- AWS Lambda Authorizer 提供的回應
- AWS 整合端點的 requestId
如需有關每種日誌記錄類型的詳細資訊,請參閱 API Gateway 的 CloudWatch 日誌格式。
在將訊息發佈至 WebSocket API 之前,確保透過使用 AWS SDK ApiGatewayManagementApi 呼叫 getConnection 操作來建立您的連線。
避免透過與 $connect 路由整合的 Lambda 函數發出 postToConnection 請求。例如,如果您要在建立用戶端連線之後發佈訊息,請執行下列動作:
- 建立由父函數非同步叫用的子 Lambda 函數。
- 在啟動新連線時,將調用 $connect 路由,並且父函數調用傳遞 connectionId 的子函數。
- Lambda 子函數會接收 connectionId,並呼叫 getConnection 操作,以驗證連線是否有效。然後,會使用 postToConnection 方法傳送訊息。