Como posso solucionar erros 410 GoneException com as APIs de WebSocket do Amazon API Gateway?

Data da última atualização: 03/11/2022

Recebo um erro “410 GoneException” ao tentar publicar uma mensagem na minha API de WebSocket do Amazon API Gateway, semelhante à seguinte:

...
"errorMessage": "GoneException: 410" 
...

Como faço para corrigir isso?

Breve descrição

Você poderá receber o erro “410 GoneException” se:

  • Uma mensagem foi postada na API de WebSocket antes que a conexão fosse estabelecida.
  • A conexão foi encerrada ou a conexão não existe mais.
  • O cliente se desconectou e tentou se reconectar usando o mesmo connectionId.

Observação: Para as APIs de WebSocket, o connectionId é necessário para enviar uma resposta de retorno de chamada do back-end.

Resolução

Para solucionar erros da API de WebSocket, ative o Amazon CloudWatch Logs.

Observação: em Log level (Nível de log), escolha INFO para gerar logs de execução para todas as solicitações.

Os logs de execução contêm informações que você pode usar para identificar e solucionar a maioria dos erros de API. Por exemplo:

Para obter mais informações sobre cada tipo de registro, consulte Formatos de log do CloudWatch para o API Gateway.

Antes de publicar mensagens nas APIs de WebSocket, certifique-se de que sua conexão esteja estabelecida chamando a operação getConnection usando a API do AWS SDK ApiGatewayManagementApi.

Evite fazer a solicitação postToConnection a partir da função Lambda integrada à sua rota $connect. Por exemplo, se você quiser publicar uma mensagem depois que a conexão do cliente for estabelecida, faça o seguinte:

  1. Crie uma função secundária do Lambda que seja invocada de forma assíncrona pela função principal.
  2. No início de uma nova conexão, a rota $connect é invocada e a função principal invoca a função secundária passando o connectionID.
  3. A função secundária do Lambda recebe o connectionID e chama a operação getConnection para verificar se a conexão é válida. Em seguida, a mensagem é enviada usando o método postToConnection.