Terraform random_shuffle 提供者的奇怪行为
Weird behavior of Terraform's random_shuffle provider
我有以下配置:
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 会为每个实例选择一个随机 subnet_id
,但它总是选择列表中的第一项,即 subnet-A。 best/suggested 根据要创建的实例数从列表中随机选择项目的方法是什么?
提前致谢!
random_shuffle
像大多数 Terraform 资源一样接受 count
参数,所以如果您这样做:
resource "random_shuffle" "az" {
input = ["${var.private_subnets}"]
result_count = 1
count = 3
}
它会给你 3 个数组,每个数组有 1 个子网。访问它将取决于您在模块中创建实例的精确程度,但大多数您使用的是 aws_instance resource
,因此它将类似于:
resource "aws_instance" "foo" {
count = 3
subnet_id = ${element(random_shuffle.az, count.index)}
}
我有以下配置:
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 会为每个实例选择一个随机 subnet_id
,但它总是选择列表中的第一项,即 subnet-A。 best/suggested 根据要创建的实例数从列表中随机选择项目的方法是什么?
提前致谢!
random_shuffle
像大多数 Terraform 资源一样接受 count
参数,所以如果您这样做:
resource "random_shuffle" "az" {
input = ["${var.private_subnets}"]
result_count = 1
count = 3
}
它会给你 3 个数组,每个数组有 1 个子网。访问它将取决于您在模块中创建实例的精确程度,但大多数您使用的是 aws_instance resource
,因此它将类似于:
resource "aws_instance" "foo" {
count = 3
subnet_id = ${element(random_shuffle.az, count.index)}
}