如何使用 Terraform 在 GCP 中添加 DNS 记录?

Wel*_*ing 8 dns google-cloud-platform terraform terraform-provider-gcp

我正在尝试让 terraform 将“A”记录添加到 GCP 中的 dns 区域。这样做会导致错误:“未设置更新服务器”。此处描述类似的错误。所以我从那里发表的评论中收集到,我需要在我的 dns 提供程序中更新项目。我尽职尽责地试图提供。

provider "dns" {
  update {
    server = "xxx.xxx.x.x"
  }
}
Run Code Online (Sandbox Code Playgroud)

除了我不知道那里有什么 IP,而且我的第一次尝试失败了。

我需要其他设置吗?

在文档中注意到以下格式...

provider "dns" {
  update {
    server        = "192.168.0.1"
    key_name      = "example.com."
    key_algorithm = "hmac-md5"
    key_secret    = "3VwZXJzZWNyZXQ="
  }
}
Run Code Online (Sandbox Code Playgroud)

我不明白这些设置从何而来。

更新:
马丁的建议(下面接受的答案)很有魅力。

在接下来的拥有这个挣扎,诀窍是使用google_dns_record_set代替dns_a_record_set

Mar*_*ins 8

dns供应商正在实施中定义的标准DNS更新协议RFC 2136:在域名系统动态更新,这往往是由自托管DNS服务器软件等进行安装BIND。在这种情况下,凭据将由 BIND 操作员在服务器端配置,然后您又将给定的凭据传递给提供程序。

不幸的是,由于 DNS 趋向于成为各种供应商为您提供的托管服务,这些供应商中的大多数选择忽略 RFC 2136 并实现他们自己的专有 API。因此,Terraformdns提供商的管理功能与大多数托管 DNS 产品不兼容。

相反,我们使用特定于供应商的提供程序来管理这些。就您而言,由于您显然在使用 Google Cloud DNS,因此您可以使用googleTerraform 提供商的资源类型来管理您的 DNS 区域和记录。具体来说:

这是一个入门的最小示例:

resource "google_dns_managed_zone" "example" {
  name     = "example"
  dns_name = "example.com."
}

resource "google_dns_record_set" "example" {
  managed_zone = google_dns_managed_zone.example.name

  name    = "www.${google_dns_managed_zone.example.dns_name}"
  type    = "A"
  rrdatas = ["10.1.2.1", "10.1.2.2"]
  ttl     = 300
}
Run Code Online (Sandbox Code Playgroud)

这些供应商使用特定于供应商的 API 的一个主要优势是管理操作与用于其其余 API 的身份验证机制集成,因此只要您的 Google Cloud Platform 提供商拥有具有足够权限的凭据来管理这些对象,您就应该不需要任何额外的提供者配置。

Terraform 为许多不同的托管 DNS 供应商提供了供应商支持,因此不使用 Google Cloud DNS 的人们希望通过浏览可用的供应商,发现他们选择的供应商也以类似的方式得到支持。