使用CNAME DNS条目调用AWS Lambda函数

时间:2019-12-10 19:49:16

标签: dns aws-lambda cname

我目前在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基数。如果我在nslookup上运行my.custom.name.com,它会正确解析并指向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。当邮递员收到我的信时,他问他的老板address2在哪里,他的老板告诉他address2 = address1。然后,他将这封信投递到地址1。

以此类推,address2不需要实际存在就可以进行此事务。除非我误会,否则AWS API Gateway要求存在address2,因为字母首先到达address2,然后到address1

似乎正在发生的事情是,AWS以某种方式知道address2是等式的一部分,因为它在使用address2而不是address1时拒绝了请求。

在这种情况下有什么区别?如何设置DNS CNAME和AWS来使情况1发生?

1 个答案:

答案 0 :(得分:0)

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的Cloudfront分发地址。
  4. 转到Route53(或您的域注册商)并创建一个A记录,以将子域api.example.com指向云的分发地址,例如d3fgrtgh @ cloudfront.net`

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

相关问题