我看了几篇文档以及有关terraform的udemy课程,但我不知道如何去做自己想做的事情。我想创建一个for循环,并在其中创建一个S3事件通知,创建一个监听该通知的Sns主题,创建一个Sqs队列,然后将该队列订阅到sns主题。似乎Terraform中的for循环不够先进,无法做到这一点。我错了吗,是否有任何文档或示例说明了此用例的循环使用方法?
谢谢。
答案 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 {...}
]
表达基本上是用于值,而不是用于创建资源。
表达式A通过转换另一个复杂类型值来创建复杂类型值。
要创建多个资源,请按照以下文档中的for_each或count进行使用。
默认情况下,资源块配置一个实际的基础结构对象。但是,有时您需要管理几个类似的对象,例如固定的计算实例池。 Terraform有两种实现方法:count和for_each 。