【发布时间】:2019-12-10 19:49:16
【问题描述】:
我目前在 AWS 上部署了一个 lambda 函数。 Lambda 的 URL 是 https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/stage_name_here。
我在我的 DNS 中创建了一个 CNAME 条目,它指向
my.custom.name.com 到 Lambda 的底部:https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/。我不拥有域名name.com。这纯粹是一个 CNAME 引用,我的 DNS 将解析为 lambda 基础。如果我在my.custom.name.com 上运行nslookup,它会正确解析并指向https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/
在调用https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/stage_name_here 时,我可以通过 Postman 正确使用 lambda,但是如果我尝试使用 my.custom.name.com/stage_name_here 的任何变体,它会返回
{
'message': 'forbidden'
}
我的理解是,当我尝试使用该 CNAME 发出请求时,它首先会转到我的 DNS。我的 DNS 将该 CNAME 解析为 lambda 基地址。我的理解是 AWS 不会知道 my.custom.name.com,因为我的 DNS 只使用它来知道将请求发送到哪里。
我理解的一个类比是我正在尝试向地址发送一封信:address1。我没有在信上写地址1,而是写address2。当邮递员收到我的信时,他问他的老板address2 在哪里,他的老板告诉他address2 = address1。然后他把信送到address1。
在那个类比中,address2 不需要实际存在才能发生此事务。除非我误解了,否则 AWS API Gateway 要求存在 address2,因为字母首先是 address2,然后是 address1。
似乎正在发生的事情是,AWS 不知何故知道address2 是等式的一部分,因为当使用address2 而不是address1 时,它会拒绝请求。
这种情况有什么区别,我如何设置 DNS CNAME 和 AWS 以使情况 1 发生?
【问题讨论】:
-
您是否通过 API 网关进行了“自定义域名”?如果没有,你会想要:)
-
据我了解,这不适用于内部 DNS CNAME 引用,仅适用于外部域。尝试在 API Gateway 中创建自定义域时,需要 SSL 证书。似乎获得此信息的方法是通过您的注册商,这不适用于内部 CNAME 参考。根据本文档docs.aws.amazon.com/apigateway/latest/developerguide/…,它声明“您必须拥有注册的互联网域名才能为您的 API 设置自定义域名”
-
您需要创建一个自定义域名,因为API Gateway前面是Cloudfront。你是对的,这不能用于内部网络,但是上面的问题陈述中没有提到。您确实需要拥有您的域名,并且仍然通过 api 网关设置自定义域名。 @Arun K 已经准确地概述了这个过程。
标签: dns aws-lambda cname