Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用terraform在for循环中创建多个资源?_Terraform - Fatal编程技术网

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

如何使用terraform在for循环中创建多个资源?,terraform,Terraform,我已经看了一些关于terraform的文档和我的课程,我不知道如何做我想做的事情。我想创建一个for循环,在其中我想创建一个S3事件通知,创建一个侦听该通知的Sns主题,创建一个Sqs队列,然后将该队列订阅到Sns主题。这似乎是因为地形中的回路不够先进,无法做到这一点。是否我错了,是否有任何文档或示例解释如何在这个用例中使用for循环 提前感谢。创建AWS VPC子网的示例,然后将其提供给AWS EC2实例 resource "aws_subnet" "public" { count = l

我已经看了一些关于terraform的文档和我的课程,我不知道如何做我想做的事情。我想创建一个for循环,在其中我想创建一个S3事件通知,创建一个侦听该通知的Sns主题,创建一个Sqs队列,然后将该队列订阅到Sns主题。这似乎是因为地形中的回路不够先进,无法做到这一点。是否我错了,是否有任何文档或示例解释如何在这个用例中使用for循环


提前感谢。

创建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 expression基本上是用于值,而不是用于创建资源

[ for name in var.names:
 aws_s3_bucket {...} 
 aws_sns_topic {...}
]
  • for表达式通过转换另一个复杂类型值来创建复杂类型值

要创建多个资源,请在下面的文档中使用for_each或count

  • 默认情况下,资源块配置一个真实的基础结构对象。但是,有时您需要管理几个类似的对象,例如一个固定的计算实例池Terraform有两种方法可以做到这一点:计数和计算每种


迭代器在资源范围内,而不是在资源范围外。有鉴于此,完全有可能按照您描述的功能进行操作。更多的帮助可以通过你在这方面的尝试的MCVE提供。是的,这是我从文档中看到的。我希望能够在循环中动态创建资源。我在另一篇SO帖子上看到,人们一直在用python创建自己的包装器,以基本上生成tf文件,这是实现这一点的一种方法。。每个资源类型都将独立创建,每个资源类型都有各自的for_。不在一个大for循环中,如果它是您所期望的,您可以在其中创建一个S3事件,然后将它交给SNS,然后在循环中创建它。