我已经成功地使用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}"
}
}这将导致三个实例名为:
1) Node1
2) Node2
3) Node3
但是,由于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
},
]
}发布于 2018-05-24 08:58:51
可以像许多资源一样对AWS自动标度组进行标记,并使用propagate_at_launch标志将这些标记传递给它创建的实例。
不幸的是,这些都是静态的,ASG本身没有方法对实例进行不同的标记。最重要的是,政策中的默认比例不会首先删除最新的实例,因此即使您确实将实例标记为Node1、Node2、Node3,那么当自动标度组在其中缩放时,最有可能(取决于标准)删除Node1,而只剩下Node2和Node3。虽然可以将终止策略更改为NewestInstance,以便删除Node3,但这不太可能是策略的最佳规模。
我会问,为什么您认为您需要对ASG实例进行不同的对待,并可能会重新考虑如何管理您的实例时,它们是短暂的,在现代云中通常是如此,但在使用自动标度组时则更为如此。
如果出于某些特定原因,您确实希望对实例进行不同的标记,则可以让ASG在启动时不将Name标记传播到实例,然后在扩展事件(通过生命周期钩子或Cloudwatch事件)上有一个Lambda函数触发器来确定要使用的标记值,然后用它标记实例。
发布于 2019-09-12 14:37:24
一种方法是将用户数据脚本传递给实例或自动标注组。PFB与一个类似问题的答案的链接。
https://stackoverflow.com/questions/50502919
复制相似问题