【问题标题】:Terraform: Error lookup: argument 1 should be type map, got type string in:Terraform:错误查找:参数 1 应该是类型映射,得到类型字符串:
【发布时间】:2019-07-20 11:05:53
【问题描述】:

Terraform lookup() 函数在解析 json 时失败。我正在尝试将值从 JSON 文件获取到资源参数。有很多参数,我想从 JSON 文件或简单的文本文件中传递它们。

module main.tf
resource "aws_ssm_parameter" "default" {
  count           = "${var.enabled == "true" ? length(var.parameter_write) : 0}"
  name            = "${lookup(var.parameter_write[count.index], "name")}"
  description     = "${lookup(var.parameter_write[count.index], "description", lookup(var.parameter_write[count.index], "name"))}"
  type            = "${lookup(var.parameter_write[count.index], "type", "SecureString")}"
  value           = "${lookup(var.parameter_write[count.index], "value")}"
  overwrite       = "${lookup(var.parameter_write[count.index], "overwrite", "false")}"
  allowed_pattern = "${lookup(var.parameter_write[count.index], "allowed_pattern", "")}"
  tags            = "${var.tags}"
}

根模块 main.tf

data "template_file" "env" {
  template = "${file("${path.module}/env.tpl")}"
}

module "parameter-store" {
  source = "../../modules/ssm"

  parameter_write = ["${data.template_file.env.rendered}"]

  tags = {
    ManagedBy = "Terraform"
  }
}

模板文件

[
  {
    name      = "NAME_1"
    value     = "1440"
    type      = "String"
    overwrite = "true"
  },
  {
    name      = "NAME_2"
    value     = "100000"
    type      = "String"
    overwrite = "true"
  },
  {
    name        = "NAME_3"
    value       = "10080"
    type        = "String"
    overwrite   = "true"
    description = "example variable"
  },
]

错误:

module.parameter-store.aws_ssm_parameter.default: At column 3, line 1: lookup: argument 1 should be type map, got type string in:

${lookup(var.parameter_write[count.index], "value")}

实现这种用例的理想方法是什么?

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案1】:

    您是否将模块变量 parameter_write 定义为列表?所以试试这个。

    "${lookup(element(var.parameter_write, count.index), "value"}"
    

    如果这不起作用,您使用的是什么版本的 terraform?因为看起来数组值返回的是字符串而不是映射。如果是这样,你可以

     data "external" "map" {
          program = ["echo", "${element(var.parameter_write, count.index)}"]
     }
    
       output "ssm_value" {
          value = "${data.external.map.value}"
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 2020-01-18
      • 2019-11-14
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      相关资源
      最近更新 更多