Terraform 组合变量和字符串

use*_*045 15 terraform

我试图在 Terraform 中做一个相当简单的任务,但它不起作用:

变量:

hosted_zone       = "example.com"
domain            = "my.${var.hosted_zone}"
Run Code Online (Sandbox Code Playgroud)

route_53_record:

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"]
}
Run Code Online (Sandbox Code Playgroud)

当我跑步时,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"
Run Code Online (Sandbox Code Playgroud)

域应该是my.example.com. 如何加入变量 hosts_zoned 和一个字符串以形成域?

yda*_*coR 22

您不能在 tfvars 文件中使用插值。

相反,您可以像这样直接在 Terraform 中加入它:

terraform.tfvars

hosted_zone = "example.com"
domain      = "my"
Run Code Online (Sandbox Code Playgroud)

主文件

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"]
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您总是需要将这些东西组合在一起,您可以使用本地:

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"]
}
Run Code Online (Sandbox Code Playgroud)

  • 它没有被删除。使用裸插值时,您会收到警告,例如 `name = "${local.domain}"` 而不是 `name = local.domain`,但您仍然可以使用 `"${var.domain}.${var.hosted_zone }"` 将两个变量与另一个字符串(`.`)连接起来。 (2认同)