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你说得对。我认为它是这样工作的,但结果是我在模板的其他部分有一个错误。我删除了我的评论,以免混淆人们。