繁体   English   中英

将标签应用于为每个 Terraform 创建的实例

[英]Applying tags to instances created with for each Terraform

我为每个创建了多个 EC2 实例。 每个实例都部署到不同的子网中。 尝试将标签应用于正在部署的每个实例时出现错误。 任何意见将是有益的。 以下是我的标签和实例的代码:

resource "aws_instance" "private" {
  for_each      = aws_subnet.private
  ami           = var.ec2_amis[var.region]
  instance_type = var.tableau_instance
  key_name      = aws_key_pair.tableau.key_name
  subnet_id     = each.value.id

  tags = {
    Name = var.ec2_tags[each.key]
  }
}

variable "ec2_tags" {
  type = list(string)
  default = [
    "PrimaryEC2",
    "EC2Worker1",
    "EC2Worker2"
  ]
}

错误

Error: Invalid index

  on vpc.tf line 21, in resource "aws_instance" "private":
  21:     Name = var.ec2_tags[each.key]
    |----------------
    | each.key is "3"
    | var.ec2_tags is list of string with 3 elements

The given key does not identify an element in this collection value.

我之前有这个代码工作,不知道发生了什么。 我对它启动的 AMI 进行了更改,但我不明白为什么这会对标签产生影响。 任何意见将是有益的。

更新我在“aws_instance”“私有”代码中使用以下本地块和动态块更新了资源:

locals {
  private_instance = [{
    name = "PrimaryEC2"
    },
    {
      name = "EC2Worker1"
    },
    {
      name = "EC2Worker2"
  }]
}


    dynamic "tags" {
    for_each = local.private_instance

    content {
      Name = tags.value.name
    }
  }

错误

Error: Unsupported block type

  on vpc.tf line 28, in resource "aws_instance" "private":
  28:   dynamic "tags" {

Blocks of type "tags" are not expected here.

任何如何解决的建议都会有所帮助。 谢谢!

如果你想让你的标签动态化,你可以按如下方式创建它们:

  tags = {
    Name = each.key == "0" ? "PrimaryEC2" : "EC2Worker${each.key}" 
  }

您可以按如下方式使用它(假设其他一切正常):

resource "aws_instance" "private" {
  for_each      = aws_subnet.private
  ami           = var.ec2_amis[var.region]
  instance_type = var.tableau_instance
  key_name      = aws_key_pair.tableau.key_name
  subnet_id     = each.value.id

  tags = {
    Name = each.key == "0" ? "PrimaryEC2" : "EC2Worker${each.key}" 
  }
}

该代码使用条件表达式 它的工作原理如下。

如果 each.key 等于“0”(即,正在创建第一个实例),则其标签将为“PrimaryEC2”。 所有剩余的实例都将被标记为:“EC2Worker1”、“EC2Worker2”、“EC2Worker3”等等,用于尽可能多的子网。

此错误的一个可能原因是aws_subnet.private变量比 ec2 标签列表长,当您在 ec2_tags 列表中使用索引 3 查找第 4 个(不存在的元素)时,这将导致错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM