将 CloudFront 主机 Header 转发到 API 网关

Forwarding CloudFront Host Header to API Gateway

我们有一个指向 CloudFront 分配的通配符 (*) 子域。来源是API网关。

我们需要知道 API 网关中的原始 Host header,以便我们可以路由请求。

简单地将 CloudFront 中的 Host header 列入白名单 returns 通过 HTTP 访问 CloudFront 分发时出错 - 大概是因为 API 网关需要 Host header 知道要调用哪个 API。

如果是这种情况,是否可以通过 X-Forwarded-Host 从 CloudFront 将 Host header 转发到 API 网关?或者...是否有另一种方法可以将通配符子域与 API 网关一起使用?

这并不能完全回答您最初的问题,但它可能是实现您目标的另一种方式。

首先,在所有环境(包括生产环境)之间共享 CF 分布会带来风险 - 当您需要测试对 CF 配置的更改时,您必然会使用未经测试的更改来修改生产 CF 分布,这可能会产生重大影响后果。

其次,虽然如果您可以在 CI/CD 管道中的所有阶段测试整个环境,这很好,但这并不总是可能的(并且 CF 对此特别不利) - 所以它是关于在两者之间找到平衡反馈周期短,测试彻底。

解决方案通常是在您的管道中引入额外的阶段,其中早期阶段对最常见的问题提供快速反馈,后期阶段对不太常见的问题提供较慢的反馈。

对于你的情况,我建议:

  1. 分支部署不部署 CF - 测试直接针对 API 网关
  2. Master/Default 部署确实部署 CF - 到 'staging' 环境 - 测试目标是暂存 CF 分发
  3. 成功测试到 'staging' 环境的版本被提升到生产环境

通过引入暂存环境,您可以获得关于分支构建的快速反馈,但您仍然有机会在进入生产之前测试缓存后面的东西。

如果您正在更改 CF 配置,您可以让您的部署脚本动态地决定在分支部署中包含 CF 关闭某些触发器(可能在分支名称中存在单词 'cloudfront' -尽管对于某些人来说这可能有点 'magical'!)并且您可以在合并到 master 以在暂存中进行测试之前在分支上测试这些更改。