Terraform 地形的怪异行为';s随机随机洗牌提供程序
我有以下配置:Terraform 地形的怪异行为';s随机随机洗牌提供程序,terraform,Terraform,我有以下配置: variable "private_subnets" { default = ["subnet-A", "subnet-B"] } resource "random_shuffle" "az" { input = ["${var.private_subnets}"] result_count = 1 } module "server" { source = "./modules/aws-ec2" instance_count = 3 name = "$
variable "private_subnets" {
default = ["subnet-A", "subnet-B"]
}
resource "random_shuffle" "az" {
input = ["${var.private_subnets}"]
result_count = 1
}
module "server" {
source = "./modules/aws-ec2"
instance_count = 3
name = "${var.env}-server"
stack = "server"
role = "server"
ami = "${lookup(var.aws_amis, var.aws_region, "")}"
instance_type = "t2.micro"
subnet_id = "${random_shuffle.az.result[0]}"
vpc_security_group_ids = ["${var.security_groups}"]
}
我原以为Terraform会为每个实例随机选择一个子网\u id
,但它总是选择列表中的第一个项目,即子网a。根据要创建的实例数,从列表中随机选择一个项目的最佳/建议方法是什么
提前谢谢
random\u shuffle
像大多数地形资源一样接受count
参数,因此如果您这样做:
resource "random_shuffle" "az" {
input = ["${var.private_subnets}"]
result_count = 1
count = 3
}
它将为您提供3个阵列,每个阵列具有1个子网。访问它将取决于您如何准确地在模块内创建实例,但您使用的大多数实例都依赖于aws\u实例资源
,因此它将类似于:
resource "aws_instance" "foo" {
count = 3
subnet_id = ${element(random_shuffle.az, count.index)}
}
谢谢你!我还找到了另一种方法,计算实例的模
count
和子网列表的长度,并将结果用作子网列表的索引。@Francis现在无法检查它,但我认为元素()
这样就不需要模了。@programming\u and\u math我很确定不是这样的。@JakubKania你说得对。我认为它是这样工作的,但结果是我在模板的其他部分有一个错误。我删除了我的评论,以免混淆人们。