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 — локальная установка не требуется.
Все уроки этого курса
- Как работает Azure Resource Manager
- Создание шаблонов ARM
- Bicep: современная IaC для Azure
- Terraform в Azure