如何在AWS中为两个CloudFront设置Canary Release?

时间:2018-09-17 02:38:25

标签: amazon-web-services amazon-cloudfront

我们的网站只是一个网络应用。因此,我们使用CloudFront和S3进行托管。现在,我想使用canary版本将5%的用户重定向到新版本,以便进行一些测试。但是我发现AWS似乎无法做到这一点我无法弄清楚如何做到这一点。

enter image description here 例如,在屏幕截图中,我需要将SSL证书绑定到CloudFrontA。但是一个证书只能绑定到一个CloudFront,这是AWS的局限性。这意味着证书无法绑定到CloudFrontB。

我不知道如何解决该问题。我不确定是否误解了AWS服务还是我的解决方案完全错误。

任何评论将不胜感激。

p.s。我考虑的一种解决方案是编写代理或APIGateway / lambda函数以接受请求并按百分比重定向。

2 个答案:

答案 0 :(得分:2)

尽管CloudFront本身不支持此功能,但是您可以使用在CloudFront Edge Locations上运行的AWS Lambda@Edge实施Canary Release。您可能需要对路由逻辑进行编码,以将一定百分比转发到特定存储桶。

答案 1 :(得分:1)

金丝雀版本不适合前端开发,它与您的支持服务有关,仅应在API REST服务级别执行。因为在Canary配置中,并不是用户总是按Canary发行版或普通发行版,而是每个请求都有机会按任一个发行版,一个请求可以按Canary发行,然后下一个可以按旧发行版。

在前端方面,您可能希望用户打开Beta功能,或者将托管站点放置在www.beta.yoursite.com,上,而DNS则将其解析为带有快照版本的存储桶,而{{ 1}}解析到正常站点。然后,您将拥有什么是Beta版用户,他们将被随机选择,并收到一封电子邮件,提示他们在Beta版位置试用新网站。在您的应用程序中,您可以将这些用户标记为具有beta凭据,以强制您仅在需要beta用户才能访问beta网站。

请注意,即使您可以按照您的建议去做(我认为CloudFront也是有办法的),但由于用户在访问您的网站时可能会使用2种不同的设备,而又有2种不同的体验,因此这将是糟糕的用户体验但不知道发生了什么。

编辑:评论答案-就像我说的那样,我真的不希望您这样做,但是无论如何,您要做的就是将您的域解析为apigateway / proxy / loadbalancer而不是存储桶,然后该存储桶将根据经过身份验证的用户将流量路由到Beta站点或旧站点。这样,他们将看不到其他域。 AFAIK无法基于Route53中已登录的用户来进行DNS解析,但一般来说都无法进行DNS解析。如果是这样,有人可能会纠正我,我可能是错的。 API网关可能是最简单的,并使用lambda将流量路由到正确的站点。