Я пытаюсь выполнить довольно простую задачу в Terraform, и она не работает:
переменные:
hosted_zone = "example.com"
domain = "my.${var.hosted_zone}"
маршрут_53_запись:
resource "aws_route53_record" "regional" {
zone_id = "${data.aws_route53_zone.selected.zone_id}"
name = "${var.domain}"
type = "A"
ttl = "300"
records = ["4.4.4.4"]
}
Когда я бегу terraform plan я получаю это:
+ aws_route53_record.regional
id: <computed>
allow_overwrite: "true"
fqdn: <computed>
name: "my.${var.hosted_zone}"
records.#: "1"
records.3178571330: "4.4.4.4"
ttl: "300"
type: "A"
zone_id: "REDACTED"
домен должен быть my.example.com. Как соединить переменную hosted_zoned и строку, чтобы сформировать домен?





Вы не можете использовать интерполяцию в файле tfvars.
Вместо этого вы можете присоединиться к нему непосредственно в Terraform следующим образом:
hosted_zone = "example.com"
domain = "my"
resource "aws_route53_record" "regional" {
zone_id = data.aws_route53_zone.selected.zone_id
name = "${var.domain}.${var.hosted_zone}"
type = "A"
ttl = "300"
records = ["4.4.4.4"]
}
Или, если вам всегда нужно составлять эти вещи вместе, вы можете использовать локальный:
locals {
domain = "${var.domain}.${var.hosted_zone}"
}
resource "aws_route53_record" "regional" {
zone_id = data.aws_route53_zone.selected.zone_id
name = local.domain
type = "A"
ttl = "300"
records = ["4.4.4.4"]
}
Это не удалено. Вы получаете предупреждение при использовании простой интерполяции, такой как name = "${local.domain}" вместо name = local.domain, но вы все равно можете использовать "${var.domain}.${var.hosted_zone}" для соединения двух переменных с другой строкой (.).
В terraform 0.13 убрана интерполяция. Как мы можем объединить без интерполяции?