Terraform(提供商AWS)-自动缩放组不';无法在启动模板更改时生效
在使用启动模板时,无法使启动模板与ASG一起工作,它使用一个小技巧与启动配置一起工作,即在ASG资源中插入启动配置名称,但不与启动模板一起工作。Terraform(提供商AWS)-自动缩放组不';无法在启动模板更改时生效,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,在使用启动模板时,无法使启动模板与ASG一起工作,它使用一个小技巧与启动配置一起工作,即在ASG资源中插入启动配置名称,但不与启动模板一起工作。 ASG使用最新版本启动新实例,但不会将任何w.r.t更改为预运行实例,尽管启动模板有所更改 我知道这是意料之中的,但我们是否有任何解决办法使启动模板与ASG一起工作,或者我们需要坚持启动配置本身 TF代码段- resource "aws_launch_template" "lc_ec2" { image_id = "${var.ami_id}"
ASG使用最新版本启动新实例,但不会将任何w.r.t更改为预运行实例,尽管启动模板有所更改 我知道这是意料之中的,但我们是否有任何解决办法使启动模板与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
}
]
}
有一种方法可以实现这一点 AWS CloudFormation支持自动缩放组的滚动更新。
由于Terraform支持cloudformation堆栈资源,您可以将ASG定义为具有更新策略的cloudformation堆栈。但是,CloudFormation不支持launch template version的$$Latest标记,因此您必须对版本进行参数化,并从terraform配置文件中创建的launch template资源的最新版本属性中获取输入值。它不会更改asg中正在运行的实例,你需要把它们一个一个地拿下来。新实例运行后,它们将获得最新的设置。当您在prod环境中工作时,它将非常有用。@BMW在使用启动配置时,使用先创建后销毁来替换ASG是一种非常常见的模式,但不幸的是,它不能直接与启动模板一起使用,因为它们不是不变的,所以更改启动模板不会强制更新新资源创建。您不想在这里使用启动配置有什么原因吗?我还没有找到原因,但我开始时发现启动模板是新的,因此尝试使用terraform与ASG集成,但没有成功。它与LC不同,我喜欢模板中的版本特性。