【问题标题】:How to iterate list of objects in terraform locals如何在 terraform locals 中迭代对象列表
【发布时间】:2021-08-08 16:14:39
【问题描述】:

基本上,我们正在尝试使用 terraform 0.13.5 创建 cloudwatch 仪表板,我们的要求是将 2 变量传递给小部件块,即 ${function_name} 和 ${title}。这将作为对象变量传递。

错误:无效的模板插值 不能在字符串模板中包含给定值:需要字符串。

代码如下:

locals{
    lambda = [
        {
            function_name = "lambda1"
            title = "Error"
        },
        {
            function_name = "lambda1"
            title = "Error1"  
        }
    ]
    widget_defination = <<EOT
    %{ for function_name , title in local.lambda}
    [
    {
      "type": "metric",
      "x": 0,
      "y": 0,
      "width": 12,
      "height": 6,
      "properties": {
        "metrics": [
          [
            "AWS/EC2",
            "CPUUtilization",
            "FunctionName",
            "${funtion_name}"
          ]
        ],
        "period": 300,
        "stat": "Average",
        "region": "us-east-1",
        "title": "${title}"
      }
    }
  ]
}
%{endfor }
EOT
}

【问题讨论】:

  • 我被指派审查/改进你的问题,但我担心我们会在这里产生分歧,所以我会尝试给你一个答案

标签: list for-loop object foreach terraform


【解决方案1】:

据我所知,这不是在 terraform 中使用变量的方法。 您必须在自己的文件中声明变量和类型,并将它们的值分配到不同的文件中或作为资源创建的结果。

您在谈论小部件,所以我不确定您是否已经知道这一点,因为我以前从未使用过小部件。但是,如果您需要尽快帮助,我不介意尝试..

变量.tf

variable "project_name" {
  type = string
}
variable "vpc_id" {}
...

terraform.tfvars

project_name = "my-project"
vpc_id = "vpc-10101010"
...

将其放入模板的方式取决于您。 我会建议像 bash 这样的简单方法,但 IDK 可能小部件很有趣

还有一点编辑,因为我刚刚看到你的“问题”很晚..是的,不要混合变量和字符串..你应该投票给你自己的答案:D

【讨论】:

  • 是的,我同意你的观点,因为它是针对我这里的用例的。如果有人正在尝试这种方式,则刚刚发布。 :)
【解决方案2】:

明白了。

我们需要在小部件中调用对象,例如 -

${function_name.function_name} 和 ${function_name.title}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    相关资源
    最近更新 更多