【问题标题】:Dynamic naming for AWS EC2 instances launched by Terraform aws_autoscaling_groupTerraform aws_autoscaling_group 启动的 AWS EC2 实例的动态命名
【发布时间】: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
    },
  ]
}

【问题讨论】:

    标签: amazon-web-services terraform autoscaling


    【解决方案1】:

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

    不幸的是,这些都是完全静态的,ASG 本身无法对实例进行不同的标记。最重要的是,default scale in policy 不会首先删除最新的实例,因此即使您确实将实例标记为 Node1Node2Node3,那么当自动缩放组最有可能进行缩放时(取决于标准)删除Node1 留下Node2Node3。虽然可以将终止策略更改为 NewestInstance 以便删除 Node3,但这不太可能是策略的最佳规模。

    我会质疑为什么您觉得需要以不同的方式使用 ASG 实例,并且可能重新考虑当实例更短暂时如何管理实例,这在现代云中通常是这种情况,但在使用自动缩放组时更是如此。

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

    【讨论】:

    • 非常感谢,感谢您的回答:-)
    【解决方案2】:

    这样做的一个技巧是将用户数据脚本传递给实例或自动缩放组。 PFB 指向类似问题答案的链接。

    https://stackoverflow.com/a/44613778/3304632

    【讨论】:

      猜你喜欢
      • 2020-03-10
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2020-11-29
      • 2019-08-03
      • 2019-06-26
      • 2016-11-22
      相关资源
      最近更新 更多