Terraform aws_autoscaling_group启动的AWS EC2实例的动态命名

Tim*_* T. 4 amazon-web-services autoscaling terraform

我已经成功使用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}"
  }
}
Run Code Online (Sandbox Code Playgroud)

这将导致3个实例名为:

1)节点1

2)Node2

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
    },
  ]
}
Run Code Online (Sandbox Code Playgroud)

yda*_*coR 8

可以将AWS自动伸缩组标记为具有许多资源,并使用该propagate_at_launch标记将这些标记也传递给它创建的实例。

不幸的是,这些完全是静态的,ASG本身无法以不同的方式标记实例。在此之上的政策默认的比例将不删除最新情况第一所以即使你没有标签的情况下为Node1Node2Node3那么当它缩放自动缩放集团最有可能(根据标准),以除去Node1留给你Node2Node3。尽管可以将终止策略更改为,NewestInstance以便将其删除,Node3但这在策略中并不是最佳选择。

我想问一问,为什么您觉得您需要以不同的方式使用ASG实例,并且可能会重新考虑如何在实例实例较短暂的情况下(如现代云中的情况)管理实例,而在使用自动伸缩组时更是如此。

如果您确实确实确实出于某些特定原因想要用不同的方式标记实例,则可以让ASG Name在启动时不将标记传播到实例,然后在横向扩展事件(通过生命周期挂钩或Cloudwatch事件)上使用Lambda函数触发器来确定要使用的标记值,然后使用它标记实例。