这就是我正在努力做的事情。我有 2 个使用 Terraform 创建的自动缩放组。一种是在三个不同的可用区域中启动 3 个具有公共(public) IP 地址的 EC2 实例。另一个自动扩展组正在三个不同的可用区域中启动 3 个 EC2 实例,并使用私有(private) IP 地址,我尝试为每个实例设置唯一的“名称”标签。在 Terraform 中,我看到自动缩放资源有一个标签 block ,但在应用时,相同的标签应用于所有 3 个实例。另外,我尝试将代码设置为一个自动扩展组可以启动我的所有实例(公共(public)实例和私有(private)实例),但在使用 vpc_zone_identifier 语句中的“for”表达式进行循环时遇到问题。这个问题迫使我为私有(private)实例创建第二个自动缩放组。任何建议都有助于组合这些自动缩放组以及如何使用唯一标签标记每个实例。
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特别是在可以替换实例的自动缩放组中(即使最小和最大大小相同,任何底层主机故障都会启动一个新实例来替换)。
通过使您的基础架构保持不变,您的架构将能够更好地应对未知事件,并将实现服务器构建的最佳实践。
如果您需要实例的标识符,而不是使用标签,我建议您使用实例 ID,因为这对于您的主机来说始终是唯一的。
否则,如果您仍想使用具有主机唯一名称标签的自动缩放组,则需要 create an event在主机启动期间。然后,这需要触发一个 Lambda,它将以编程方式更新 EC2 实例并为其分配一个唯一的名称。
关于amazon-web-services - 地形。标记使用 Autoscaling 组创建的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63343626/