cara merujuk ke sumber daya yang dibuat dengan for_each di terraform

Aug 20 2020

Inilah yang saya coba lakukan. Saya memiliki 3 gateway NAT yang diterapkan ke AZ terpisah. Sekarang saya mencoba membuat 1 tabel rute untuk subnet pribadi saya yang mengarah ke gateway NAT. Di terraform saya telah membuat Gateway NAT menggunakan for_each. Sekarang saya mencoba untuk mengasosiasikan gateway NAT ini dengan tabel rute pribadi dan mendapatkan kesalahan karena saya membuat gateway NAT menggunakan for_each. Pada dasarnya, saya mencoba merujuk ke sumber daya yang dibuat dengan for_each di sumber daya yang saya tidak perlu menggunakan "for_each." Di bawah ini adalah kode dan pesan kesalahan. Saran apa pun akan dihargai.

resource "aws_route_table" "nat" {
  vpc_id = aws_vpc.main.id

  route {
    cidr_block     = "0.0.0.0/0"
    nat_gateway_id = aws_nat_gateway.main[each.key].id
  }

  tags = {
    Name = "${var.vpc_tags}_PrivRT" } } resource "aws_eip" "main" { for_each = aws_subnet.public vpc = true lifecycle { create_before_destroy = true } } resource "aws_nat_gateway" "main" { for_each = aws_subnet.public subnet_id = each.value.id allocation_id = aws_eip.main[each.key].id } resource "aws_subnet" "public" { for_each = var.pub_subnet vpc_id = aws_vpc.main.id cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, each.value) availability_zone = each.key map_public_ip_on_launch = true tags = { Name = "PubSub-${each.key}"
  }
}

Kesalahan

Error: Reference to "each" in context without for_each



on vpc.tf line 89, in resource "aws_route_table" "nat":
  89:     nat_gateway_id = aws_nat_gateway.main[each.key].id

The "each" object can be used only in "resource" blocks, and only when the
"for_each" argument is set.

Jawaban

2 JDD Aug 20 2020 at 01:23

Masalahnya adalah Anda merujuk each.keypada nat_gateway_id properti "aws_route_table" "nat"sumber daya tanpa for_eachdi mana pun di sumber daya atau sub-blok itu.

Tambahkan for_each ke sumber daya itu dan itu akan berhasil:

Berikut beberapa contoh kode (belum teruji):

resource "aws_route_table" "nat" {
  for_each = var.pub_subnet

  vpc_id = aws_vpc.main.id

  route {
      cidr_block     = "0.0.0.0/0"
      nat_gateway_id = aws_nat_gateway.main[each.key].id
  }
}