Terraform (поставщик AWS) - группа Auto Scaling не вступает в силу при изменении шаблона запуска

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

Я понимаю, что это отчасти ожидаемо, но есть ли у нас обходной путь, чтобы заставить шаблоны запуска работать с ASG, или нам нужно придерживаться самой конфигурации запуска?

Фрагмент кода TF -

resource "aws_launch_template" "lc_ec2" {
  image_id = "${var.ami_id}"
  instance_type = "${var.app_instance_type}"
  key_name = "${var.orgname}_${var.environ}_kp"
  vpc_security_group_ids = ["${aws_security_group.sg_ec2.id}"]
  user_data = "${base64encode(var.userdata)}"
  block_device_mappings {
    device_name = "/dev/xvdv"
    ebs {
      volume_size = 15
    }
  }
  iam_instance_profile {
    name = "${var.orgname}_${var.environ}_profile"
  }
  lifecycle {
    create_before_destroy = true
  }

  tag_specifications {
    resource_type = "instance"
    tags = "${merge(map("Name", format("%s-%s-lc-ec2", var.orgname, var.environ)), var.tags)}"
    } 
  tag_specifications {
    resource_type = "volume"
   tags = "${merge(map("Name", format("%s-%s-lc-ec2-volume", var.orgname, var.environ)), var.tags)}"
    }
  tags = "${merge(map("Name", format("%s-%s-lc-ec2", var.orgname, var.environ)), var.tags)}"
}

resource "aws_autoscaling_group" "asg_ec2" {
    name = "${var.orgname}-${var.environ}-asg-ec2-${aws_launch_template.lc_ec2.name}"

    vpc_zone_identifier = ["${data.aws_subnet.private.*.id}"]
    min_size  = 1
    desired_capacity  = 1
    max_size  = 1
    target_group_arns = ["${aws_lb_target_group.alb_tg.arn}"]
    default_cooldown= 100
    health_check_grace_period = 100
    termination_policies = ["ClosestToNextInstanceHour", "NewestInstance"]
    health_check_type="ELB"
    launch_template = {
      id = "${aws_launch_template.lc_ec2.id}"
      version = "$$Latest"
   }  
      lifecycle {
    create_before_destroy = true
  }

  tags = [
    {
      key                 = "Name"
      value               = "${var.orgname}"
      propagate_at_launch = true
    },
    {
      key                 = "Environ"
      value               = "${var.environ}"
      propagate_at_launch = true
    }
  ]
}

person vivekyad4v    schedule 09.07.2018    source источник
comment
он не меняет запущенные экземпляры в asg, вам нужно снимать их один за другим. После запуска новых экземпляров они получают последние настройки. Будет полезно при работе в прод-среде.   -  person BMW    schedule 10.07.2018
comment
@BMW с использованием create перед уничтожением для сине-зеленой замены ASG является довольно распространенным шаблоном при использовании конфигураций запуска, но, к сожалению, его нельзя использовать напрямую с шаблонами запуска, потому что они не являются неизменяемыми, поэтому изменение шаблона запуска не заставляют создаваться новые ресурсы. Есть ли причина, по которой вы не хотите использовать здесь конфигурации запуска?   -  person ydaetskcoR    schedule 10.07.2018
comment
У меня еще нет причины, но я начал и обнаружил, что шаблоны запуска являются новыми, поэтому попытался интегрироваться с ASG с помощью terraform, но безуспешно. Это не то же самое, что LC, мне понравилась функция версии в шаблонах.   -  person vivekyad4v    schedule 10.07.2018


Ответы (1)


Для этого есть один прием.

AWS CloudFormation поддерживает скользящие обновления группы автомасштабирования. Поскольку Terraform поддерживает ресурс стека облачной информации, вы можете определить свой ASG как стек облачной информации с политикой обновления. Однако CloudFormation не поддерживает тег $$ Latest для версии шаблона запуска, поэтому вам придется параметризовать версию и взять входное значение из атрибута latest_version ресурса шаблона запуска, созданного в вашем файле конфигурации terraform.

person Priyank Agrawal    schedule 29.01.2019