Подстановочный поддомен 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 долларов в месяц).

  1. Под EC2 > Балансировщики нагрузки создайте ALB
  2. Укажите это на вашу лямбда-функцию
  3. В Route53 настройте *.yourdomain.com как псевдоним A для ALB

Пользовательские домены с подстановочными знаками теперь поддерживаются AWS API Gateway.

https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

Другие вопросы по тегам