在 AWS CodeDeploy 中使用蓝/绿部署时,我们如何维护自动缩放组的状态?

Posted

技术标签:

【中文标题】在 AWS CodeDeploy 中使用蓝/绿部署时,我们如何维护自动缩放组的状态?【英文标题】:How can we maintain state of autoscaling group while using Blue/Green Deployment in AWS CodeDeploy? 【发布时间】:2018-08-18 05:17:30 【问题描述】:

我们已经为使用 Terraform 的项目设置了基础架构,包括代码部署、ALB 和自动缩放组。到目前为止,我们正在进行就地部署。但现在我们正在尝试切换到蓝/绿部署。 由于 CodeDeploy 蓝/绿部署会在成功部署时替换整个自动缩放组,因此 Terraform 状态文件中的旧自动缩放组状态将变得陈旧,并且不会反映 CodeDeploy 服务添加的新自动缩放组。 有什么已知的方法可以解决这个问题吗?

【问题讨论】:

您需要使用 CodeDeploy 进行部署吗?我通常只使用terraform apply 更新启动配置,然后使用 Consul 增加(然后减少)ASG 的最大大小。 是的,我们使用 CodeDeploy 进行部署,部署组使用蓝/绿配置。当我们只需要在 AMI 之间切换时,我知道通过 terraform 的其他蓝/绿方法。我们使用 CodeDeploy 通过 Jenkins 进行部署,在此期间,它会在 ASG 中启动新的实例队列并将新代码部署到其中。一旦实例运行良好,它就会终止旧的 ASG。 【参考方案1】:

根据您触发代码部署部署的方式,您可以在部署脚本中运行 Terraform import 作为部署后挂钩,以更新 Terraform 状态以指向新的自动缩放组。您需要通过众多客户端库之一或CLI

以某种方式获取新 ASG 的名称
terraform import aws_autoscaling_group.some_asg_identifier name-of-your-replacement-asg

【讨论】:

【参考方案2】:

你可以使用

lifecycle 
  ignore_changes = [autoscaling_groups]

aws_codedeploy_deployment_group.

您还必须将aws_codedeploy_deployment_group 中的autoscaling_groups 设置为[],因为当 CodeDeploy 部署新的绿色环境时,新创建的自动缩放组将是不同的(由 CodeDeploy 创建)。

因此,上述代码将忽略自动缩放组删除/创建所发生的更改。这是因为一旦实施蓝绿部署,CodeDeploy 就会控制自动缩放组的创建。

【讨论】:

以上是关于在 AWS CodeDeploy 中使用蓝/绿部署时,我们如何维护自动缩放组的状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS 中使用 Terraform 实施蓝/绿部署而不损失容量

CodeDeploy 的简单 IAM 问题

具有 ECS 蓝/绿部署的 AWS CodePipeline 失败并出现内部错误 |拿 2

AWS Lambda 和 Gateway API - 使用 cloudformation 的蓝/绿部署

如何在 Grafana 上显示 AWS CodeDeploy 部署

如何使用RabbitMQ处理蓝/绿部署?