我有一個定義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智慧!