Скользящее обновление ASG с использованием шаблона запуска - PullRequest
1 голос
/ 25 февраля 2020

Когда я обновляю 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
  }
}

1 Ответ

2 голосов
/ 25 февраля 2020

Я недавно работал над тем же сценарием.

Мы использовали ресурс 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
  }
}

Затем можно использовать этот идентификатор имени random_pet для переменной, которая приведет к воссоздание вашей автомасштабирующей группы.

Например, с 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
  }
}
...