2016-07-27 110 views
3

我试图在Terraform中创建一个模块,该模块可以使用不同的变量输入多次实例化。在模块中,如何在资源名称取决于输入变量时引用资源?我试图通过括号语法("${aws_ecs_task_definition[var.name].arn}")来做到这一点,但我只是猜对了。引用在Terraform中用变量命名的资源

(警告:我可能中会对此完全错误的方式)

这里是我的模块(简体)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}" 
    } 
} 

,我发现了以下错误:

Error loading Terraform: Error downloading modules: module foo: Error loading .terraform/modules/af13a92c4edda294822b341862422ba5/main.tf: Error reading config for aws_ecs_service[${var.name}]: parse error: syntax error 

回答

5

我从根本上误解了模块的工作原理。

Terraform不支持​​在资源名称中插值(请参阅relevantissues),但这对我而言并不重要,因为模块的每个实例的资源都在实例的名称空间中。我担心资源名称碰撞,但模块系统已经处理。

+0

此外,显然你不能内插资源名称。 (还有吗?) –

+1

就这一点而言,对于有类似问题的其他人来说这不是一个有用的答案。我建议你重做答案以解释错误发生的原因以及如何解决它(特别关注不能插入资源名称的事实)或删除问题/答案组合。 – ydaetskcoR

+0

@ydaetskcoR,很好的电话。我已经更新了我的答案以澄清,但如果对其他人无用,删除此问题/答案组合也可以。 –