2016-07-27 187 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,很好的電話。我已經更新了我的答案以澄清,但如果對其他人無用,刪除此問題/答案組合也可以。 –