我正在尝试在Terraform中创建一个模块,可以使用不同的变量输入多次实例化.在模块中,当名称依赖于输入变量时,如何引用资源?我试图通过括号语法("${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}"
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
下图显示了正在发生的事情。
terraform 文档没有明确使用“NAME”与基础设施供应商(例如 AWS 或 Google Cloud)创建的实际资源所使用的“名称”值。
此外,它并不总是“name=”,但有时,例如“endpoint=”甚至“resource_group_name=”或其他。
有几种方法可以生成多个“名称”值 - 使用计数、变量等,或者在 tfvar 文件内并运行terraform apply -var-file=foo.tfvars
| 归档时间: |
|
| 查看次数: |
11474 次 |
| 最近记录: |