簡體   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