Группы ресурсов и модель ресурсов
Знакомимся с главной «папкой» Azure: как группы ресурсов задают жизненный цикл, зачем нужны теги, почему учебную песочницу удаляют одной командой и как называть ресурсы, чтобы не запутаться.
Группа ресурсов (Resource Group, RG) — контейнер жизненного цикла: всё, что создаётся, живёт и умирает вместе, кладут в одну группу. Она бесплатна, но именно она определяет, что вы удалите одной командой.
Новичок обычно воспринимает RG как «просто папку, чтобы не путаться». Это недооценка: группа ресурсов — это одновременно граница удаления, граница прав доступа и удобная единица учёта затрат.
Зачем это нужно на практике
Без групп подписка через месяц превращается в свалку: 40 объектов с именами вроде vm1, vm1-disk, test-db-final2, и никто не помнит, что из этого можно удалять. С группами всё иначе — RG отвечает сразу на три вопроса:
- Что удалять вместе? Удалили RG — исчезли все ресурсы внутри неё. Ни одного «сироты» не осталось.
- Кому давать права? Роли RBAC назначают на группу: «эта команда — Contributor в
rg-shop-dev-weu» — и в прод они не попадут. - Сколько это стоит? Cost Management умеет группировать расходы по группам ресурсов и по тегам.
Правила игры
- Ресурс принадлежит ровно одной группе ресурсов.
- Группы нельзя вкладывать друг в друга — иерархия ровно одноуровневая.
- У группы есть свой location, но это регион её метаданных, а не ограничение для содержимого: в группе с location
westeuropeспокойно могут лежать ресурсы изeastus. Впрочем, если регион метаданных недоступен, управлять группой вы временно не сможете — поэтому обычно берут регион, где живёт основная часть ресурсов. - Ресурсы можно переносить между группами (
az resource move), но не все типы это поддерживают, и операция небезболезненная. Проще сразу нарезать правильно.
Как нарезать группы
Главный принцип — по жизненному циклу и окружению. Всё, что рождается, обновляется и умирает вместе, идёт в одну группу.
| Подход | Пример | Оценка |
| Одна группа на приложение + окружение | rg-shop-dev-weu, rg-shop-prod-weu | ✅ Рабочий стандарт |
| Одна группа на всё | rg-all | ❌ Свалка: нельзя ни права разграничить, ни удалить безопасно |
| Отдельная группа на каждый ресурс | rg-vm1, rg-vm1-disk | ❌ Бюрократия без пользы |
| Отдельная группа под долгоживущее общее | rg-shared-network-weu (VNet, Key Vault) | ✅ Оправдано: их жизненный цикл длиннее приложения |
Последняя строка важна. Виртуальную сеть и хранилище секретов обычно создают один раз и надолго, а приложения над ними пересоздают. Держать их в одной RG с приложением — значит рискнуть снести сеть вместе с экспериментом.
Именование
У Microsoft есть готовая конвенция (Cloud Adoption Framework): {тип}-{нагрузка}-{окружение}-{регион}-{номер}.
rg-shop-prod-weu-001 группа ресурсов
vm-web-prod-weu-001 виртуальная машина
vnet-shop-prod-weu-001 виртуальная сеть
kv-shop-prod-weu-001 Key Vault
stshopprodweu001 storage account (особый случай!)
Обратите внимание на последнюю строку. У части сервисов имя попадает в публичное DNS-имя, поэтому оно должно быть глобально уникальным во всём Azure и подчиняется жёстким правилам. У storage account: только строчные латинские буквы и цифры, 3–24 символа, дефисы запрещены. Похожая история у App Service (*.azurewebsites.net) и Key Vault. Если получаете ошибку «name is already taken» — значит, это имя занял кто-то другой на планете; добавьте суффикс.
Теги
Тег — пара «ключ-значение», которую можно повесить на группу или ресурс (до 50 тегов на объект). Теги бесплатны, но именно они превращают счёт из загадки в отчёт: в Cost Analysis можно посмотреть расходы в разрезе тега project или env.
az group create \
--name rg-shop-dev-weu \
--location westeurope \
--tags env=dev owner=ernest project=shop delete-after=2026-08-01
Джентльменский набор тегов: env (dev/stage/prod), owner (кому писать, если ресурс подозрительный), project (на кого списывать расходы), delete-after (дата, после которой временный ресурс можно смело удалять).
Важная тонкость: теги группы не наследуются ресурсами автоматически. Ресурс, созданный внутри rg-shop-dev-weu, тега env=dev сам по себе не получит. Наследование настраивают через Azure Policy (встроенная политика «Inherit a tag from the resource group»), либо теги проставляют в IaC-шаблоне.
Базовые команды
# создать
az group create -n rg-shop-dev-weu -l westeurope --tags env=dev owner=ernest
# посмотреть все группы
az group list -o table
# что лежит внутри группы
az resource list -g rg-shop-dev-weu -o table
# добавить тег к существующей группе
az group update -n rg-shop-dev-weu --set tags.project=shop
# защитить прод от случайного удаления
az lock create --name no-delete --lock-type CanNotDelete \
--resource-group rg-shop-prod-weu
# и главный трюк учебной песочницы: снести всё разом
az group delete -n rg-shop-dev-weu --yes --no-wait
Результат:
Name Location Status
---------------- ---------- ---------
rg-shop-dev-weu westeurope Succeeded
Последняя команда — это буквально главная защита вашего кошелька в учебном курсе. Создавайте все эксперименты внутри одной временной группы — и, закончив работу, удаляйте её целиком. Тогда за вами не остаётся ни забытых дисков, ни публичных IP, ни балансировщиков, которые тихо капают в счёт.
Как это работает
Группа ресурсов — не физический объект, а запись в Azure Resource Manager: список ресурсов, их location, теги и назначения ролей. Сама по себе она ничего не стоит, потому что ничего не занимает.
Самое интересное происходит при удалении. az group delete отправляет в ARM одну асинхронную операцию; ARM строит граф зависимостей внутри группы и удаляет ресурсы в правильном порядке — сначала виртуальную машину, потом её сетевой интерфейс, потом IP-адрес, и только потом сеть. Флаг --no-wait возвращает вам приглашение терминала сразу, не дожидаясь конца — удаление продолжится на стороне Azure.
Важные исключения, о которые спотыкаются все:
- Если на группе или на ресурсе висит lock типа
CanNotDelete, удаление упадёт с ошибкой. Это фича, а не баг: так защищают прод. - Часть сервисов имеет soft-delete. Key Vault после удаления сохраняется «в корзине» (обычно 90 дней) и продолжает занимать своё имя — создать новый Key Vault с тем же именем не выйдет, пока вы не выполните
az keyvault purge. Аналогично ведут себя некоторые другие сервисы, например хранилища резервных копий, которые могут вообще заблокировать удаление группы, пока в них есть защищённые элементы. - Удаление RG — необратимо. Корзины для группы ресурсов нет. Восстановить можно только то, что вы заранее забэкапили.
Частые ошибки
- Удалить виртуальную машину и думать, что всё чисто. Диск, сетевой интерфейс и публичный IP могут пережить хозяина и продолжить тарифицироваться. Регулярно ищите «сирот»:
Если всё лежало в одной RG — проблемы нет: удалили группу, ушли все.az disk list --query "[?managedBy==null].{name:name, rg:resourceGroup, gb:diskSizeGb}" -o table - Удалить не ту группу ресурсов. Ошибка на одну букву в имени — и прод исчез без корзины. Лечится тремя вещами: разные подписки для dev и prod,
lockтипаCanNotDeleteна прод-группах, привычка выполнятьaz resource list -g …перед удалением. - Смешать dev и prod в одной RG. Тогда невозможно дать разработчику права на его окружение, не открыв ему прод.
- Не поставить теги сразу. Через три месяца никто не вспомнит, чей это ресурс и куда списывать 200 долларов. Тег ставится в момент создания одной строкой — потом это уже археология.
- Ожидать, что теги группы «протекут» на ресурсы. Не протекут. Нужна Azure Policy или явные теги в шаблоне.
- Путать location группы с location ресурсов. Группа в
westeuropeне мешает создать в ней машину вeastus— и вы случайно заплатите за трафик между регионами. - Пытаться пересоздать Key Vault с тем же именем сразу после удаления группы. Имя держит soft-delete; нужен
az keyvault purge --name ….
Итоги
- Группа ресурсов — контейнер жизненного цикла: в неё кладут то, что живёт и умирает вместе. Сама по себе бесплатна.
- RG — это ещё и граница прав (RBAC) и удобная единица учёта затрат.
- Нарезайте группы по приложению и окружению (
rg-shop-dev-weu), а долгоживущую общую инфраструктуру выносите отдельно. - Имена — по конвенции
{тип}-{нагрузка}-{окружение}-{регион}-{номер}; у storage account, App Service и Key Vault имя глобально уникально и с жёсткими правилами. - Теги (
env,owner,project,delete-after) ставьте при создании; наследование от группы — только через Azure Policy. - Учебная песочница = одна временная RG +
az group delete --yes --no-waitв конце. Это лучшая защита от неожиданного счёта. - На прод вешайте
lock: удаление группы необратимо, корзины нет.