如何使用 Azure CLI 或 Terraform 创建 DNS A 记录

How to create DNS A Record usin Azure CLI or Terraform

我正在尝试在 Azure 门户中自动创建 DNS 记录,想知道是否有可能创建指向另一个 Azure 资源的别名 A DNS 记录,例如 Public IP 地址而不是 IP 记录?

希望使用 Azure CLI 或 Terraform 执行此操作。

此致, 阿雷格

您可以使用 --target-resource 创建一个空的 A 记录,它指向 Azure CLI command 中的另一个 Azure 资源 ID,如下所示:

az network dns record-set a create -g myrg -n aaa -z example.com --target-resource "/subscriptions/xxx/resourceGroups/myrg/providers/Microsoft.Network/publicIPAddresses/vmb-ip"

您可以创建一个 Terraform 模块,将目标资源作为 A 记录值的变量,让我们想象一下以下场景:

> "Record"          "TTL"      "RecordType"  "Target"
> www.contoso.com   3600   IN  A             1.1.1.1

其中“1.1.1.1”是您想要 link 的资源地址,对于此示例,将是 azurerm_public_ip

您可以使用以下内容:

variable "target_ip" {
   type        = str
   description = "Target Resource address"
}

variable "record_a_name" {
   type        = str
   description = "Target Resource address"
}


resource "azurerm_resource_group" "contoso_rg" {
  name     = "acceptanceTestResourceGroup1"
  location = "West US"
}

resource "azurerm_dns_zone" "contoso_dns" {
  name                = "contoso.com"
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_dns_a_record" "contoso_dns_a_record" {
  name                = var.record_a_name
  zone_name           = azurerm_dns_zone.contoso_dns.name
  resource_group_name = azurerm_resource_group.contoso_rg.name
  ttl                 = 300

  records = [var.target_ip]

}

而您可以这样调用模块:


data "azurerm_public_ip" "target_resource" {
  name                = "<name_of_resource_target>"
}


module "dns_example" {
  source = "<path_to_module>"

  record_a_name = "www"
  target_ip     = azurerm_public_ip.target_resource.ip_address  
}

附带说明一下,上面的代码远非生产质量,它只是为了展示如何实现。我还会使 TTL 和标签动态化,我会将记录与区域和资源组声明分离,以及其他良好做法。

参考:https://www.terraform.io/docs/providers/azurerm/r/dns_ns_record.html

resource "azurerm_dns_zone" "dns_zone" {
  name                = "bolivia.bo"
  resource_group_name = var.rg_name

  tags = {
    Environment = "QA"
    Team        = "Yes"
  }
}

resource "azurerm_dns_a_record" "dns_a_record" {
  name                = "@"
  zone_name           = azurerm_dns_zone.dns_zone.name
  resource_group_name = var.rg_name
  ttl                 = 3600
  target_resource_id  = var.public_ip_id
}

resource "azurerm_dns_a_record" "dns_www_a_record" {
  name                = "www"
  zone_name           = azurerm_dns_zone.dns_zone.name
  resource_group_name = var.rg_name
  ttl                 = 3600
  target_resource_id  = var.public_ip_id
}

resource "azurerm_dns_cname_record" "dns_api_cname_record" {
  name                = "api"
  zone_name           = azurerm_dns_zone.dns_zone.name
  resource_group_name = var.rg_name
  ttl                 = 3600
  record              = azurerm_dns_zone.dns_zone.name
}