Вы можете использовать templatefile
, чтобы попросить Terraform прочитать файл и интерпретировать его как шаблон Terraform:
resource "aws_ecs_task_definition" "task_definition_kafka" {
container_definitions = templatefile("${path.module}/task_definition_kafka.json", {
kafka_private_ip = aws_ecs_task_definition.aws_ecs_task_definition_kafka.private_ip
})
}
Хотя внешний файл интерпретируется как обычный шаблон строки Terraform , похоже, что ваша цель - в этом случае создать строку JSON, поэтому лучше использовать функцию jsonencode
, чем создавать фрагмент данных JSON с использованием нескольких шаблонных директив. Вот как написать task_definition_kafka.json
, следуя этому совету:
${jsonencode([
{
cpu: 256,
memory: 768,
portMappings: [
{
hostPort: 7002,
containerPort: 7002,
protocol: "tcp",
},
],
essential: true,
environment: [
{
name: "SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL",
value: kafka_private_ip,
},
],
},
])}
Основным преимуществом генерации всей строки JSON за один вызов jsonencode
является то, что результат гарантированно будет действительным JSON синтаксис без необходимости особых усилий для кодирования каждой части в отдельности. jsonencode
может принимать значение любого типа из языка Terraform и преобразовывать его в эквивалент JSON, поэтому вы можете использовать выражения Terraform для динамического генерирования частей структуры данных с использованием переменных шаблона, передаваемых в Второй аргумент templatefile
, как kafka_private_ip
в приведенном выше примере.