Установите базовый макет WebSocket в AWS ApiGateway - PullRequest
3 голосов
/ 09 апреля 2019

Я пытаюсь настроить чрезвычайно простой макет WebSocket в AWS ApiGateway.Тем не менее, каждая попытка, которую я пробовал, выдает ошибку:

13:36:52 (X33uOGUfIAMFq7w=) Extended Request Id: X33uOGUfIAMFq7w=
13:36:52 (X33uOGUfIAMFq7w=) Verifying Usage Plan for request: X33uOGUfIAMFq7w=. API Key: API Stage: redacted/prod
13:36:52 (X33uOGUfIAMFq7w=) API Key authorized because route '$connect' does not require API Key. Request will not contribute to throttle or quota limits
13:36:52 (X33uOGUfIAMFq7w=) Usage Plan check succeeded for API Key and API Stage redacted/prod
13:36:52 (X33uOGUfIAMFq7w=) Starting execution for request: X33uOGUfIAMFq7w=
13:36:52 (X33uOGUfIAMFq7w=) WebSocket Request Route: [$connect]
13:36:52 (X33uOGUfIAMFq7w=) Client [UserAgent: null, SourceIp: redacted] attempts to connect to WebSocket API [redacted].
13:36:52 (X33uOGUfIAMFq7w=) Execution failed due to configuration error: statusCode should be an integer which defined in request template
13:36:52 (X33uOGUfIAMFq7w=) Client [UserAgent: null, SourceIp: redacted] failed to connect to API [redacted].

Насколько я могу судить, я следовал самой простой конфигурации.Мне не нужны никакие ответы или шаблоны, просто простое соединение WebSocket, которое позволяет мне подключаться к нему и ничего не делать, или, возможно, отвечать на ping запросы с pong даже.

api route $connect

Все авторизации и ключи API отключены.Никакие шаблоны запросов или интеграционные ответы не настроены, так как они мне не нужны.Опять же, цель состоит в том, чтобы просто иметь тупой WebSocket, к которому можно подключиться.

no request templates

Однако всякий раз, когда я пытаюсь подключиться к нему, я получаю 500 ошибок с журналами ошибок сверху о коде состояния.

WebSocket connection to 'wss://redacted.execute-api.us-east-1.amazonaws.com/prod' failed: Error during WebSocket handshake: Unexpected response code: 500

1 Ответ

5 голосов
/ 10 апреля 2019

Используя следующие источники (ниже), я смог получить быстрый и свободный пример соединения AWS API Gateway, работающего с использованием конечных точек MOCK с веб-сокетами. Я уверен, что это может быть удалено, чтобы обеспечить еще лучшее понимание различных сообщений и кодов тела запроса / ответа.

  1. Сначала перейдите в API Gateway, нажмите Создать API
  2. Для Выберите протокол , выберите WebSocket
  3. Дайте API имя и используйте пример $request.body.message для выражения выбора маршрута
  4. Нажмите кнопку Создать API
  5. Выберите новый API на боковой панели и нажмите Маршруты
  6. Выберите маршрут $connect
  7. Под Обзор маршрута , установите переключатель Mock для конечной точки
  8. Для шаблона запроса введите выражение (например, с использованием 200).
  9. Для Шаблон ключа , введите ключ (например, используя 200)
  10. Для всплывающего окна о поведении прохода выберите Нет, используйте текущие настройки на данный момент
  11. Нажмите ключ шаблона 200, введите шаблон: {"statusCode" : 200}, а затем нажмите кнопку Сохранить. connect integration request

  12. Выберите Обзор маршрута , чтобы вернуться на обзорную страницу $connect, а затем нажмите кнопку Добавить интеграционный ответ

  13. Создайте ключ ответа $ default , который будет ссылаться на маршрут $default в Маршруты connect integration response

  14. Для маршрута $disconnect повторите шаги 7 - 13 для этого конкретного маршрута. disconnect route

  15. После настройки маршрута $disconnect выберите маршрут $default в области Маршруты . default route
  16. Создать Запрос на интеграцию так же, как это было сделано для $connect и $disconnect (шаги 7 - 11 )
  17. Для Интеграционный ответ в $default, мы настроим ответ маршрута немного иначе, чем $connect и $disconnect поскольку ответы этих двух маршрутов фактически ссылаются на $default в своих собственных соответствующих Интеграционных ответах .
  18. Создать ключ ответа $ default
  19. Введите Выражение выбора шаблона (в этом примере используется 200)
  20. Затем создайте ключ шаблона (используя 200 для этого примера)
  21. Нажмите Ключ шаблона 200, введите шаблон: {"statusCode" : 200, "connectionId" : "$context.connectionId"}, а затем нажмите кнопку Сохранить. default response
  22. {"connectionId" : "$context.connectionId"} был добавлен в полезную нагрузку ответа, чтобы показать, как переменные могут использоваться в ответе для представления фактического значения соединения.
  23. Наконец, в раскрывающемся списке Действия выберите Развернуть API и введите имя этапа развертывания. Это должно создать URL-адрес WebSocket, который теперь можно подключить, например, к. (wss://#######.execute-api.us-east-1.amazonaws.com/Test)
  24. Используя wscat через cli, я теперь могу подключиться к своему URL-адресу WebSocket (см. Источник ниже для установки wscat): wscat -c wss://#######.execute-api.us-east-1.amazonaws.com/Test cli websocket

Источники:

...