首页 > 解决方案 > Terraform:如何阅读地图列表?

问题描述

请参见下面的示例:

data "aws_kms_secrets" "api_key" {
  count = "${length(keys(var.keys))}"

  secret {
    name    = "secret_name"
    payload = "${element(values(var.keys), count.index)}"
  }
}

resource "aws_api_gateway_api_key" "access_key" {
  count = "${length(keys(var.keys))}"

  name  = "${var.environment}-${element(keys(var.keys), count.index)}"
  value = "${lookup(element(data.aws_kms_secrets.api_key.*.plaintext, count.index), "secret_name")}"
}

从数据资源中查找明文值似乎是不可能的。

value = "${lookup(element(data.aws_kms_secrets.api_key.*.plaintext, count.index), "secret_name")}"

结果是lookup: argument 1 should be type map, got type string in:

我尝试了许多, , 和字典语法的组合element,但没有任何效果。lookup*

我的var.keys样子:

keys = {
  key-name-one = "sssss"
  key-name-two = "sss"
}

标签: terraform

解决方案


这里的技巧是使用字典语法来替换元素调用,它在映射列表中表现得更好。

value = "${lookup(data.aws_kms_secrets.api_key.*.plaintext[count.index], "secret_name")}"

这样做的诱惑data.aws_kms_secrets.api_key[count.index].plaintext是无效的 HCL


推荐阅读