【发布时间】: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 证书与其关联。
标签: amazon-web-services ssl amazon-route53 cname api-gateway