我有一个定义ECS群集的ecs_cluster
模块。我希望模块可以重复使用,以便可以创建具有不同配置的各种群集。因此,我希望能够选择指定是否在ECS主机的启动配置中创建和附加EBS卷。Terraform:如何有条件地将EBS卷分配给ECS群集
我最初尝试在启动配置中使用ebs_block_device
中的count
,例如,
variable "ebs_volume_device_name" { type = "string", default = "" }
variable "ebs_volume_type" { type = "string", default = "" }
variable "ebs_volume_size" { type = "string", default = "" }
resource "aws_launch_configuration" "launch_configuration" {
name_prefix = "foo"
image_id = "bar"
# Irrelevant stuff removed for brevity...
ebs_block_device {
count = "${length(var.ebs_volume_device_name) > 0 ? 1 : 0}"
device_name = "${var.ebs_volume_device_name }"
volume_type = "${var.ebs_volume_type}"
volume_size = "${var.ebs_volume_size}"
}
}
然而,这将导致以下错误:
module.ecs_cluster.aws_launch_configuration.launch_configuration: ebs_block_device.0: invalid or unknown key: count
我然后试图指定launch_configuration资源两次,一次以和一次而不EBS块设备例如
variable "ebs_volume_device_name" { type = "string", default = "" }
variable "ebs_volume_type" { type = "string", default = "" }
variable "ebs_volume_size" { type = "string", default = "" }
resource "aws_launch_configuration" "launch_configuration" {
count = "${length(var.ebs_volume_device_name) == 0 ? 1 : 0}"
name_prefix = "foo"
image_id = "bar"
# Irrelevant stuff removed for brevity...
# No specification of ebs_block_device
}
resource "aws_launch_configuration" "launch_configuration" {
count = "${length(var.ebs_volume_device_name) > 0 ? 1 : 0}"
name_prefix = "foo"
image_id = "bar"
# Irrelevant stuff removed for brevity...
ebs_block_device {
device_name = "${var.ebs_volume_device_name }"
volume_type = "${var.ebs_volume_type}"
volume_size = "${var.ebs_volume_size}"
}
}
但Terraform然后抱怨,因为资源被定义两次。
由于我有一个取决于启动配置名称的自动缩放组,因此我无法更改任一资源的ID,例如,
resource "aws_autoscaling_group" "autoscaling_group" {
name = "foo"
launch_configuration = "${aws_launch_configuration.launch_configuration.name}"
}
我想我可以有条件地定义2个自动缩放组并映射一个到每个启动配置,但这感觉真的很混乱。此外,这些资源本身也具有相关资源,例如cloudwatch度量标准警报等。使用2个独立条件重复所有代码两次感觉非常不合情理。我在这里错过了一招吗?
感谢任何相关的Terraform智慧!