json中的terraform替换变量

json中的terraform替换变量,terraform,amazon-rds,terraform-provider-aws,Terraform,Amazon Rds,Terraform Provider Aws,我正在使用terraform创建rds服务器。我使用列表变量传递选项组。选项组variable.tf中的变量如下所示 options = [ { option_name = "SQLSERVER_BACKUP_RESTORE" option_settings=[ { name = "IAM_ROLE_ARN" value = "${role_arn}" }, ]

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

options = [
   {
    option_name = "SQLSERVER_BACKUP_RESTORE"

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

我想替换main.tf中的“${role\u arn}”变量。有人能帮我解决语法问题吗?

我用

  • 将json移动到单独的文件中
  • 更新yout-json以使用
  • 添加数据资源以呈现和解析模板
  • 在资源中引用呈现的模板
  • 比如说,您将需要以下内容:

    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
    }
    
    更改后,您将获得以下内容:

    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
    }
    

    我用计算机解决这类问题

  • 将json移动到单独的文件中
  • 更新yout-json以使用
  • 添加数据资源以呈现和解析模板
  • 在资源中引用呈现的模板
  • 比如说,您将需要以下内容:

    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
    }
    
    更改后,您将获得以下内容:

    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。。。我从…将此传递给资源选项组代码。。。。它抛出错误,无法在中为每个\u使用字符串值。需要一个可编辑的集合。。。。。。。任何变量转换??在您的情况下,选项是一个列表。如果此列表中只有一个值,则可以将“选项”值更改为以渲染模板作为其单个值的列表。例如:从json中删除数组,并将资源更改为使用
    options=[data.template\u file.json\u template.rendered]
    。如果你需要不止一个值,那么你需要做更多的研究。感谢你的回复@gustavo会尝试这个。。。我尝试将函数tolist(data.template\u file.json\u template.rendered)转换为list。没用,干杯,这有助于@gustavo。。。我从…将此传递给资源选项组代码。。。。它抛出错误,无法在中为每个\u使用字符串值。需要一个可编辑的集合。。。。。。。任何变量转换??在您的情况下,选项是一个列表。如果此列表中只有一个值,则可以将“选项”值更改为以渲染模板作为其单个值的列表。例如:从json中删除数组,并将资源更改为使用
    options=[data.template\u file.json\u template.rendered]
    。如果你需要不止一个值,那么你需要做更多的研究。感谢你的回复@gustavo会尝试这个。。。我尝试将函数tolist(data.template\u file.json\u template.rendered)转换为list。不起作用