Terraform:错误查找:参数1应为类型映射,在中获取类型字符串:
Terraform lookup()函数在分析json时失败。我试图将JSON文件中的值转换为资源参数。有很多参数,我想从JSON文件或简单的文本文件中传递它们Terraform:错误查找:参数1应为类型映射,在中获取类型字符串:,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,Terraform lookup()函数在分析json时失败。我试图将JSON文件中的值转换为资源参数。有很多参数,我想从JSON文件或简单的文本文件中传递它们 module main.tf resource "aws_ssm_parameter" "default" { count = "${var.enabled == "true" ? length(var.parameter_write) : 0}" name = "${lookup(va
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")}
实现这种用例的理想方法是什么?您是否将模块变量参数定义为列表?就是这样,试试这个
"${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}"
}