使用启动模板滚动更新 ASG

smi*_*tan 5 terraform terraform-provider-aws

当我更新与 a 关联的 AMI 时aws_launch_template,Terraform 会按预期创建启动模板的新版本,并且还将 更新aws_autoscaling_group为指向启动模板的新版本。

但是,没有执行“滚动更新”来使用基于新 AMI 的新实例切换现有实例,我必须手动终止现有实例,然后 ASG 使用新 AMI 启动新实例。

我必须对配置进行哪些更改才能让 Terraform 执行滚动更新?

现有代码如下:

resource "aws_launch_template" "this" {

  name_prefix = "my-launch-template-"
  image_id = var.ami_id
  instance_type = "t3.small"
  key_name = "testing"

  vpc_security_group_ids = [ aws_security_group.this.id ]

  lifecycle {
    create_before_destroy = true
  }
}


resource "aws_autoscaling_group" "this" {

  name_prefix = "my-asg-"
  vpc_zone_identifier = var.subnet_ids
  target_group_arns = var.target_group_arns

  health_check_type = "ELB"
  health_check_grace_period = 300
  default_cooldown = 10

  min_size = 4
  max_size = 4
  desired_capacity = 4

  launch_template {
    id = aws_launch_template.this.id
    version = aws_launch_template.this.latest_version
  }

  lifecycle {
    create_before_destroy = true
  }
}
Run Code Online (Sandbox Code Playgroud)

jph*_*ynh 5

我最近研究了完全相同的场景。

我们使用该random_pet资源生成了一个人类可读的随机名称,该名称与 AMI 更改相关联。

resource "random_pet" "ami_random_name" {
  keepers = {
    # Generate a new pet name every time we change the AMI
    ami_id = var.ami_id
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在一个变量上使用该 random_pet 名称 ID,该变量将强制重新创建您的自动缩放组。

例如name_prefix

resource "aws_autoscaling_group" "this" {

  name_prefix = "my-asg-${random_pet.ami_random_name.id}"
  vpc_zone_identifier = var.subnet_ids
  target_group_arns = var.target_group_arns

  health_check_type = "ELB"
  health_check_grace_period = 300
  default_cooldown = 10

  min_size = 4
  max_size = 4
  desired_capacity = 4

  launch_template {
    id = aws_launch_template.this.id
    version = aws_launch_template.this.latest_version
  }

  lifecycle {
    create_before_destroy = true
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个方法很有效,非常感谢。我没有使用 `random_pet` 资源,而是将启动配置版本插入到 `name_prefix` 中,如下所示: `name_prefix = "my-asg-${aws_launch_template.this.latest_version}-"` (5认同)