Как передать список строк или строк в шаблон данных в terragrunt / terraform

Я сталкиваюсь с этой проблемой, когда пытаюсь передать список значений в шаблон данных в терраформе.

Я пробовал разными способами, например

source_vpc_endpoints в виде списка и принимая ["vpce-xxx", "vpce-yyy"],

source_vpc_endpoints = "${jsonencode(var.source_vpc_endpoints)}" в data.tf

а также

source_vpc_endpoints в виде строки и принимая "\"vpce-xxx\", \"vpce-yyy\"",

source_vpc_endpoints = var.source_vpc_endpoints" в data.tf

terragrunt.hcl

  source_vpc_endpoints = "vpce-xxx,vpce-yyy"

Data.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)


person shadow    schedule 23.12.2020    source источник


Ответы (1)


Думаю, вместо 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)}
        }
      }
    }
  ]
}
person Marcin    schedule 23.12.2020