Сценарий . Я использую группу автомасштабирования AWS (ASG) и изменил связанную конфигурацию запуска во время применения терраформирования. ПГС остается неизменной.

Как мне теперь воссоздать экземпляры в этой ASG (т.е. заменить их один за другим, чтобы выполнить последовательную замену), которая затем будет основана на измененной / новой конфигурации запуска?

Что я пробовал: с помощью taint одного может пометить ресурсы, которые будут уничтожены и воссозданы при следующем применении. Однако я не хочу портить группу автомасштабирования (которая является ресурсом, и отдельные экземпляры в этом случае не являются), а отдельные экземпляры в ней. Есть ли способ заразить отдельные экземпляры, или я думаю в неправильном направлении?

9
jckuester 6 Сен 2016 в 12:36

3 ответа

Лучший ответ

Обычно здесь можно использовать управление жизненным циклом Terraform, чтобы заставить его создавать новые ресурсы перед тем, как уничтожить старые.

В этом случае вы можете настроить конфигурацию запуска и группу автомасштабирования примерно так:

resource "aws_launch_configuration" "as_conf" {
    name_prefix = "terraform-lc-example-"
    image_id = "${var.ami_id}"
    instance_type = "t1.micro"

    lifecycle {
      create_before_destroy = true
    }
}

resource "aws_autoscaling_group" "bar" {
    name = "terraform-asg-example-${aws_launch_configuration.as_conf.name}"
    launch_configuration = "${aws_launch_configuration.as_conf.name}"

    lifecycle {
      create_before_destroy = true
    }
}

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

Поскольку вы используете create_before_destroy, Terraform создаст новые LC и ASG и будет ждать, пока новая ASG достигнет желаемой емкости (которая может быть настроена с помощью проверок работоспособности), прежде чем уничтожить старую ASG, а затем и старый LC.

Это сразу перевернет все экземпляры в ASG. Таким образом, если у вас была минимальная емкость 2 в ASG, это создаст еще 2 экземпляра, и как только оба из них пройдут проверки работоспособности, 2 старых экземпляра будут уничтожены. Если вы используете ELB с ASG, он присоединит 2 новых экземпляра к ELB, поэтому временно у вас будут все 4 экземпляра в обслуживании, прежде чем вы уничтожите более старые 2.

18
GabLeRoux 27 Фев 2019 в 14:15

Вы не можете решить эту проблему только с помощью терраформ. См. Этот документ AWS (http://docs.aws.amazon.com /autoscaling/latest/userguide/LaunchConfiguration.html):

Когда вы изменяете конфигурацию запуска для своей группы Auto Scaling, любые новые экземпляры запускаются с использованием новых параметров конфигурации, но существующие экземпляры не затрагиваются .

4
tgreiner 7 Сен 2016 в 11:18

Это не ответ как таковой, но я тоже боролся с этим. В одном контексте это было общее, в другом - Kubernetes.

В итоге я написал сервис с открытым исходным кодом для просмотра и автоматического обновления. Он должен решить эту проблему, но он новый, более чем рад получить отзывы / проблемы / PR по нему.

https://github.com/deitch/aws-asg-roller

1
deitch 21 Ноя 2018 в 09:41