如何使用 terraform 在 for 循环中创建多个资源?

Dan*_*Dan 4 terraform

我查看了一些文档以及有关 terraform 的 udemy 课程,但我不明白如何做我想做的事情。我想创建一个 for 循环,并在其中创建一个 S3 事件通知,创建一个侦听该通知的 Sns 主题,创建一个 Sqs 队列,然后将该队列订阅到该 sns 主题。似乎 terraform 中的 for 循环不够先进,无法做到这一点。我错了,是否有任何文档或示例可以解释如何在此用例中使用 for 循环?

提前致谢。

w33*_*33b 10

for_each示例如下所示:


variable names {
  type = list(string)
  description = "List of names"
}

resource "aws_example_resource" "bar" {
  for_each = toset(var.names)
  name = each.key
}
Run Code Online (Sandbox Code Playgroud)

这将创建 N 个资源(名称长度),使用 来指定每次each.key分配的值name


mon*_*mon 5

创建 AWS VPC 子网的示例然后将它们提供给 AWS EC2 实例。

resource "aws_subnet" "public" {
  count = length(var.public_subnet_cidr_blocks)
  vpc_id     = var.vpc_id
  cidr_block = var.public_subnet_cidr_blocks[count.index]
}

resource "aws_instance" "public_ec2" {
  count = length(var.public_subnet_ids)
  subnet_id = var.public_subnet_ids[count.index]
  ami           = var.ami_id
  instance_type = "t2.micro"
  tags = {
    Name = "PublicEC2${count.index}}"
  }
  provisioner "local-exec" {
    command = <<EOF
echo "Public EC2 ${count.index} ID is ${self.id}"
EOF
  }
}
Run Code Online (Sandbox Code Playgroud)

没有像下面这样的语法来创建资源。

[ for name in var.names:
 aws_s3_bucket {...} 
 aws_sns_topic {...}
]
Run Code Online (Sandbox Code Playgroud)

For 表达基本上是为了价值,而不是为了创造资源。

  • 对于表达式

    for 表达式通过转换另一个复杂类型值来创建一个复杂类型值。

要创建多个资源,如下文中使用 for_each 或 count。