Ошибка подписки на движке Hasura GraphQL, развернутом с Cloudfoundry на AWS

#graphql #cloud-foundry #amazon-elb #hasura

#graphql #cloud-foundry #amazon-elb #hasura

Вопрос:

Движок Hasura GraphQL развернут на экземпляре Cloudfoundry, поддерживаемом AWS, он предоставляется на поддомене через AWS ELB. Консоль доступна по адресуhttps://hasura.cloud.domain.com/console и GraphQL API принимает запросы на https://hasura.cloud.domain.com/v1alpha1/graphql.

Но когда подписка выполняется с консоли, возникает ошибка со следующим журналом на консоли JS:

 vendor.js:1 WebSocket connection to 'wss://hasura.cloud.domain.com/v1alpha1/graphql' failed: Error during WebSocket handshake: Unexpected response code: 200
  

Анализ фреймов websocket в Chrome указывает на ошибку с (Opcode -1) .

По сути, клиенту не удается открыть соединение с websocket.

Ответ №1:

Некоторые средства балансировки нагрузки не поддерживают передачу запросов на подтверждение связи WebSocket, содержащих заголовок обновления, на маршрутизатор CF. Например, Amazon Web Services (AWS) Elastic Load Balancer (ELB) не поддерживает такое поведение. В этом сценарии необходимо настроить балансировщик нагрузки для пересылки TCP-трафика на ваш маршрутизатор CF для поддержки WebSockets.

ссылка:https://docs.cloudfoundry.org/adminguide/supporting-websockets.html#config

В принципе, требуется некоторая настройка с AWS ELB и маршрутизатором CF, чтобы заставить websockets работать. Обычно это делается путем настройки нестандартного порта для пересылки всех TCP-подключений к маршрутизатору CF. Мы узнали от наших клиентов, что этот порт обычно равен 4443.

Итак, чтобы заставить работать подключения к websocket, выберите конечную точку как wss://hasura.cloud.domain.com:4443/v1alpha1/graphql для подключений к websocket и, следовательно, подписок.

Консоль можно открыть по адресуhttps://hasura.cloud.domain.com:4443 также.