当json要求值是整数时,将地形插值到json文件

Dav*_*vid 2 terraform

尝试解决是否可行。拖曳Terraform文档无济于事(没有太多惊喜)。

以下面的极细线示例为例。

[
  {
    "cpu": "${var.master_container_cpu}",
  }
]
Run Code Online (Sandbox Code Playgroud)

调用aws_ecs_task_definition资源时,与该tf参数相邻;

container_definitions = "${file("task-definitions/example.json")}"
Run Code Online (Sandbox Code Playgroud)

将导致以下错误;

Error: aws_ecs_task_definition.example-task: ECS Task Definition container_definitions is invalid: Error decoding JSON: json: cannot unmarshal string into Go struct field ContainerDefinition.Cpu of type int64
Run Code Online (Sandbox Code Playgroud)

任何帮助都超过了欢迎:)

Ste*_*hen 7

看起来您应该在定义中使用模板之前先使用模板来编译JSON

data "template_file" "task" {
  template = "${file("${task-definitions/example.json")}"

  vars {
    cpu = "${var.master_container_cpu}"
  }
}
Run Code Online (Sandbox Code Playgroud)

在JSON文件中,您可以使用引用var ${cpu}

然后,您可以使用输出作为定义

container_definitions = "${data.template_file.task.rendered}"

  • 只是想在 2021 年提供更新,对于 Terraform 0.12 及更高版本,需要对非常量表达式使用插值语法。例如,`"${file("${task-definitions/example.json")}"`应该写成`file("${task-definitions/example.json")`。虽然旧语法仍然有效,但已被弃用。 (2认同)