具有Api网关的AWS Route 53通配符子域

时间:2018-07-11 17:24:02

标签: amazon-web-services subdomain aws-api-gateway amazon-route53 wildcard-subdomain

我在AWS Route53 DNS服务上有一个托管区域名称example.com。 我有多个子域记录集,例如:

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

所有记录都指向由Api Gateway自定义域生成的Cloudfront。

我想为所有用户提供一个自定义子域:

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

我不知道我所有用户的用户名,他们可能有1000个。

如何设置Route53将所有未定义的子域路由到特定的Cloudfront => Api Gateway => AWS Lambda实例?

3 个答案:

答案 0 :(得分:4)

来自Amazon route53文档: https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DomainNameFormat.html

  

在托管区域和记录的名称中使用星号(*),您可以   创建名称中包含*的托管区域。请注意以下几点:

     

您不能在域名的最左侧标签中包含*。对于   例如,不允许使用* .example.com。

     

如果在其他位置加上*,DNS会将其视为*字符   (ASCII 42),而不是通配符。

     

您还可以创建名称中包含*的记录。 DNS对待   *字符可以是通配符,也可以是*字符(ASCII 42),具体取决于它在名称中的出现位置。注意以下   在记录名称中将*用作通配符的限制:

     

*必须替换域名中最左边的标签,例如,    .example.com。它不能替换任何中间标签,例如marketing。 .example.com。

     

*必须替换整个标签。例如,您不能指定    prod.example.com或prod .example.com。

     

对于具有NS类型的记录,不能将*用作通配符。

     

对于记录,如果在最左边以外的任何位置加上*   域名中的标签,DNS会将其视为*字符(ASCII 42),   而不是通配符。

此后,您可以在API中获取请求的子域并对其执行特定操作,例如,使用子域按用户名选择一个用户。

编辑: 不幸的是,AWS API Gateway不支持通配符子域名,正如我们在此链接的第一点所看到的: Api Gateway Known Issues

答案 1 :(得分:1)

如上所述,API Gateway不支持通配符域。

但是,您可以使用负载平衡器实现相同的目标(尽管每月费用约为17美元)。

  1. 在EC2>负载均衡器下,创建一个ALB
  2. 将其指向您的lambda函数
  3. 在Route53中,将* .yourdomain.com设置为ALB的A别名

答案 2 :(得分:0)