如何使用 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 Gateway 的 CloudWatch 日誌格式

在將訊息發佈至 WebSocket API 之前,確保透過使用 AWS SDK ApiGatewayManagementApi 呼叫 getConnection 操作來建立您的連線。

避免透過與 $connect 路由整合的 Lambda 函數發出 postToConnection 請求。例如,如果您要在建立用戶端連線之後發佈訊息,請執行下列動作:

  1. 建立由父函數非同步叫用的子 Lambda 函數。
  2. 在啟動新連線時,將調用 $connect 路由,並且父函數調用傳遞 connectionId 的子函數。
  3. Lambda 子函數會接收 connectionId,並呼叫 getConnection 操作,以驗證連線是否有效。然後,會使用 postToConnection 方法傳送訊息。