【问题标题】:terraform replace variable inside jsonterraform替换json中的变量
【发布时间】:2020-11-27 17:42:37
【问题描述】:

我正在使用 terraform 创建 rds 服务器。我使用列表变量传递选项组。 variable.tf 中的选项组变量如下所示

options = [
   {
    option_name = "SQLSERVER_BACKUP_RESTORE"

    option_settings=[
      {
      name  = "IAM_ROLE_ARN"
      value = "${role_arn}"
    },
  ]
},

我想替换 main.tf 中的“${role_arn}”变量。任何人都可以帮助语法吗?

【问题讨论】:

    标签: terraform amazon-rds terraform-provider-aws


    【解决方案1】:

    我使用terraform template files 解决了这类问题。

    1. 将您的 json 移至单独的文件;
    2. 更新您的 json 以使用 Terraform template syntax
    3. 添加数据资源以呈现和解析您的模板;
    4. 在您的资源中引用您呈现的模板。

    假设你需要类似的东西:

    resource "provider_resource" "name" {
      property = "value"
      options = [
        {
          option_name = "SQLSERVER_BACKUP_RESTORE"
          option_settings = [
            {
              name  = "IAM_ROLE_ARN"
              value = "${role_arn}"
            },
          ]
        }
      ]
    }
    

    更改后你会得到类似的东西:

    data "template_file" "json_template" {
      template = file("path/to/file.json")
      vars = {
        role_arn = var.dynamic_value
      }
    }
    
    resource "provider_resource" "name" {
      property = "value"
      options = data.template_file.json_template.rendered
    }
    

    【讨论】:

    • 干杯。这对@gustavo 很有帮助...我将其从github.com/terraform-aws-modules/terraform-aws-rds/tree/master/… 传递给资源选项组代码...。它抛出错误不能在for_each 中使用字符串值。需要一个可迭代的集合.......任何变量转换??
    • 在您的情况下,选项是一个列表。如果此列表中只有一个值,则可以将选项值更改为一个列表,并将呈现的模板作为其单个值。例如:从您的 json 中删除数组并将资源更改为使用 options = [data.template_file.json_template.rendered]。如果您需要多个值,则需要进行更多研究。
    • 感谢您的回复 @gustavo 会尝试这个...我正在尝试使用函数 tolist(data.template_file.json_template.rendered) 来隐藏到 list 。不工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2021-11-25
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2020-12-12
    相关资源
    最近更新 更多