AWS Green/Blue S3 白皮书的静态部署似乎不可能

AWS Green/Blue Static Deploy off S3 whitepaper does not seem possible

我正在尝试根据 this (oldish) whitepaper.

实施由 S3 支持的静态文件的 green/blue AWS 部署

简而言之,我们的想法是创建两个单独的 CloudFront 分配,它们指向 S3 存储桶中的两个单独的文件夹。一种是“绿色”,一种是“蓝色”。部署一个或另一个后,您可以使用加权路由将流量从绿色切换到蓝色,反之亦然。

一切都很好,但问题在于使用您自己的域和链接证书。

为了让 CloudFront 正确地提供 S3 文件(通过 https 和您自己域上的证书),您需要在配置 CloudFront 分配时在“备用域名 (CNAME)”字段中输入 FQDN。但是,您不能在多个 Cloudfront 发行版中使用相同的名称。

因此,我需要为每个云端分布使用不同的 url,例如blue.mydomain.com 和 green.mydomain.com

但是,如果我这样做,那么在关联的 Route53 条目中使用带有单个 A 记录的加权路由将不起作用,因为名称必须与 Cloudfront 分发中输入的“CNAME”匹配以防止 ssl 错误。我错过了什么吗?我可以添加自己的反向代理或其他东西,但我真的不想那样做。

TL;DR 这份白皮书似乎无法按原样实施?

您可以使用带有两个 AWS 存储桶的单个 CloudFront 分配作为网站,并在部署应用程序时切换它们。您可以使用 Lambda@Edge/Cloudfront 函数修改查看器请求的另一个选项,以便将请求重定向到正确的来源或实施加权路由。

此外,我建议考虑使用 *.domain_name 进行蓝色分发,app.domain_name 用于另一个具有 ACM 证书 *.domain_name 的分发。这允许您使用相同的 FQDN 作为两者的入口点。

考虑到 Cloudfront 是 HA 和全球 AWS 服务这一事实。没有必要将它包含在您的 blue/green 部署模式中。 Lambda@Edge 或 Cloudfront 函数对于在源之间切换可能非常有用。 There is an example.