AWS API Gateway 自定义域的 Cname
Posted
技术标签:
【中文标题】AWS API Gateway 自定义域的 Cname【英文标题】:Cname for AWS API Gateway custom domain 【发布时间】:2018-12-26 16:17:52 【问题描述】:这个概念很简单。
通过 AWS API Gateway 创建一个指向蓝/绿部署通道的 Cname 开关。 API 有两个阶段,将蓝色和绿色映射回环境变量,然后再映射回与其专用版本关联的 Lambda 别名。因此,现在有两个单独的通道用于进行部署。所有这些都可以正常工作。
当在 Route53 中创建 Cname 以指向 API 网关的蓝色或绿色自定义域时,就会出现问题。 SSL 证书保存在 AWS Certificate Manager 中。
当我们通过 Cname 调用蓝色端点时,我们会收到 SSL 错误
curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx"
-X GET https://cname-api.example.com/questions/health
curl: (35) SSL 对等握手失败,服务器很可能需要客户端证书才能连接
而当我们直接调用自定义域时它可以工作
curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx"
-X GET https://blue-api.example.com/questions/health
HTTP/1.1 200 正常
任何指针或建议将不胜感激?
对第一条评论的回应
感谢 Michael - 是的,我们已将 SSL 证书从 eu-west-1 导出到 us-east-1 的 AWS 证书管理器中,因为我们正在运行边缘优化的自定义域名。 API Gateway 生成的 Cloudfront 与 costom 域和 cname 一起托管在 us-east-1 中,但根域托管在 eu-west-1 中。可能是这个问题?
我们正在尝试围绕启用以下标头进行进一步测试,并将报告回来 -
ResponseParameters:
method.response.header.Access-Control-Allow-Headers: true
method.response.header.Access-Control-Allow-Methods: true
method.response.header.Access-Control-Allow-Origin: true
我意识到我们可以使用一个自定义域,并使用映射到路径的阶段来划分通道,但上述是首选解决方案。
我们还向 AWS 开了一张票,因为这也让他们感到困惑,并已上报给他们的内部服务团队。
:)
【问题讨论】:
您不能随意将 CNAME 指向 API 网关端点,这听起来像是您正在做的事情。您指向的端点必须是配置为在Host
标头和 SNI 中预期该值的 one 端点。目前尚不清楚您是如何(或是否)尝试将自定义主机名与 API Gateway 中的部署相关联,或将 ACM 证书与其关联。
【参考方案1】:
因此,在与 Amazon Support 反复讨论数周后,我们得到了一个可行的解决方案,但可能不像早期解决方案中提到的那样最具成本效益。
工作流程 -
1.创建 API GW,每个阶段都有自己的自定义域。
例如blue-stage > blue-api.example.com 和 green-stage > green-api.example.com
2.然后在创建 API GW 的同一 AWS 区域中创建一个 Cname。 例如。 cname-api.example.com
3.使用与 Cname (cname-api.example.com) 相同的 DNS 条目(重复)创建一个 Web Edge Cloudfront 实例,并将此 Cloudfront 实例指向任意 S3 存储桶。
现在提出请求
curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx"
-X GET https://cname-api.example.com/questions/health
HTTP/1.1 200 正常
是的,这对于我们需要实现的目标来说太过分了,也不是最具成本效益的,我们也没有做 KISS(保持简单愚蠢)。所以是的 - 很高兴听到其他人如何构建类似的基础设施!
【讨论】:
以上是关于AWS API Gateway 自定义域的 Cname的主要内容,如果未能解决你的问题,请参考以下文章
Terraformed AWS API Gateway 自定义域名抛出 403 Forbidden