Предыдущие части: Часть 1, Часть 2, Часть 3, Часть 4

Имена доменов воспринимаются как само собой разумеющееся. Это одна из тех вещей, наличие которых предполагается по умолчанию, и если она вдруг отсутствует  —  наступает катастрофа.

Мы видим тонны обучающих материалов, показывающих, как создавать API или сайт, но редко встречаем информацию о том, как добавлять один из необходимых финишных штрихов  —  имя домена

Поэтому сегодня мы завяжем бантик на нашем обширном руководстве по WebSocket, добавив в него собственный домен. 

Это уже пятая часть ознакомительной серии статей по WebSocket. Каждая статья строится на предыдущих, потому тем, кто только к нам присоединился, рекомендую начать с первых четырех:

Подготовка

Перед настройкой собственного домена вам нужно сделать две вещи: купить себе доменное имя и настроить зону публичного хостинга. Это нужно будет делать вручную, чтобы собрать и развернуть весь программный каркас из пятой части репозитория GitHub для WebSocket.

Приобретать имя домена необходимо вручную. Зону хостинга технически можно получить через наш шаблон SAM, но он был создан с предположением, что у вас под тем же доменным именем также есть REST или HTTP API. При этом допущении мы бы повторно использовали зону публичного хостинга в Route53.

Новые параметры

Если вы прошли всю серию статей и использовали файл samconfig.toml, генерируемый командой sam deploy --guided, то вам нужно выполнить эту команду еще раз. Если же вы только начали работу, то вам нужно выполнить ее в первый раз, чтобы настроить параметры развертывания.

Всего в развертывании домена задействовано три параметра:

  • DeployCustomDomain  —  установите на true, если хотите развернуть личный домен. В противном случае установите false;
  • DomainName1  —  доменное имя, за которым вы хотите разместить WebSocket. В моем примере используется ws.gopherholesunlimited.com;
  • HostedZoneId — идентификатор созданной вами публичной зоны хостинга.

AWS ресурсы пользовательского домена

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

Схема компонентов для настройки находящегося за доменом WebSocket API

Ресурсы, которые мы развертываем, чтобы наш WebSocket использовал созданный домен:

  • ACM Certificate  —  сертификат AWS, подтверждающий наше обладание доменом;
  • API Gateway v2 Domain Name  —  настраивает домен для WebSocket в API Gateway;
  • Domain Mapping From Domain Name to API  —  устанавливает базовый путь (/) для использования нашего WebSocket API с правильной Stage (стадией);
  • CNAME DNS Record  —  DNS-запись, которая отображает id нашего доменного имени в глобальную запись.

Все они настроены и готовы для развертывания в шаблоне SAM. Как только вы установите параметры развертывания и выполните команду deploy, наш WebSocket станет доступен по нашему имени домена.

Важно! Развертывание SAM будет работать, если вы купили имя домена через Route53. AWS позволяет выполнять автоматическую проверку DNS, если ваш домен находится в Route53, размещен в аккаунте AWS, куда вы делаете развертывание, и используется проверка DNS (мы используем).

Выбор доменного имени

При выборе имени домена нужно помнить, что оно не может принадлежать существующему домену с HTTP или REST API. Имена доменов должны использоваться только с одним видом API.

Это значит, если у вас уже привязан REST или HTTP API к имени домена вроде api.gopherholesunlimited.com, то вы не сможете использовать базовый путь для WebSocket (api.gopherholesunlimited.com/websocket). Это должен быть собственный отдельный домен в API Gateway.

Исходя из этого, я бы посоветовал создать самостоятельный поддомен для WebSocket, как сделал я: ws.gopherholesunlimited.com.

После организации доменного имени метод подключения, по большому счету, остается прежним. Вам также нужно будет подключаться к вашему домену через протокол wss, и также потребуется добавлять заголовок access_token. Мой URL подключения к WebSocket будет таким:

wss://ws.gopherholesunlimited.com?access_token=eyJ******

Обновление URL подключения в Postman и попытка подключиться…

Успешное подключение через наш личный домен!

Заключение

На этом наша серия по WebSocket завершается. Надеюсь, что вам понравилось изучать эту тему так же, как мне понравилось ее излагать. Это было небольшое приключение. Надеюсь, что вы сможете должным образом развернуть весь проект, опробовать его и даже интегрировать в собственное приложение!

Успехов вам в написании кода!

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Allen Helton: How to Add a Custom Domain To Your AWS WebSocket

Предыдущая статьяБэкенд-разработчик: какие знания нужны для трудоустройства
Следующая статьяКогда не следует использовать нейронные сети