Подстановочный поддомен AWS Route 53 со шлюзом Api
У меня есть имя хост-зоны example.com в службе DNS AWS Route53. У меня есть несколько наборов записей поддоменов, таких как:
api.example.com - type A - ALIAS xxx.cloudfront.net
www.example.com - type A - ALIAS xxx.cloudfront.net
app.example.com - type A - ALIAS xxx.cloudfront.net
Все записи указывают на Cloudfront, сгенерированный Api Gateway Custom Domain.
Я хочу предложить собственный поддомен всем моим пользователям:
USERNAME.example.com
alice.example.com
bob.example.com
...
Я не знаю заранее имени пользователя всех моих пользователей, и их может быть несколько тысяч.
Как настроить Route53 для маршрутизации всех неопределенных поддоменов в определенный Cloudfront => Api Gateway => AWS Lambda?
1 ответ
Из документов amazon route53: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DomainNameFormat.html
Использование звездочки (*) в именах размещенных зон и записей Вы можете создавать размещенные зоны, которые включают * в имени. Обратите внимание на следующее:
Вы не можете включить * в крайнюю левую метку в имени домена. Например, *.example.com не допускается.
Если вы включите * в другие позиции, DNS воспринимает его как символ * (ASCII 42), а не как подстановочный знак.
Вы также можете создавать записи, которые включают * в имени. DNS обрабатывает символ * либо как подстановочный знак, либо как символ * (ASCII 42), в зависимости от того, где он встречается в имени. Обратите внимание на следующие ограничения на использование * в качестве подстановочного знака в имени записей:
Знак * должен заменить крайнюю левую метку в доменном имени, например, .example.com. Он не может заменить ни одну из средних меток, например, маркетинг..example.com.
Знак * должен заменить всю этикетку. Например, вы не можете указать prod.example.com или prod.example.com.
Вы не можете использовать * в качестве подстановочного знака для записей, которые имеют тип NS.
Для записей, если вы включаете * в любую позицию, отличную от крайней левой метки в имени домена, DNS обрабатывает его как символ * (ASCII 42), а не как подстановочный знак.
После этого вы можете получить поддомен запроса в вашем API и выполнить для него определенное действие, например, выбрать пользователя по имени пользователя, используя поддомен.
РЕДАКТИРОВАТЬ: К сожалению, AWS API Gateway не поддерживает поддоменное имя подстановочного знака, как мы видим в первом пункте этой ссылки: Известные проблемы Api Gateway
Как уже упоминалось, API Gateway не поддерживает подстановочные домены.
Однако вы можете добиться того же с помощью балансировщика нагрузки (хотя это стоит ~ 17 долларов в месяц).
- Под EC2 > Балансировщики нагрузки создайте ALB
- Укажите это на вашу лямбда-функцию
- В Route53 настройте *.yourdomain.com как псевдоним A для ALB
Пользовательские домены с подстановочными знаками теперь поддерживаются AWS API Gateway.
https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html