AWS上的金丝雀发布和蓝绿部署

3
我目前正在AWS S3上实施Canary Release和Blue Green Deployment。基本上,我创建了两个S3桶(v1和v2)和2个云前端(我没有添加CNAME)。然后,我在Route 53中创建了2个A别名记录,每个记录的权重路由策略为50%。然而,当我使用笔记本电脑和手机访问我的域名时,我只被路由到v1。我甚至让我的同事打开我的域名,他们也被路由到v1。
这真的让我困惑,为什么没有用户被路由到v2?
AWS S3中的静态网页

enter image description here

2个回答

4
分配的 dyyyexample.cloudfront.netdzzzexample.cloudfront.net 主机名将流量路由到您的 CloudFront 分发的同一位置。CloudFront 无法看到您的 DNS 别名条目,因此不知道跟随哪个别名。
相反,它查看浏览器发送的 TLS SNI 和 HTTP Host 标头。它使用此信息与分发的备用域名匹配 - 而无需更改 DNS。
您站点的主机名 example.com 只配置为一个分发的备用域名,因为 CloudFront 不允许您在多个分发上提供相同的值。
如果将该备用域名条目切换到另一个分发,所有流量都将转移到另一个分发。
简而言之,CloudFront 不直接和本地支持蓝/绿或金丝雀部署。
解决方法是使用 Lambda@Edge 触发器和 cookie 将每个查看者锁定到一个 或另一个源。Lambda@Edge 源请求触发器允许在请求正在传输时更改源。
文档中有一个A/B 测试示例,但该示例会替换路径。请参阅动态源选择示例,了解如何替换源。将这两个示例的逻辑结合起来,可以在两个存储桶(或任何两个备用后端)之间进行 A/B 测试。

2
您所解释的内容应该是在Cloudfront中利用“重叠别名”来实现的。您可以配置一个分发来监听app.example.com,另一个分发来监听*.example.com,并使用Route53加权路由来处理app.example.com。
然而,对于金丝雀发布,加权路由可能不是理想的解决方案。这是由于DNS传播/缓存以及它不是黏性的。
像Michael建议的那样,您可能希望研究一下使用Lambda@Edge或Cloudfront函数将1个Cloudfront路由到Bucket A/B的方法。 这里是一个例子

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接