Terraform aws_autoscaling_group 启动的 AWS EC2 实例的动态命名
Posted
技术标签:
【中文标题】Terraform aws_autoscaling_group 启动的 AWS EC2 实例的动态命名【英文标题】:Dynamic naming for AWS EC2 instances launched by Terraform aws_autoscaling_group 【发布时间】:2018-11-03 07:14:55 【问题描述】:我已经使用 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
,
]
【问题讨论】:
【参考方案1】:AWS 自动缩放组可以标记为带有许多资源,并且使用 propagate_at_launch
标志这些标签也将传递给它创建的实例。
不幸的是,这些都是完全静态的,ASG 本身无法对实例进行不同的标记。最重要的是,default scale in policy 不会首先删除最新的实例,因此即使您确实将实例标记为 Node1
、Node2
、Node3
,那么当自动缩放组最有可能进行缩放时(取决于标准)删除Node1
留下Node2
和Node3
。虽然可以将终止策略更改为 NewestInstance
以便删除 Node3
,但这不太可能是策略的最佳规模。
我会质疑为什么您觉得需要以不同的方式使用 ASG 实例,并且可能重新考虑当实例更短暂时如何管理实例,这在现代云中通常是这种情况,但在使用自动缩放组时更是如此。
如果您确实出于某种特定原因确实想要以不同方式标记实例,您可以让 ASG 在启动时不将 Name
标记传播到实例,然后在扩展事件上触发 Lambda 函数(通过生命周期挂钩)或 Cloudwatch 事件)来确定要使用的标记值,然后用它标记实例。
【讨论】:
非常感谢,感谢您的回答:-)【参考方案2】:这样做的一个技巧是将用户数据脚本传递给实例或自动缩放组。 PFB 指向类似问题答案的链接。
https://***.com/a/44613778/3304632
【讨论】:
以上是关于Terraform aws_autoscaling_group 启动的 AWS EC2 实例的动态命名的主要内容,如果未能解决你的问题,请参考以下文章
Terraform 学习总结——Terraform 命令详解
Terraform 学习总结(10)—— 阿里云平台 Terraform 代码开发技巧总结
Terraform 学习总结(10)—— 阿里云平台 Terraform 代码开发技巧总结