我目前在 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
。我没有在信上写 address1,而是写 address2
。当 postman 收到我的信时,他问他的老板 address2
在哪里,他的老板告诉他 address2 = address1
。然后他把信送到address1。
在这个类比中,address2
并不需要实际存在才能发生此交易。除非我误解了,否则 AWS API Gateway 要求 address2
存在,因为字母首先转到 address2
,然后转到 address1
。
似乎正在发生的事情是 AWS 以某种方式知道 address2
是等式的一部分,因为当使用 address2
而不是 address1< 时它拒绝请求
.
这种情况有什么区别,我如何设置 DNS CNAME 和 AWS 才能使情况 1 发生?
最佳答案
AWS API 网关控制台具有称为自定义域
的内置机制。这正是您所需要的。您需要按照@LostJon 指出的那样进行设置。
基本步骤是:
- 使用 Amazon ACM 创建 SSL 证书
- 从 API 网关控制台创建一个自定义域,例如
api.example.com
,在此步骤中,为您的域选择通过第 1 步获得的 SSL 证书 - 创建一个
basepath
将basepath
指向您的API。例如基本路径/payment
指向您的 api,这使得它可以通过https://api.example.com/payment
访问 此过程还将为您提供云端分发地址,例如 d3fgrtgh@cloudfront.net` - 转到 Route53(或您的域注册)并创建一个
A
记录以将子域api.example.com
指向云端分发地址,例如 d3fgrtgh@cloudfront.net `
引用: https://hackernoon.com/how-to-setup-subdomain-for-aws-api-gateway-d526a9fd6722
关于dns - 使用 CNAME DNS 条目调用 AWS Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59274369/