0Pricing
Azure Fundamentals · Урок

Terraform в Azure

Настройте поставщик AzureRM для Terraform, напишите базовый план инфраструктуры и разберитесь, в каких случаях Terraform предпочтительнее встроенных инструментов ARM и Bicep.

«Terraform в Azure» — бесплатный урок Azure Fundamentals на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Azure Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Azure Fundamentals содержит 4 уроков всего.

Что такое Terraform и почему Azure

Terraform — это инструмент Infrastructure as Code с открытым исходным кодом, разработанный HashiCorp. В отличие от Bicep, Terraform не привязан к конкретному облаку: одна кодовая база Terraform может одновременно управлять ресурсами в Azure, AWS, GCP и многих других поставщиках. В Azure Terraform использует поставщик AzureRM для взаимодействия с API ARM, что делает его популярным выбором для организаций с несколькими облаками.

Поставщик AzureRM Terraform

Поставщик AzureRM — это подключаемый модуль, который Terraform загружает и использует для преобразования конфигурации Terraform в вызовы API ARM. Его поддерживают HashiCorp и Microsoft; это официальный способ управления ресурсами Azure с помощью Terraform. Настройте поставщик, указав идентификатор подписки и метод аутентификации, затем выполните terraform init, чтобы загрузить его.

# main.tf — configure the AzureRM provider
terraform {
  required_providers {
    azurerm = {
      source  = 'hashicorp/azurerm'
      version = '~> 3.0'
    }
  }
}

provider 'azurerm' {
  features {}
  subscription_id = var.subscription_id
}

Структура файлов Terraform

Типичный проект Terraform для Azure разделен на несколько файлов .tf: в main.tf хранятся объявления ресурсов, в variables.tf определяются входные переменные, в outputs.tf — выходные значения, а terraform.tfvars содержит значения переменных для конкретной среды. Terraform автоматически загружает все файлы .tf из текущего каталога, поэтому разделение на несколько файлов выполняется исключительно для удобства чтения.

# variables.tf
variable 'resource_group_name' {
  description = 'Name of the resource group'
  type        = string
  default     = 'my-rg'
}

variable 'location' {
  description = 'Azure region'
  type        = string
  default     = 'eastus'
}

Объявление ресурсов Azure

В Terraform ресурсы Azure объявляются с помощью блоков resource. Тип блока — resource, за ним следуют тип ресурса AzureRM, например 'azurerm_resource_group', и локальное имя, используемое для обращения к ресурсу в конфигурации. Имена свойств в Terraform записываются в формате snake_case, а не в форматах camelCase или PascalCase, используемых в ARM JSON.

# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
  name     = var.resource_group_name
  location = var.location
}

resource 'azurerm_storage_account' 'storage' {
  name                     = 'mystorageaccount'
  resource_group_name      = azurerm_resource_group.main.name
  location                 = azurerm_resource_group.main.location
  account_tier             = 'Standard'
  account_replication_type = 'LRS'

  tags = {
    environment = 'dev'
  }
}

Рабочий процесс Terraform: Init, Plan, Apply

Основной рабочий процесс Terraform состоит из трех шагов. terraform init загружает поставщик AzureRM и настраивает серверную часть. terraform plan сравнивает конфигурацию с текущим состоянием и показывает различия: что будет создано, изменено или уничтожено, — подобно what-if в ARM. terraform apply выполняет план и обновляет Azure в соответствии с конфигурацией.

# Step 1: Initialise the project and download providers
terraform init

# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan

# Step 3: Apply the plan
terraform apply tfplan

# Destroy all managed resources
terraform destroy

Состояние Terraform

Terraform поддерживает файл состояния (terraform.tfstate), в котором записывается текущее состояние всех управляемых ресурсов и устанавливается их соответствие конфигурации. Этот файл позволяет Terraform обнаруживать расхождения между настроенными ресурсами и существующими в Azure. В командных средах храните состояние удаленно в учетной записи хранения Azure (серверной части Terraform), чтобы все участники команды использовали один и тот же файл состояния.

# Configure remote state in Azure Blob Storage
terraform {
  backend 'azurerm' {
    resource_group_name  = 'tfstate-rg'
    storage_account_name = 'tfstateaccount'
    container_name       = 'tfstate'
    key                  = 'prod.terraform.tfstate'
  }
}

Аутентификация в Azure с помощью Terraform

Terraform поддерживает несколько методов аутентификации в Azure. Во время локальной разработки используйте az login (аутентификацию Azure CLI) — Terraform автоматически получает учетные данные. В конвейерах CI/CD используйте субъект-службу с секретом клиента или сертификатом, передаваемым через переменные среды. Для размещенных в Azure агентов или виртуальных машин используйте управляемое удостоверение — наиболее безопасный способ аутентификации без секретов.

# Option 1: Azure CLI (local dev)
az login
terraform plan

# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform plan

Модули Terraform для повторного использования

Как и модули Bicep, модули Terraform позволяют упаковывать и повторно использовать шаблоны инфраструктуры. Модуль — это каталог, содержащий файлы .tf. На него ссылаются с помощью блока module, передают входные значения через variables и используют выходные значения. В реестре Terraform размещены сотни созданных сообществом и проверенных модулей Azure, которые можно использовать напрямую, например сетевой модуль AzureRM.

# Use a module from the Terraform Registry
module 'vnet' {
  source  = 'Azure/vnet/azurerm'
  version = '4.0.0'

  resource_group_name = azurerm_resource_group.main.name
  vnet_location       = azurerm_resource_group.main.location
  use_for_each        = true
  address_space       = ['10.0.0.0/16']
  subnet_prefixes     = ['10.0.1.0/24', '10.0.2.0/24']
  subnet_names        = ['web', 'app']
}

Когда выбрать Terraform, а когда Bicep

Выбирайте Bicep, если Ваша организация работает только с Azure и стремится к наиболее тесной интеграции с новыми возможностями Azure (Bicep получает поддержку новых типов ресурсов в день их выпуска). Выбирайте Terraform, если Вы управляете ресурсами в нескольких облачных поставщиках, нуждаетесь в большой экосистеме модулей сообщества или предпочитаете синтаксис HCL и набор инструментов HashiCorp. Оба варианта подходят для развертываний только в Azure — часто решение определяется предпочтениями организации.

Импорт существующих ресурсов

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

# Import an existing resource group into Terraform state
terraform import \
  azurerm_resource_group.main \
  '/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'

# Terraform 1.5+ supports import blocks in configuration
import {
  to = azurerm_resource_group.main
  id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}

Рекомендации по использованию Terraform в Azure

Следуйте этим рекомендациям при работе с Terraform в Azure: храните состояние удаленно в Azure Blob Storage с включенной блокировкой состояния, используйте рабочие пространства или отдельные файлы состояния для разных сред, никогда не фиксируйте секреты в системе управления исходным кодом — вместо этого используйте источники данных Azure Key Vault, закрепляйте версии поставщиков, чтобы избежать критических изменений, и запускайте Terraform в конвейере CI/CD (Azure Pipelines или GitHub Actions) с этапами утверждения плана.

Быстрая проверка

Проверьте, насколько Вы поняли концепции Microsoft Azure Fundamentals (AZ-900) из этого урока.

Итоги урока

В этом уроке Вы узнали, что Terraform — это не зависящий от облака инструмент IaC, использующий поставщик AzureRM для управления ресурсами Azure; рабочий процесс init, plan, apply обеспечивает безопасные и предсказуемые развертывания; а удаленное состояние в Azure Blob Storage необходимо для совместной работы команды. Далее мы рассмотрим создание планов App Service и Web App.

Часто задаваемые вопросы

Урок «Terraform в Azure» бесплатный?

Да — полный текст урока «Terraform в Azure» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Azure Fundamentals, подпишись на CoddyKit PRO. Курс Azure Fundamentals содержит 4 уроков всего.

Чему я научусь в уроке «Terraform в Azure»?

Настройте поставщик AzureRM для Terraform, напишите базовый план инфраструктуры и разберитесь, в каких случаях Terraform предпочтительнее встроенных инструментов ARM и Bicep. Ты практикуешь Azure Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Azure Fundamentals?

Предыдущий опыт не требуется. Azure Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Terraform в Azure»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Azure Fundamentals?

Да. Каждый урок Azure Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Как работает Azure Resource Manager
  2. Создание шаблонов ARM
  3. Bicep: современная IaC для Azure
  4. Terraform в Azure
← Назад к Azure Fundamentals