引用Terraform中以变量命名的资源

时间:2016-07-27 17:33:41

标签: terraform

我正在尝试在Terraform中创建一个可以使用不同的变量输入多次实例化的模块。在模块中,当名称依赖于输入变量时,如何引用资源?我试图通过括号语法(function padIt(str,n){ //coding here var newStr = ""; var padding = "*"; var i = 0; while(i<=n){ if (i%2===0){ newStr = newStr+padding; } else{ newStr = padding+str; } i++; } return newStr; } )来做,但我猜对了。

(警告:我可能会以完全错误的方式解决这个问题)

这是我的模块(简化)"${aws_ecs_task_definition[var.name].arn}"文件:

main.tf

我收到以下错误:

variable "name" {}

resource "aws_ecs_service" "${var.name}" {
    name = "${var.name}_service"
    cluster = ""
    task_definition = "${aws_ecs_task_definition[var.name].arn}"
    desired_count = 1
}

resource "aws_ecs_task_definition" "${var.name}" {
    family = "ecs-family-${var.name}"
    container_definitions = "${template_file[var.name].rendered}"
}

resource "template_file" "${var.name}_task" {
    template = "${file("task-definition.json")}"

    vars {
        name = "${var.name}"
    }
}

2 个答案:

答案 0 :(得分:14)

我从根本上误解了模块是如何运作的。

Terraform不支持​​资源名称中的插值(请参阅relevant issues),但这在我的情况下并不重要,因为模块的每个实例的资源都在实例的命名空间。我担心资源名称冲突,但模块系统已经处理过。

答案 1 :(得分:0)

下面的图片显示了正在发生的事情。

相对于用于基础设施供应商创建的实际资源的“ name” 值,terraform文档未明确使用“ NAME” ,AWS或Google Cloud)。

此外,它并不总是“ name = ,但是有时,例如” endpoint = 甚至“ resource_group_name =

有两种方法可以生成多个“名称” 值-使用计数,变量等,或者在tfvar文件中并运行 terraform apply -var-file = foo.tfvars

terraform resource