2

我目前在 AWS 上部署了一个 lambda 函数。Lambda 的 URL 是https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/stage_name_here.

我在我的 DNS 中创建了一个 CNAME 条目,它指向 my.custom.name.comLambda: 的基础https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/。我不拥有该域名name.com。这纯粹是一个 CNAME 引用,我的 DNS 将解析为 lambda 基础。如果我继续运行nslookupmy.custom.name.com它会正确解析并指向https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/

我可以在调用时通过 Postman 正确使用 lambda https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/stage_name_here,但是如果我尝试使用 的任何变体my.custom.name.com/stage_name_here,它会返回

{
  'message': 'forbidden'
}

我的理解是,当我尝试使用该 CNAME 发出请求时,它首先会转到我的 DNS。我的 DNS 将该 CNAME 解析为 lambda 基地址。我的理解是 AWS 不会知道,my.custom.name.com因为我的 DNS 只使用它来知道在哪里发送请求。

我理解的一个类比是我试图向一个地址发送一封信:address1. 我没有在信上写 address1,而是写address2. 当邮递员收到我的信时,他问他的老板在哪里address2,他的老板告诉他address2 = address1。然后他把信送到address1。

在那个类比中,address2并不需要实际存在才能发生该交易。除非我误解,AWS API Gateway 需要address2存在,因为字母先到address2然后再到address1.

似乎正在发生的事情是,AWS 不知何故知道这address2是等式的一部分,因为它在address2使用时拒绝请求而不是address1.

这种情况有什么区别,我如何设置 DNS CNAME 和 AWS 以使情况 1 发生?

4

1 回答 1

2

AWS API 网关控制台有一个内置机制,称为custom domains. 这正是您所需要的。您需要按照@LostJon 指出的那样进行设置。

基本步骤是:

  1. 使用 Amazon ACM 创建 SSL 证书
  2. 从 API 网关控制台创建自定义域,例如api.example.com,在此步骤中,选择通过步骤 1 获得的域的 SSL 证书
  3. 创建一个basepath指向basepath您的 API。例如,基本路径/payment指向您的 api,这使得通过https://api.example.com/payment 此过程可以访问它还会为您提供一个云端分发地址,例如 d3fgrtgh@cloudfront.net`
  4. 转到 Route53(或您的域注册)并创建一条A记录以将子域api.example.com指向云端分发地址,例如 d3fgrtgh@cloudfront.net`

参考: https ://hackernoon.com/how-to-setup-subdomain-for-aws-api-gateway-d526a9fd6722

于 2019-12-10T21:14:02.207 回答