Прочитать на английском

Поделиться через


Краткое руководство. Создание частного сопоставителя Azure DNS с помощью Terraform

В этом кратком руководстве описывается, как использовать Terraform для создания частного сопоставителя Azure DNS. Частный сопоставитель DNS Azure — это служба, которая предоставляет разрешение имени личного домена для частной сети Azure. Он используется для разрешения доменных имен в виртуальной сети без необходимости добавлять пользовательское решение DNS. Созданные ресурсы включают частный сопоставитель Azure DNS, виртуальную сеть и подсеть. Сопоставитель DNS связан с виртуальной сетью, и подсеть настраивается с делегированием службы частного сопоставителя DNS.

Terraform поддерживает определение, предварительный просмотр и развертывание облачной инфраструктуры. С помощью Terraform можно создавать файлы конфигурации с применением синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, например Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации создается план выполнения, который позволяет предварительно просматривать изменения инфраструктуры до их развертывания. После проверки изменений примените план выполнения для развертывания инфраструктуры.

На следующем рисунке приведены общие сведения об используемой настройке. Диапазоны адресов подсети, используемые в шаблонах, немного отличаются от диапазонов адресов, показанных на рисунке.

Концептуальная фигура, отображающая компоненты частного сопоставителя.

  • Создайте группу ресурсов Azure с уникальным именем.
  • Создайте виртуальную сеть Azure в созданной группе ресурсов.
  • Определите подсеть в виртуальной сети и делегировать службу частного сопоставителя DNS.
  • Настройте частный сопоставитель DNS в группе ресурсов и свяжите его с виртуальной сетью.
  • Просмотрите частный сопоставитель DNS в группе ресурсов.

Необходимые компоненты

Реализация кода Terraform

  1. Создайте каталог, в котором необходимо протестировать и запустить пример кода Terraform и сделать его текущим каталогом.

  2. Создайте файл с именем main.tfи вставьте следующий код:

    Terraform
    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
    }
    
  3. Создайте файл с именем outputs.tfи вставьте следующий код:

    Terraform
    output "resource_group_name" {
      value = azurerm_resource_group.example.name
    }
    
  4. Создайте файл с именем providers.tfи вставьте следующий код:

    Terraform
    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  5. Создайте файл с именем variables.tfи вставьте следующий код:

    Terraform
    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      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 network dns record-set list , чтобы просмотреть службу частного сопоставителя DNS.

    Azure CLI
    az network dns record-set list --output table
    
  3. Выполните команду az network private-dns zone show , чтобы просмотреть службу частного сопоставителя DNS в группе ресурсов.

    Azure CLI
    az network private-dns zone show --name $private_dns_zone_name --resource-group $resource_group_name 
    

Очистка ресурсов

Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:

  1. Выполните команду terraform plan и укажите флаг destroy.

    Консоль
    terraform plan -destroy -out main.destroy.tfplan
    

    Основные моменты:

    • Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы.
    • Необязательный параметр -out позволяет указать выходной файл для плана. Использование параметра -out гарантирует, что проверяемый план полностью соответствует применяемому.
  2. Выполните команду terraform apply, чтобы применить план выполнения.

    Консоль
    terraform apply main.destroy.tfplan
    

Устранение неполадок с Terraform в Azure

Устранение распространенных проблем при использовании Terraform в Azure.

Следующие шаги