我已经尝试使用terraform一段时间了。关于如何处理蓝绿色部署的任何建议/提示。我看到terraform如何通过aws上的自动缩放组启用它。但是,我想在将新流量路由到新的Asg上之前进行一些Cucumber验收测试。如果万一我需要回滚,是否可以在terraform中将旧的asg保留一段时间。可以用terraform来完成吗...预先感谢。

#1 楼

这完全取决于您如何部署代码。

(首先,恕我直言,我不认为Terraform是执行此操作的合适工具。Terraform的责任是为应用程序构建必要的基础架构,而不是成为部署它的工具。但是,一如既往,“正确/最佳选择”将取决于许多因素,并且视情况/规模而定,这可能是“足够好”的解决方案)总结,我的建议是:


在“未使用”的环境中部署应用程序
对其进行测试
将域名更改为指向它

假设您已经配置了2个AutoScaling组。一个称为asg-blue,另一个称为asg-green。并且当前版本位于asg-blue上,并且在terraform中您有指向它的aws_route53_record。您将需要执行以下步骤,每个步骤在下一个步骤前都带有一个terraform apply


asg-green上部署应用程序的较新版本


即更新部署您的应用程序版本所需的所有内容。可能是您在Launch Configuration上指向的AMI,或者是您仅使用Terraform进行的其他任何方式。


测试一切是否按预期运行


在这里,您可以使用为每个ASG / ELB提供的域名,也可以使用已经在terraform上配置的域名。


更新域名以将其映射到asg-green上的aws_route53_record ASG / ELB

减少asg-blue上不需要使用过多资源的计算机数量


根据您的情况,您可以配置0台计算机

/>

这样您就可以进行B / G部署,但是对于每个部署,您都需要在Terraform中至少进行两次手动干预(新版本的部署和域名的更新) 。

但是使用这种策略时,您应该格外小心,不要在当前使用的ASG上进行部署。

当然,如果您的Terraform / aws fu很好,则可以重复使用ASG,而不是重新使用ASG。

希望这有助于对整个过程有一个“大了解”。但是我建议您研究并开始使用更侧重于部署的工具,例如AWS CodeDeploy。

评论


您可能还考虑使用terraform工作区,但仍在更改基础结构而不部署代码。这是有关正确定义部署和基础结构更改的限制。严格不应更改支持新代码发布的基础结构。在某些情况下可以。

–拉斐尔
19年1月4日在16:17

#2 楼

我有一个类似的问题,这个答案很有帮助。它概述了如何在Terraform中进行蓝绿色部署的模式。

但据我所知,显然没有最佳的解决方案。我认为针对您的用例,最常见的方法是拥有一个专用的“暂存”环境,该环境所使用的设置与生产环境非常接近(共享相同的Terraform模块,但具有较小的自动缩放组)。您可以将其用于最终测试,甚至可以将一部分生产流量路由到该产品上。

如果暂存中没有错误,则可以简化在生产中的部署,并希望您发现了大多数之前的严重错误。