我正在寻找一种使用CloudFront进行蓝色/绿色部署的方法。
有没有人有一个很好的解决方案,可以从一个CloudFront发行版迁移到另一个,或者每个人真的只是在创建他们的发行版,然后再也没有碰过它吗?
我的CloudFront发行版包含一个用于静态内容(JavaScript等)的S3 源和一个指向AWS ELB的自定义源。
CloudFront不变
通常情况下,我们根本不会对CloudFront发行版进行任何更改。我们通过更改S3中的静态内容文件的名称来在S3原始版本中对静态内容进行版本控制,并在Elastic Load Balancer(ELB)下将部署滚动部署到EC2实例。但是,有时我们需要测试CloudFront发行版本身并对其进行更改,或者对我们的环境进行足够大的更改,因此我们需要在新环境中指向新的ELB。
两个CloudFront发行版
我尝试的第一个选项是拥有两个单独的CloudFront Web发行版,一个用于我当前的环境,即A环境,另一个用于我的新环境,即B环境。我尝试使用Route53 加权路由策略,在其中为我的www.domain.com Route53记录添加了两个记录,一个记录指向权重为1的CloudFront分布A,另一个指向权重为0的CloudFront分布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)
一个CloudFront发行版
第二种选择是保留一个CloudFront Web分发。我有同时指向A和B环境的S3和自定义来源,然后当我想从一个环境转移到另一个环境时,我更新了CloudFront 缓存行为以指向另一个来源。这非常混乱,因为这些更新需要15至60分钟,无法看到更新进度,并且根据更改的性质,您可能需要使用CloudFront Invalidation进行后续操作,以便不提供缓存的内容来自旧环境以及新内容。
谢谢你的建议!