Предыдущие части: Часть 1, Часть 2, Часть 3, Часть 4
Имена доменов воспринимаются как само собой разумеющееся. Это одна из тех вещей, наличие которых предполагается по умолчанию, и если она вдруг отсутствует — наступает катастрофа.
Мы видим тонны обучающих материалов, показывающих, как создавать API или сайт, но редко встречаем информацию о том, как добавлять один из необходимых финишных штрихов — имя домена.
Поэтому сегодня мы завяжем бантик на нашем обширном руководстве по WebSocket, добавив в него собственный домен.
Это уже пятая часть ознакомительной серии статей по WebSocket. Каждая статья строится на предыдущих, потому тем, кто только к нам присоединился, рекомендую начать с первых четырех:
- Часть первая — Знакомство с AWS WebSocket;
- Часть вторая — Использование лямбда-авторизатора с AWS WebSocket;
- Часть третья — AWS WebSocket: написание документации с помощью Async API Spec;
- Часть четвертая — Cоздание пользовательских уведомлений с помощью AWS WebSocket.
Подготовка
Перед настройкой собственного домена вам нужно сделать две вещи: купить себе доменное имя и настроить зону публичного хостинга. Это нужно будет делать вручную, чтобы собрать и развернуть весь программный каркас из пятой части репозитория GitHub для WebSocket.
Приобретать имя домена необходимо вручную. Зону хостинга технически можно получить через наш шаблон SAM, но он был создан с предположением, что у вас под тем же доменным именем также есть REST или HTTP API. При этом допущении мы бы повторно использовали зону публичного хостинга в Route53.
Новые параметры
Если вы прошли всю серию статей и использовали файл samconfig.toml
, генерируемый командой sam deploy --guided
, то вам нужно выполнить эту команду еще раз. Если же вы только начали работу, то вам нужно выполнить ее в первый раз, чтобы настроить параметры развертывания.
Всего в развертывании домена задействовано три параметра:
DeployCustomDomain
— установите наtrue
, если хотите развернуть личный домен. В противном случае установитеfalse
;DomainName1
— доменное имя, за которым вы хотите разместить WebSocket. В моем примере используетсяws.gopherholesunlimited.com
;HostedZoneId
— идентификатор созданной вами публичной зоны хостинга.
AWS ресурсы пользовательского домена
В настройке доменного имени участвует несколько компонентов, ни один из которых не назовешь интуитивно понятным.
Ресурсы, которые мы развертываем, чтобы наш 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 завершается. Надеюсь, что вам понравилось изучать эту тему так же, как мне понравилось ее излагать. Это было небольшое приключение. Надеюсь, что вы сможете должным образом развернуть весь проект, опробовать его и даже интегрировать в собственное приложение!
Успехов вам в написании кода!
Читайте также:
- Как масштабировать Angular без ограничений
- А вы знали, что для HTML Чак Норрис - это цвет?
- Потоки Kafka: как обрабатывать CSV-файлы для выполнения вычислений
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Allen Helton: How to Add a Custom Domain To Your AWS WebSocket