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


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

В этой статье показано, как использовать Terraform для создания зоны Azure DNS и записи A в этой зоне.

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

Вы узнаете, как выполнять следующие задачи:

  • Создание случайного значения для имени группы ресурсов Azure с помощью random_pet
  • Создание группы ресурсов Azure с помощью azurerm_resource_group
  • Создание случайного значения с помощью random_string
  • Создание зоны Azure DNS с помощью azurerm_dns_zone
  • Создание записи Azure DNS A с помощью azurerm_dns_a_record

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

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

Примечание.

Пример кода для этой статьи находится в репозитории Azure Terraform GitHub. См. другие статьи и примеры кода, в которых показано, как использовать Terraform для управления ресурсами Azure.

  1. Создайте каталог для тестирования и выполнения примера кода Terraform и сделайте его текущим каталогом.

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

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

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      name     = random_pet.rg_name.id
      location = var.resource_group_location
    }
    
    resource "random_string" "azurerm_dns_zone_name" {
      length  = 13
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_dns_zone" "zone" {
      name = (
        var.dns_zone_name != null ?
        var.dns_zone_name :
        "www.${random_string.azurerm_dns_zone_name.result}.azurequickstart.org"
      )
      resource_group_name = azurerm_resource_group.rg.name
    }
    
    resource "azurerm_dns_a_record" "record" {
      name                = "www"
      resource_group_name = azurerm_resource_group.rg.name
      zone_name           = azurerm_dns_zone.zone.name
      ttl                 = var.dns_ttl
      records             = var.dns_records
    }
    
  4. Создайте файл с именем variables.tf и вставьте следующий код:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location for all resources."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random value so name is unique in your Azure subscription."
    }
    
    variable "dns_zone_name" {
      type        = string
      default     = null
      description = "Name of the DNS zone."
    }
    
    variable "dns_ttl" {
      type        = number
      default     = 3600
      description = "Time To Live (TTL) of the DNS record (in seconds)."
    }
    
    variable "dns_records" {
      type        = list(string)
      default     = ["1.2.3.4", "1.2.3.5"]
      description = "List of IPv4 addresses."
    }
    
  5. Создайте файл с именем outputs.tf и вставьте следующий код:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "dns_zone_name" {
      value = azurerm_dns_zone.zone.name
    }
    
    output "name_servers" {
      value = azurerm_dns_zone.zone.name_servers
    }
    

Инициализация 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. Получите имя зоны DNS.

    dns_zone_name=$(terraform output -raw dns_zone_name)
    
  3. Запустите az network dns zone show , чтобы отобразить сведения о новой зоне DNS.

    az network dns zone show \
        --resource-group $resource_group_name \
        --name $dns_zone_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

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