AWS上的Canary Release和Blue Green部署

时间:2018-12-20 03:42:12

标签: amazon-web-services blue-green-deployment canary-deployment

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

这真的使我感到困惑,为什么没有用户被路由到v2?

S3中的AWS静态Web

enter image description here

2 个答案:

答案 0 :(得分:1)

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

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

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

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

简而言之,CloudFront不直接和本机支持Blue / Green或Canary。

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

文档中有一个A/B testing example,但是该示例替换了路径。有关如何换出原点的信息,请参见Dynamic Origin Selection examples。结合这两者的逻辑,可以跨两个存储桶(或任意两个备用后端)进行A / B测试。

答案 1 :(得分:1)

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

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

就像 Michael 建议的那样,您可能希望使用 Lambda@Edge 或 Cloudfront 函数研究拥有 1 个 cloudfront 并路由到存储桶 A/B。 Here is an example