【问题标题】:Using CNAME DNS Entry to call AWS Lambda Function使用 CNAME DNS 条目调用 AWS Lambda 函数
【发布时间】: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


【解决方案1】:

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

基本步骤是:

  1. 使用 Amazon ACM 创建 SSL 证书
  2. 从 API 网关控制台创建自定义域,例如 api.example.com,在此步骤中,选择通过步骤 1 获得的域的 SSL 证书
  3. 创建一个basepathbasepath 指向您的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

【讨论】:

  • 我已经编辑了我的原始帖子以使其更加清晰,但我没有域并且在此过程中无法拥有域。拥有一个域似乎是使用 API Gateway 自定义域的必要部分。
  • 你是对的。您需要一个域才能获得 SSL 证书
猜你喜欢
  • 1970-01-01
  • 2021-09-19
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多