Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена AZ-900 с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы развернете с помощью чистого Terraform наименьшую реалистичную первую рабочую нагрузку Azure — группу ресурсов, учетную запись хранения с безопасными значениями по умолчанию, небольшую виртуальную машину Linux и оповещение о бюджете Cost Management, которое отправит вам электронное письмо раньше, чем это сделает ваш кошелек. Каждый ресурс соответствует одному из столпов экзамена AZ-900.
Каждый ресурс представляет собой чистый Terraform. Здесь нет переменных, модулей или удаленного состояния. Вставьте фрагменты в один файл main.tf, один раз выполните terraform init, затем пошагово выполните terraform apply.
>= 1.5 или OpenTofu >= 1.6.az login один раз; провайдер azurerm Terraform автоматически выберет активную подписку.Все ресурсы в этой лабораторной работе соответствуют бесплатному уровню Azure для новых подписок (кредит в $200 на первые 30 дней плюс всегда бесплатные объемы):
Если вы будете держать виртуальную машину включенной 24/7 вне бесплатного уровня, это будет стоить около 5 $/месяц. Уничтожьте лабораторную работу по завершении.
Каждый стек Terraform для Azure начинается одинаково: закрепляем провайдер azurerm (мы используем ~> 4.0, текущую стабильную версию) и объявляем блок features. Пустой блок features {} является обязательным — azurerm не инициализируется без него. Это наиболее проверенная конвенция Развертывания AZ-900 на уровне автора Terraform.
Ресурс random_id является стандартным шаблоном для генерации глобально уникальных имен учетных записей хранения — имена учетных записей хранения Azure должны состоять из 3–24 символов, быть строчными буквенно-цифровыми и глобально уникальными для всех подписок Azure. random_id добавляет 4 шестнадцатеричные цифры к имени, чтобы избежать коллизий.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
random = {
source = "hashicorp/random"
version = "~> 3.6"
}
}
}
provider "azurerm" {
features {}
}
resource "random_id" "suffix" {
byte_length = 2
}
locals {
tags = {
Project = "certlabpro-az-900"
ManagedBy = "terraform"
}
}Каждый ресурс Azure находится в группе ресурсов — универсальном организационном контейнере Azure. Группы ресурсов бесплатны, региональны (сама группа ресурсов содержит только метаданные, но ее содержимое по умолчанию привязано к ее региону) и являются единицей массового управления: удаление группы ресурсов приводит к удалению всего, что в ней находится.
Домены AZ-900 Облачные концепции и Управление идентификацией, конфиденциальностью, соответствием требованиям Azure активно используют эту концепцию — группы ресурсов являются наименьшей единицей области действия для назначений ролей RBAC, политики Azure и отслеживания затрат. Пометьте каждую группу ресурсов тегом.
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-900-rg"
location = "eastus"
tags = local.tags
}Azure Storage — это фундаментальная служба данных, используемая каждой рабочей нагрузкой AZ-900. Мы создаем учетную запись уровня Standard с локально-избыточным хранилищем (LRS) — самый дешевый вариант репликации и ожидаемое по умолчанию значение AZ-900 для непроизводственных лабораторных рабочих нагрузок. Отключен доступ к публичной сети, enforced HTTPS-only, а минимальная версия TLS установлена на 1.2 (домен AZ-900 Безопасность явно проверяет эти три параметра как базовые параметры гигиены).
account_kind = "StorageV2" — это текущая учетная запись общего назначения v2; AZ-900 иногда будет просить вас отличить ее от BlobStorage (старая, только для BLOB-объектов) и FileStorage (премиум-файлы). StorageV2 — это правильный ответ на любой вопрос „общего назначения“.
resource "azurerm_storage_account" "main" {
name = "certlabpro${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
public_network_access_enabled = false
allow_nested_items_to_be_public = false
tags = local.tags
}AZ-900 посвящает целый домен (Цены, SLA и жизненный цикл Azure) концепциям выставления счетов. Единственный наиболее часто проверяемый практический артефакт в этой области — это оповещение о бюджете — механизм Cost Management для отправки вам электронных писем, когда фактические или прогнозируемые расходы превышают порог.
Мы привязываем бюджет к группе ресурсов, которую создали в Шаге 2, что означает, что он отслеживает все в этой лабораторной работе (и только в ней). Уведомление срабатывает при достижении 80% бюджета — повторяющийся шаблон вопросов AZ-900: „почему 80%, а не 100%?“ — потому что при 80% у вас еще есть время для действий; при 100% деньги уже потрачены.
Замените you@example.com на свой реальный адрес перед запуском terraform apply.
resource "azurerm_consumption_budget_resource_group" "main" {
name = "certlabpro-az-900-budget"
resource_group_id = azurerm_resource_group.main.id
amount = 10
time_grain = "Monthly"
time_period {
start_date = "2026-06-01T00:00:00Z"
}
notification {
enabled = true
threshold = 80
operator = "GreaterThan"
threshold_type = "Actual"
contact_emails = ["you@example.com"]
}
}Стандартная команда terraform destroy удаляет все в этой лабораторной работе. Одно примечание, специфичное для Azure: когда вы уничтожаете группу ресурсов, Azure удаляет каждый ресурс внутри нее как побочный эффект — даже если Terraform о них не знает. Это примитив очистки, проверенный AZ-900: если вы когда-либо потеряете отслеживание того, что находится в группе ресурсов, удаление группы ресурсов уничтожит все поддерево. Используйте его осторожно в общих подписках.
Учетная запись хранения по умолчанию имеет 14-дневный срок хранения после мягкого удаления в новых подписках; пространство имен остается зарезервированным на этот период. Если вы немедленно перезапустите лабораторную работу, вы можете столкнуться с коллизией имен — суффикс random_id обычно помогает избежать этого, но не гарантирует.
AZ-900 охватывает широкий спектр служб — виртуальные машины Azure (мы касаемся этого концептуально, но фактически не развертываем виртуальную машину в этой минимальной лабораторной работе), App Service, Azure Functions, AKS, Azure SQL, Cosmos DB, Azure AD/Entra ID, Azure Policy, Azure Blueprints, шаблоны ARM, Bicep, калькулятор цен, калькулятор TCO, Azure Advisor, Service Health и многие другие.
Мы придерживаемся наименьшей реалистичной первой рабочей нагрузки, потому что экзамен проверяет широкую концептуальную подготовку, а не глубокое развертывание каждой отдельной службы. Четыре столпа, затронутые выше — группа ресурсов (управление), учетная запись хранения (службы + безопасные параметры по умолчанию), Cost Management (ценообразование) и подразумеваемая целевая вычислительная мощность — являются основой, к которой привязываются все остальные концепции AZ-900.
Для охвата по службам см. разделы Просмотр и Editorial этой страницы сертификации — они ссылаются на каждую названную службу в рамках AZ-900.