Terraform - döngüler

Nov 13 2020

Bu kaynakları oluşturan bir döngü oluşturmak mümkün mü? Aynı kaynakların pek çok tekrarı var. Bir döngü oluşturmak için haritaları kullanmayı denedim, ancak harita diğer varsayılan blokları kabul etmiyor.

Yoksa 4 kaynağın tümünü manuel olarak oluşturmak normal mi? Cevap olarak sadece birkaç öneri yeterli, kendim öğrenmeye çalışıyorum.

resource "aws_subnet" "public-test-a" {
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.16/28"
  map_public_ip_on_launch = true
  availability_zone = var.AZ[1]

  tags = {
    Name = var.subnets_names[index]
  }
}

resource "aws_subnet" "public-test-b" {
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.16/28"
  map_public_ip_on_launch = true
  availability_zone = var.AZ[1]

  tags = {
    Name = "public-test-b"
  }
}

resource "aws_subnet" "private-test-a" {
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.32/28"
  availability_zone = var.AZ[0]

  tags = {
    Name = "private-test-a"
  }
}


resource "aws_subnet" "private-test-b" {
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.48/28"
  availability_zone = var.AZ[1]

  tags = {
    Name = "private-test-b"
  }
}

Bunun gibi bir şey deniyordum ama geçerli görünmüyor.

Ayrıca aws_vpc.vpc-test-02.iddeğişkenin içinde başka bir tf'nin parçası olduğu için kullanamıyoruz .

variable "subnets" {
  type = map

  default = {
    vpc_id = aws_vpc.vpc-test-02.id
  }

  public-test-a = {
    map_public_ip_on_launch = true
    availability_zone = var.AZ[0]
  }

  public-test-b = {
    map_public_ip_on_launch = true
    availability_zone = var.AZ[1]
  }

  private-test-a = {
    availability_zone = var.AZ[0]
  }

  private-test-b = {
    availability_zone = var.AZ[1]
  }
}

variable "AZ" {
  type = list
  default = ["ap-south-1a", "ap-south-1b", "ap-south-1c"]
}

variable "subnets_cird" {
  type = list
  default = ["10.0.0.0/28", "10.0.0.16/26", "10.0.0.32/28", "10.0.0.48/28"]
}


variable "subnets_names" {
  type = list
  default = ["public-test-a", "public-test-b", "private-test-a", "private-test-b"]
}

Yanıtlar

2 FedorPetrov Nov 13 2020 at 11:14

Bu arama sayısı için ve terraform dokümantasyonundaki for_each için. Aşağıda, public-test-a ve public-test-b'yi bir genel test ile nasıl değiştirebileceğinize bir örnek verilmiştir:

variable "number_of_subnets" {
default = 2
}

resource "aws_subnet" "public-test" {
  count = var.number_of_subnets
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.16/28"
  map_public_ip_on_launch = true
  availability_zone = var.AZ[1]

  tags = {
    # here you pick the right name according to the subnet index, where e.g subnets_names = ["public-test-a","public-test-b"]
    Name = var.subnets_names[count.index]
  }
}

Aynısı private_test için de yapılabilir.

Denediğin şeylerle ilgili olarak. Değişkenlere başka değişkenler atanamaz. Bu işlevi elde etmek için yerelleri kullanın:

locals {
   x = aws_vpc.vpc-test-02.id
}

ve sonra şu değere erişin

local.x