如何在带有Terraform的for循环中创建多个资源?

时间:2020-04-01 19:55:34

标签: terraform

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

谢谢。

1 个答案:

答案 0 :(得分:3)

创建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
  }
}

没有下面的语法可以创建资源。

[ for name in var.names:
 aws_s3_bucket {...} 
 aws_sns_topic {...}
]

表达基本上是用于值,而不是用于创建资源。

  • for Expressions

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

要创建多个资源,请按照以下文档中的for_each或count进行使用。

相关问题