Terraform - loop
Apakah mungkin untuk membuat loop yang membuat sumber daya ini? Ada banyak pengulangan dari sumber yang sama. Saya mencoba menggunakan peta untuk membuat lingkaran tetapi peta tidak menerima blok default lainnya.
Atau apakah normal untuk membuat semua 4 resource secara manual? Beberapa saran sebagai jawaban sudah cukup, saya mencoba mempelajarinya sendiri.
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"
}
}
Saya mencoba sesuatu seperti ini tetapi tampaknya tidak valid.
Juga kita tidak bisa menggunakan aws_vpc.vpc-test-02.iddi dalam variabel karena bagiannya dari tf lain.
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"]
}
Jawaban
Untuk jumlah pencarian dan for_each dalam dokumentasi terraform. Berikut adalah contoh, bagaimana Anda bisa mengganti public-test-a dan public-test-b dengan satu public-test:
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]
}
}
Hal yang sama dapat dilakukan untuk private_test.
Mengenai hal-hal yang telah Anda coba. Variabel tidak dapat diberikan variabel lain. Untuk mencapai fungsi ini gunakan penduduk setempat:
locals {
x = aws_vpc.vpc-test-02.id
}
dan kemudian mengakses nilai like
local.x