Pet*_*r M 20 deployment amazon-cloudfront
我正在寻找一种使用CloudFront进行蓝/绿部署的方法。
有没有人有一个很好的解决方案来从一个 CloudFront 分布转移到另一个分布,或者每个人真的只是创建他们的分布然后再也不接触它?
我的 CloudFront 分配包含一个用于静态内容(javascript 等)的S3源和一个指向 AWS ELB 的自定义源。
在正常情况下,我们根本不会对 CloudFront 分配进行任何更改。我们通过更改 S3 中静态内容文件的名称对 S3 源中的静态内容进行版本控制,并在弹性负载均衡器 (ELB) 下滚动部署到 EC2 实例。但是,有时我们需要对 CloudFront 分发本身进行测试和更改,或者对我们的环境进行足够大的更改,以至于我们需要指向新环境中的新 ELB。
我尝试的第一个选项是拥有两个单独的 CloudFront Web Distributions,一个用于我当前的环境或 A 环境,另一个用于我的新环境或 B 环境。我尝试使用 Route53加权路由策略,其中我为 www.domain.com Route53 记录添加了两条记录,一条指向权重为 1 的 CloudFront Distribution A,另一个指向权重为 0 的 CloudFront Distribution B。计划是在我想从分配 A 转移到分配 B 时更改权重。 但是,一次只有一个 CloudFront 分配可以注册www.domain.com备用域名 (CNAME),否则您会收到以下错误:
com.amazonaws.services.cloudfront.model.CNAMEAlreadyExistsException: One or more of the CNAMEs you provided are already associated with a different resource. (Service: AmazonCloudFront; Status Code: 409; Error Code: CNAMEAlreadyExists; Request ID: ef84a5f0-44e7-11e5-9315-0ba167bb108a)
Run Code Online (Sandbox Code Playgroud)
第二种选择是保留一个 CloudFront Web 分配。我有 S3 和自定义源指向我的 A 和 B 环境,然后当我想从一个环境移动到另一个环境时,我更新 CloudFront缓存行为以指向另一个源。这是非常混乱的,因为这些更新需要 15-60 分钟,更新进度不可见,根据更改的性质,您可能需要使用CloudFront Invalidation跟进,这样您就不会提供缓存内容来自旧环境以及新内容。
谢谢你的建议!
mpa*_*paf 10
两个 Cloudfront 发行版
由于 AWS 允许在同一 AWS 账户中的通配符备用 CNAME 之间重叠,因此您可以通过以下方式在两个 Cloudfront 分配之间切换:
但是,两个不同的分发 DNS (*.cloudfront.net) 可能指向相同的边缘节点,这意味着提供内容的方式是将 cloudfront.net CNAME 与为其提供服务的边缘节点匹配,然后通过匹配主机名。在这种情况下,如果您的两个分布都使用相同的边缘节点(例如可以使用 进行检查dig
),则切割将不干净。
例如,如果两个发行版共享一个或多个边缘节点,则带有 Alt CNAME www.domain.com 的发行版 1 将优先于带有更通用 *.domain.com 的发行版 2,直到 CNAME 从所有边缘节点的发行版 1 配置中删除. 因此,在过渡期间,从一个请求中检索到的版本可能与另一个不同。
这里的游戏有点晚了,但对于其他正在寻找这个的人。我相信这可以使用 lambda@edge 来完成。类似于 A/B 测试。 https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html。您可以实现当用户请求 url 时触发的 lambda 函数。选择提供来自不同来源或 url 前缀的蓝色/绿色内容。cookie 值将确定将提供哪个部署。当第一个请求到达(没有 cookie)时,随机设置 cookie 说 95% 蓝色 5% 绿色。
归档时间: |
|
查看次数: |
10719 次 |
最近记录: |