Terraform aws_autoscaling_group 启动的 AWS EC2 实例的动态命名
Dynamic naming for AWS EC2 instances launched by Terraform aws_autoscaling_group
我已经使用 Terraform 成功创建了一个自动缩放组。我现在想找到一种方法来根据索引值动态命名配置的实例。
对于 aws_instance
类型,可以通过以下方式轻松完成:
resource "aws_instance" "bar" {
count = 3
tags {
Name = "${var.instance_name_gridNode}${count.index + 1}"
App-code = "${var.app-code}"
PC-code = "${var.pc-code}"
}
}
这将导致 3 个实例名为:
1) 节点 1
2) 节点 2
3) 节点 3
然而,由于 aws_autoscaling_group
是动态配置的(对于缩小和缩小的情况),如何控制配置实例的命名约定?
resource "aws_autoscaling_group" "gridrouter_asg" {
name = "mygridrouter"
launch_configuration = "${aws_launch_configuration.gridGgr_lcfg.id}"
min_size = 1
max_size = 2
health_check_grace_period = 150
desired_capacity = 1
vpc_zone_identifier = ["${var.subnet_id}"]
health_check_type = "EC2"
tags = [
{
key = "Name"
value = "${var.instance_name_gridGgr_auto}"
propagate_at_launch = true
},
]
}
AWS 自动缩放组可以标记为许多资源,使用 propagate_at_launch
标记这些标记也将传递给它创建的实例。
不幸的是,这些完全是静态的,ASG 本身无法以不同方式标记实例。最重要的是,default scale in policy 不会首先删除最新的实例,因此即使您将实例标记为 Node1
、Node2
、Node3
,然后当自动缩放组缩减时最有可能(取决于条件)删除 Node1
,留下 Node2
和 Node3
。虽然可以将终止策略更改为 NewestInstance
以便删除 Node3
,但这不太可能是策略中的最佳规模。
我想问为什么你觉得你需要以不同的方式使用 ASG 实例,并且可能会重新考虑当它们更短暂时如何管理你的实例,这在现代云中通常是这种情况,但在使用自动缩放时更是如此组。
如果您确实出于某些特定原因确实想要以不同方式标记实例,您可以让 ASG 在启动时不将 Name
标记传播到实例,然后在扩展事件上触发 Lambda 函数(或者通过生命周期挂钩或 Cloudwatch 事件)来确定要使用的标签值,然后用它标记实例。
一种方法是将用户数据脚本传递给实例或自动缩放组。
PFB link 对类似问题的回答。
我已经使用 Terraform 成功创建了一个自动缩放组。我现在想找到一种方法来根据索引值动态命名配置的实例。
对于 aws_instance
类型,可以通过以下方式轻松完成:
resource "aws_instance" "bar" {
count = 3
tags {
Name = "${var.instance_name_gridNode}${count.index + 1}"
App-code = "${var.app-code}"
PC-code = "${var.pc-code}"
}
}
这将导致 3 个实例名为:
1) 节点 1
2) 节点 2
3) 节点 3
然而,由于 aws_autoscaling_group
是动态配置的(对于缩小和缩小的情况),如何控制配置实例的命名约定?
resource "aws_autoscaling_group" "gridrouter_asg" {
name = "mygridrouter"
launch_configuration = "${aws_launch_configuration.gridGgr_lcfg.id}"
min_size = 1
max_size = 2
health_check_grace_period = 150
desired_capacity = 1
vpc_zone_identifier = ["${var.subnet_id}"]
health_check_type = "EC2"
tags = [
{
key = "Name"
value = "${var.instance_name_gridGgr_auto}"
propagate_at_launch = true
},
]
}
AWS 自动缩放组可以标记为许多资源,使用 propagate_at_launch
标记这些标记也将传递给它创建的实例。
不幸的是,这些完全是静态的,ASG 本身无法以不同方式标记实例。最重要的是,default scale in policy 不会首先删除最新的实例,因此即使您将实例标记为 Node1
、Node2
、Node3
,然后当自动缩放组缩减时最有可能(取决于条件)删除 Node1
,留下 Node2
和 Node3
。虽然可以将终止策略更改为 NewestInstance
以便删除 Node3
,但这不太可能是策略中的最佳规模。
我想问为什么你觉得你需要以不同的方式使用 ASG 实例,并且可能会重新考虑当它们更短暂时如何管理你的实例,这在现代云中通常是这种情况,但在使用自动缩放时更是如此组。
如果您确实出于某些特定原因确实想要以不同方式标记实例,您可以让 ASG 在启动时不将 Name
标记传播到实例,然后在扩展事件上触发 Lambda 函数(或者通过生命周期挂钩或 Cloudwatch 事件)来确定要使用的标签值,然后用它标记实例。
一种方法是将用户数据脚本传递给实例或自动缩放组。 PFB link 对类似问题的回答。