#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。
#2 楼
我有一个类似的问题,这个答案很有帮助。它概述了如何在Terraform中进行蓝绿色部署的模式。但据我所知,显然没有最佳的解决方案。我认为针对您的用例,最常见的方法是拥有一个专用的“暂存”环境,该环境所使用的设置与生产环境非常接近(共享相同的Terraform模块,但具有较小的自动缩放组)。您可以将其用于最终测试,甚至可以将一部分生产流量路由到该产品上。
如果暂存中没有错误,则可以简化在生产中的部署,并希望您发现了大多数之前的严重错误。
评论
您可能还考虑使用terraform工作区,但仍在更改基础结构而不部署代码。这是有关正确定义部署和基础结构更改的限制。严格不应更改支持新代码发布的基础结构。在某些情况下可以。
–拉斐尔
19年1月4日在16:17