快速入门:使用 Terraform 创建 Azure DNS 专用解析程序

本快速入门介绍如何使用 Terraform 创建 Azure DNS 专用解析程序。 Azure 专用 DNS 解析程序是一项为专用 Azure 网络提供自定义域名解析的服务。 它用于在虚拟网络中解析域名,无需添加自定义 DNS 解决方案。 创建的资源包括 Azure DNS 专用解析程序、虚拟网络和子网。 DNS 解析程序与虚拟网络相关联,而子网配置为被委托给 DNS 专用解析程序服务。

使用 Terraform 可以定义、预览和部署云基础结构。 使用 Terraform 时,请使用 HCL 语法来创建配置文件。 HCL 语法允许你指定云提供商(如中国)和构成云基础结构的元素。 创建配置文件后,可以创建 一个执行计划 ,以便在部署基础结构更改之前预览这些更改。 验证更改后,应用执行计划来部署基础结构。

下图总结了所使用的常规设置。 模板中使用的子网地址范围与图中所示的子网地址范围略有不同。

显示专用解析程序组件的概念图。

  • 创建具有唯一名称的 Azure 资源组。
  • 在创建的资源组中建立 Azure 虚拟网络。
  • 定义虚拟网络中的子网,并将 DNS 专用解析程序服务委托给它。
  • 在资源组中设置 DNS 专用解析程序,并将其与虚拟网络相关联。
  • 查看资源组中的 DNS 专用解析程序。

Prerequisites

实现 Terraform 代码

Note

本文的示例代码位于 Azure Terraform GitHub 存储库中。 你可以查看包含当前和以前 Terraform 版本的测试结果的日志文件。 请参阅更多 文章和示例代码,了解如何使用 Terraform 管理 Azure 资源

  1. 创建用于测试和运行示例 Terraform 代码的目录,并将其设为当前目录。

  2. 创建名为 main.tf 的文件并插入以下代码:

resource "random_pet" "rg_name" {
  prefix = var.resource_group_name_prefix
}

resource "azurerm_resource_group" "example" {
  location = var.resource_group_location
  name     = random_pet.rg_name.id
}

resource "azurerm_virtual_network" "example" {
  name                = "example-vnet"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  address_space       = ["10.0.0.0/16"]
}

resource "azurerm_subnet" "example" {
  name                 = "outbounddns"
  resource_group_name  = azurerm_resource_group.example.name
  virtual_network_name = azurerm_virtual_network.example.name
  address_prefixes     = ["10.0.0.64/28"]

  delegation {
    name = "Microsoft.Network.dnsResolvers"
    service_delegation {
      actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"]
      name    = "Microsoft.Network/dnsResolvers"
    }
  }
}

resource "azurerm_private_dns_resolver" "example" {
  name                = "example-resolver"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  virtual_network_id  = azurerm_virtual_network.example.id
}
  1. 创建名为 outputs.tf 的文件并插入以下代码:
output "resource_group_name" {
  value = azurerm_resource_group.example.name
}
  1. 创建名为 providers.tf 的文件并插入以下代码:
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
    random = {
      source  = "hashicorp/random"
      version = "~>3.0"
    }
  }
}

provider "azurerm" {
  features {}
  environment = "china"
}
  1. 创建名为 variables.tf 的文件并插入以下代码:
variable "resource_group_location" {
  type        = string
  default     = "chinanorth3"
  description = "Location of the resource group."
}

variable "resource_group_name_prefix" {
  type        = string
  default     = "rg"
  description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
}

初始化 Terraform

运行 terraform init,将 Terraform 部署进行初始化。 此命令下载 Azure 提供程序,以便管理您的 Azure 资源。

terraform init -upgrade

要点

  • 参数 -upgrade 可将必要的提供程序插件升级到符合配置版本约束的最新版本。

创建 Terraform 执行计划

运行 terraform plan 以创建执行计划。

terraform plan -out main.tfplan

要点

  • terraform plan 命令创建执行计划,但不执行它。 相反,它会确定需要执行哪些操作,以创建配置文件中指定的配置。 此模式允许你在对实际资源进行任何更改之前验证执行计划是否符合预期。
  • 使用可选 -out 参数可以为计划指定输出文件。 使用 -out 参数可以确保所查看的计划与所应用的计划完全一致。

应用 Terraform 的执行计划

运行 terraform apply 以将执行计划应用到您的云基础架构。

terraform apply main.tfplan

要点

  • 示例 terraform apply 命令假设你先前运行了 terraform plan -out main.tfplan
  • 如果为 -out 参数指定了不同的文件名,请在对 terraform apply 的调用中使用该相同文件名。
  • 如果未使用参数 -out ,则无需任何参数即可调用 terraform apply

验证结果

  1. 获取 Azure 资源组名称。

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. 运行 az dns-resolver list 查看资源组中的DNS私有解析器。

    az dns-resolver list --resource-group $resource_group_name --output table
    
  3. 运行 az dns-resolver show 查看DNS私有解析器的详细信息。

    dns_resolver_name=$(az dns-resolver list --resource-group $resource_group_name --query "[0].name" --output tsv)
    az dns-resolver show --name $dns_resolver_name --resource-group $resource_group_name
    

清理资源

如果不再需要通过 Terraform 创建的资源,请执行以下步骤:

  1. 运行 terraform plan 并指定 destroy 标志。
terraform plan -destroy -out main.destroy.tfplan

要点

  • terraform plan 命令创建执行计划,但不执行它。 相反,它会确定需要执行哪些操作,以创建配置文件中指定的配置。 此模式允许你在对实际资源进行任何更改之前验证执行计划是否符合预期。
  • 使用可选 -out 参数可以为计划指定输出文件。 使用 -out 参数可以确保所查看的计划与所应用的计划完全一致。
  1. 运行 terraform apply 来应用执行计划。
terraform apply main.destroy.tfplan

解决 Azure 上的 Terraform 问题

解决在 Azure 上使用 Terraform 时的常见问题。

后续步骤