1

我目前正在 AWS S3 上的静态网站上实施 Canary 发布和蓝绿部署。基本上,我创建了两个 S3 存储桶(v1 和 v2)和 2 个云前端(我没有附加 CNAME)。然后,我在 Route 53 中创建 2 个 A 别名记录,每个权重路由策略为 50%。但是,我只使用笔记本电脑和移动设备访问我的域被路由到 v1。我什至要求我的同事打开我的域,他们也被路由到 v1。

我真的很困惑为什么没有用户被路由到 v2?

S3 中的 AWS 静态 Web

在此处输入图像描述

4

2 回答 2

2

将流量路由到您的 CloudFront 分配的分配dyyyexample.cloudfront.netdzzzexample.cloudfront.net主机名将转到同一个位置。CloudFront 看不到您的 DNS 别名条目,因此它不知道遵循了哪个别名。

相反,它查看 TLS SNI 和Host浏览器发送的 HTTP 标头。它使用此信息与您的分配的备用域名相匹配——无需更改 DNS。

您站点的主机名example.com仅在您的一个分配上配置为备用域名,因为 CloudFront 不允许您在多个分配上预置相同的值。

如果您将该备用域名条目交换到另一个分布,所有流量都将转移到另一个分布。

简而言之,CloudFront 不直接和原生地支持蓝/绿或金丝雀。

解决方法是使用 Lambda@Edge 触发器和 cookie 将每个查看器锁定到一个或另一个源。Lambda@Edge 源请求触发器允许在请求进行时更改源。

文档中有一个A/B 测试示例,但该示例交换了路径。有关如何换出原点的信息,请参阅动态原点选择示例。结合这两者的逻辑允许跨两个存储桶(或任何两个备用后端)进行 A/B 测试。

于 2018-12-20T04:31:48.487 回答
1

如果您在 Cloudfront 中使用“重叠别名”,您所解释的内容应该会起作用。您将一个分发配置为侦听 app.example.com,将另一个分发到 *.example.com,并为 app.example.com 使用 Route53 加权路由

然而,加权路由可能不是金丝雀版本的理想解决方案。这是由于 DNS 传播/缓存以及它不具有粘性的事实。

就像迈克尔建议的那样,您可能希望考虑拥有 1 个云端并使用 Lambda@Edge 或 Cloudfront 函数路由到存储桶 A/B。 这是一个例子

于 2021-06-19T11:14:25.610 回答