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 不会首先删除最新的实例,因此即使您确实将实例标记为 Node1Node2Node3,那么当自动缩放组最有可能进行缩放时(取决于标准)删除Node1 留下Node2Node3。虽然可以将终止策略更改为 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 代码开发技巧总结

Terraform 学习总结(10)—— 阿里云平台 Terraform 代码开发技巧总结

terraform如何创建数据盘

Terraform 学习总结—— Terraform 常用命令再总结