地形。标记使用 Autoscaling 组创建的实例

Terraform. Tagging instances created with Autoscaling group

这就是我想要做的。我有 2 个使用 Terraform 创建的自动缩放组。一个是在三个不同的可用性区域启动 3 个 EC2 实例,IP 地址为 public。另一个自动缩放组在三个不同的可用性区域启动 3 个 EC2 实例,使用私有 IP 地址我试图为每个实例设置一个唯一的“名称”标签。在 Terraform 中,我看到自动缩放资源有一个标签块,但在应用时,相同的标签应用于所有 3 个实例。此外,我尝试将我的代码设置为一个自动缩放组可以启动我的所有实例(public 和私有实例)的位置,但是在我的 vpc_zone_identifier 中使用 'for' 表达式循环时遇到问题陈述。这个问题迫使我为私有实例创建第二个自动缩放组。任何建议都有助于组合这些自动缩放组以及如何使用唯一标记标记每个实例。

resource "aws_autoscaling_group" "public" {
  name                 = "${var.main_as}-Public"
  launch_configuration = aws_launch_configuration.main.id
  vpc_zone_identifier = [
    for subnet in aws_subnet.public : subnet.id
  ]
  min_size = 3
  max_size = 3
}

resource "aws_autoscaling_group" "private" {
  name                 = "${var.main_as}-Private"
  launch_configuration = aws_launch_configuration.main.id
  vpc_zone_identifier = [
    for subnet in aws_subnet.private : subnet.id
  ]
  min_size = 3
  max_size = 3
}

对于自动缩放组,您不应该尝试为所有实例生成唯一的名称,事实上,这导致了 pets vs cattle 的方法。通过命名资源,它们变得很宝贵,并且可以导致出现单点故障的设计。

在实践中,这对于某些领域(例如数据库)来说可能很难,但您应该尝试将架构构建为 immutable,尤其是在可以替换实例的自动缩放组中(即使您有min 和 max 大小相同,任何底层主机故障都会启动一个 new 实例来替换)。

通过使您的基础架构不可变,您的架构将对未知事件更具弹性,并将强制执行服务器构建的最佳实践。

如果您需要实例的标识符,而不是使用标签,我建议您使用实例 ID,因为这对于您的主机来说始终是唯一的。

否则,如果您仍想为主机使用具有唯一名称标签的 Autoscaling 组,则需要在主机启动期间 create an event。然后这将需要触发一个 Lambda,它将以编程方式更新 EC2 实例并为其分配一个唯一名称。