1

当我尝试将值列表传递给 terraform 中的数据模板时,我遇到了这个问题。

我尝试了不同的方法,例如

source_vpc_endpoints作为一个列表并纳入["vpce-xxx", "vpce-yyy"]

source_vpc_endpoints = "${jsonencode(var.source_vpc_endpoints)}"在数据.tf

source_vpc_endpoints作为一个字符串并接收"\"vpce-xxx\", \"vpce-yyy\""

source_vpc_endpoints = var.source_vpc_endpoints"在数据.tf

terragrunt.hcl

  source_vpc_endpoints = "vpce-xxx,vpce-yyy"

数据.tf

data "template_file" "resource_policy" {
    template = file("resourcePolicy.json")

    vars = {
        resource = aws_api_gateway_rest_api.api_gateway_rest.arn
        source_vpc_endpoints = "${jsonencode(split(",", var.source_vpc_endpoints))}"
    }
}

资源政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "${resource}",
      "Condition": {
        "StringEquals": {
          "aws:SourceVpce": "${source_vpc_endpoints}"
        }
      }
    }
  ]
}

他们每个人都给我这个错误:

控制台:错误:“策略”包含无效的 JSON:对象键后的无效字符“v”:值对

  on aws_api_gateway_rest_api_policy.tf line 4, in resource "aws_api_gateway_rest_api_policy" "policy":
   4:   policy = data.template_file.resource_policy.rendered


[terragrunt] 2020/12/23 17:35:07 Hit multiple errors:
exit status 1

有没有办法来解决这个问题 ?

我正在使用 terraform (0.12.29) 和 terragrunt (v0.23.2) aws provider ("~>v3.21.0")

4

1 回答 1

2

而不是template_file,我认为使用可以将复杂变量传递到的模板文件会更容易。

variable "source_vpc_endpoints" {
    default = ["vpce-xxx", "vpce-yyy"]
}

locals {
    resource_policy =  templatefile("resourcePolicy.json", {
      resource             = aws_api_gateway_rest_api.api_gateway_rest.arn
      source_vpc_endpoints = var.source_vpc_endpoints
    })
}

在哪里resourcePolicy.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "${resource}",
      "Condition": {
        "StringEquals": {
          "aws:SourceVpce": ${jsonencode(source_vpc_endpoints)}
        }
      }
    }
  ]
}
于 2020-12-23T10:38:28.490 回答