AWS Route 53 wildcard subdomain with Api gateway
R

3

7

I have a Hosted zone name example.com on AWS Route53 DNS service. I have multiple subdomain record sets like:

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

All the records point to a Cloudfront generated by Api Gateway Custom Domain.

I want to offer a custom subdomain to all of my users:

USERNAME.example.com
alice.example.com
bob.example.com
...

I do not know in advance the username of all my users and there can be 1000s of them.

How can I setup Route53 to route all non defined subdomains to a specific Cloudfront => Api Gateway => AWS Lambda instance?

Referee answered 11/7, 2018 at 17:24 Comment(2)
Have you tried creating a wildcard SSL certificate in Virginia Region in AWS Certificate Manager and assign to the Cloudfront distribution?Admissible
I did created a wildcard SSL certificate but the certificate and the wildcard subdomain for Cloudfront => Api Gateway are two different things.Referee
T
4

Wildcard custom domains are now supported by AWS API Gateway.

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

Tattletale answered 23/10, 2019 at 7:1 Comment(0)
D
6

From amazon route53 docs: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DomainNameFormat.html

Using an Asterisk (*) in the Names of Hosted Zones and Records You can create hosted zones that include * in the name. Note the following:

You can't include an * in the leftmost label in a domain name. For example, *.example.com is not allowed.

If you include * in other positions, DNS treats it as an * character (ASCII 42), not as a wildcard.

You can also create records that include * in the name. DNS treats the * character either as a wildcard or as the * character (ASCII 42), depending on where it appears in the name. Note the following restrictions on using * as a wildcard in the name of records:

The * must replace the leftmost label in a domain name, for example, .example.com. It can't replace any of the middle labels, for example, marketing..example.com.

The * must replace the entire label. For example, you can't specify prod.example.com or prod.example.com.

You can't use the * as a wildcard for records that have a type of NS.

For records, if you include * in any position other than the leftmost label in a domain name, DNS treats it as an * character (ASCII 42), not as a wildcard.

After that you can get the subdomain of the request within your API and perform a certain action for it, e.g., select a user by username using subdomain.

EDIT: Unfortunately AWS API Gateway does not support wild-card subdomain name as we can see in the first point of this link: Api Gateway Known Issues

EDIT 2: Now the AWS API Gateway has support for wild-card subdomains: API Gateway Wild Card sub domain Thanks @justin tailor

Dasteel answered 31/7, 2018 at 17:48 Comment(0)
A
4

As mentioned, API Gateway doesn't support wildcard domains.

However, you can achieve the same thing with a load balancer (though it costs ~$17/month).

  1. Under EC2 > Load balancers, create an ALB
  2. Point it to your lambda function
  3. In Route53, set up *.yourdomain.com as an A alias to the ALB
Altamirano answered 28/6, 2019 at 22:56 Comment(0)
T
4

Wildcard custom domains are now supported by AWS API Gateway.

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

Tattletale answered 23/10, 2019 at 7:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.