在使用AWS CodeDeploy进行蓝绿部署时,我们如何保持自动伸缩组的状态?

11
我们已经使用Terraform为项目设置了基础设施,包括代码部署、ALB和自动扩展组。到目前为止,我们一直在进行原地部署。但现在我们正在尝试切换到蓝/绿部署。 由于CodeDeploy的蓝/绿部署会在成功部署后替换整个自动扩展组,因此Terraform状态文件中自动扩展组的旧状态将变得过时,并且不会反映出CodeDeploy服务添加的新自动扩展组。 是否有任何已知的方法来克服这个问题?

你需要在部署时使用CodeDeploy吗?我通常只使用terraform apply来更新启动配置,然后使用Consul来增加(然后减少)ASG的最大大小。 - Iso
是的,我们在部署中使用CodeDeploy,并使用蓝/绿配置来进行部署组。我知道另一种通过terraform进行蓝/绿部署的方法,当我们只需要在AMI之间切换时可以使用。我们通过Jenkins使用CodeDeploy进行部署,在此期间,它会在ASG中启动新的实例群并将新代码部署到其中。一旦实例健康,它就会终止旧的ASG。 - John Kentucky
2个回答

1

您可以使用

lifecycle {
  ignore_changes = [autoscaling_groups]
}

aws_codedeploy_deployment_group 中,您还需要将 autoscaling_groups 设置为 [],因为当 CodeDeploy 部署新的绿色环境时,新创建的自动缩放组将是不同的(由 CodeDeploy 创建)。
因此,上述代码将忽略自动缩放组删除/创建所发生的更改。这是因为一旦实施蓝绿部署,CodeDeploy 就会控制自动缩放组的创建。

正如OP所提到的,原始的ASG也是由terraform创建的,当被移除时,terraform会每次都重新创建一个新的。因此,这并不能解决在这里提到的问题。 - anishtain4

0

根据您触发 Code Deploy 部署的方式,您可以在部署脚本中运行 Terraform import 作为后置部署钩子,以更新 Terraform 状态以指向新的自动缩放组。您需要通过其中一个客户端库或 CLI 获取新 ASG 的名称。

terraform import aws_autoscaling_group.some_asg_identifier name-of-your-replacement-asg

1
那么,拥有IaC的意义是什么呢? - Halil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接