टेराफॉर्म - लूप्स

Nov 13 2020

क्या यह संसाधन बनाने वाला लूप बनाना संभव है? समान संसाधनों का बहुत दोहराव है। मैंने एक लूप बनाने के लिए नक्शे का उपयोग करने की कोशिश की, लेकिन मानचित्र किसी अन्य डिफ़ॉल्ट ब्लॉक को स्वीकार नहीं करता है।

या सभी 4 संसाधनों को मैन्युअल रूप से बनाना सामान्य है? उत्तर के रूप में बस कुछ सुझाव पर्याप्त हैं, मैं इसे स्वयं सीखने की कोशिश कर रहा हूं।

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"
  }
}

मैं कुछ इस तरह की कोशिश कर रहा था, लेकिन यह मान्य नहीं लगता है।

इसके अलावा, हम aws_vpc.vpc-test-02.idदूसरे tf के भाग के बाद से चर के अंदर उपयोग नहीं कर सकते हैं ।

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"]
}

जवाब

2 FedorPetrov Nov 13 2020 at 11:14

इस खोज के लिए और टेराफ़ॉर्म प्रलेखन में for_each की गणना करें। यहाँ एक उदाहरण है, आप सार्वजनिक-परीक्षण-ए और सार्वजनिक-परीक्षण-बी को एक सार्वजनिक-परीक्षण के साथ कैसे बदल सकते हैं:

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]
  }
}

वही प्राइवेट_टेस्ट के लिए किया जा सकता है।

आपके द्वारा आजमाई गई चीजों के बारे में। चर को एक और चर नहीं सौंपा जा सकता है। इस कार्यक्षमता को प्राप्त करने के लिए स्थानीय लोगों का उपयोग करें:

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

और फिर जैसे मान को एक्सेस करें

local.x