如何使用 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
}
我正在尝试在 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
}