Виртуальные машины
Виртуальная машина — самый прямолинейный способ получить в облаке сервер: платите за железо по часам, а всё остальное настраиваете сами.
Azure Virtual Machine (VM) — арендованный компьютер в дата-центре Microsoft: вы выбираете процессор, память, диск и образ операционной системы, а Azure выдаёт вам машину, к которой можно подключиться по SSH (Linux) или RDP (Windows).
VM — это IaaS, Infrastructure as a Service: облако отвечает за железо, электричество, сеть и гипервизор, а вы — за всё, что выше: обновления ОС, веб-сервер, сертификаты, бэкапы приложения, мониторинг. Это одновременно главный плюс (полная свобода) и главный минус (полная ответственность).
Зачем нужна VM, если есть готовые сервисы
Начинающие часто спрашивают: раз есть App Service и Functions, кому вообще нужна голая машина? Ответ — тем, кому нужен контроль. Типичные честные сценарии:
- Легаси-приложение, которое требует конкретной версии ОС, системных библиотек или «того самого» демона, — переписывать его под PaaS дороже, чем арендовать сервер.
- Софт со странными требованиями: свой драйвер, GPU для обучения модели, специфичная база данных, лицензия, привязанная к железу.
- Учебный полигон: вы хотите руками поставить nginx, PostgreSQL и systemd-юнит — на VM это возможно, на PaaS нет.
- Постоянная предсказуемая нагрузка 24/7: при резервировании на год-три VM выходит дешевле, чем serverless с миллионами вызовов.
А вот когда VM — это дорого и грустно: обычный веб-сайт на Python или Node, редкие фоновые задачи, всё, что должно «просто работать». Там вы будете платить деньгами и временем за администрирование, которое никому не приносит пользы.
Создаём VM через az CLI
Всё в Azure живёт внутри ресурсной группы (resource group) — логической папки, которую можно удалить целиком вместе с содержимым. Для экспериментов это спасение: одна команда — и лишние счета исчезли.
az login
az account set --subscription "Azure subscription 1"
az group create \
--name rg-demo \
--location westeuropeТеперь сама машина. Обратите внимание: --generate-ssh-keys создаст пару ключей в ~/.ssh, если её ещё нет, и положит публичный ключ на сервер. Пароль для Linux-VM не нужен и не желателен.
az vm create \
--resource-group rg-demo \
--name vm-web-01 \
--image Ubuntu2204 \
--size Standard_B1s \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku StandardРезультат:
{
"fqdns": "",
"id": "/subscriptions/.../resourceGroups/rg-demo/providers/Microsoft.Compute/virtualMachines/vm-web-01",
"location": "westeurope",
"powerState": "VM running",
"privateIpAddress": "10.0.0.4",
"publicIpAddress": "20.61.128.77",
"resourceGroup": "rg-demo"
}Одна команда az vm create на самом деле создала шесть ресурсов: виртуальную сеть, подсеть, сетевой интерфейс (NIC), группу безопасности сети (NSG), публичный IP и саму VM с диском. Это важно помнить — удаление машины удалит не всё.
По умолчанию наружу открыт только порт 22 (SSH). Чтобы пустить HTTP-трафик, надо явно добавить правило в NSG:
az vm open-port \
--resource-group rg-demo \
--name vm-web-01 \
--port 80
ssh azureuser@20.61.128.77
# внутри машины:
sudo apt update && sudo apt install -y nginxРазмеры и цены
Размер (size, он же SKU) — это шаблон «сколько vCPU и памяти». Название читается по буквам семейства: Standard_B1s — семейство B, 1 vCPU; Standard_D4s_v5 — семейство D, 4 vCPU, пятое поколение, s = поддержка Premium SSD.
| Семейство | Для чего | Пример | Порядок цены (Linux, West Europe) |
| B (burstable) | Сайты и dev-стенды с редкими всплесками нагрузки | B1s: 1 vCPU, 1 ГиБ | ~8–10 $ в месяц |
| D (general purpose) | Рабочие приложения, сбалансированный CPU/RAM | D2s v5: 2 vCPU, 8 ГиБ | ~90–100 $ в месяц |
| E (memory optimized) | Базы данных, кэши, аналитика | E4s v5: 4 vCPU, 32 ГиБ | ~250–290 $ в месяц |
| F (compute optimized) | Сборка, кодирование, вычисления | F4s v2: 4 vCPU, 8 ГиБ | ~140–160 $ в месяц |
| N (GPU) | Машинное обучение, рендеринг | NC-серия | от ~1 $ в час и выше |
Цены здесь — порядок величины, они зависят от региона и меняются; точные суммы всегда смотрите в Azure Pricing Calculator и командой az vm list-sizes --location westeurope --output table проверяйте, что размер вообще доступен в вашем регионе.
Хорошая новость для учёбы: в бесплатном аккаунте Azure первые 12 месяцев дают 750 часов B1s в месяц — этого хватает, чтобы держать одну маленькую машину включённой круглосуточно, плюс 64 ГБ SSD-дисков. Плюс стартовый кредит на первый месяц.
Три способа платить меньше за то же железо:
- Spot-машины (
--priority Spot) — до −90 % от цены, но Azure может отобрать машину в любой момент. Идеально для сборок и пакетных расчётов, категорически не годится для прода. - Reserved Instances — обязательство на 1 или 3 года, экономия до ~70 %. Для сервера, который точно будет жить годами.
- Автовыключение —
az vm auto-shutdownдля dev-стендов: машина гаснет в 20:00 и не жжёт бюджет ночью.
Диски
Диск в Azure — самостоятельный ресурс (managed disk), а не часть машины. У VM всегда есть OS-диск, можно добавить диски с данными, а ещё есть временный диск (обычно смонтирован в /mnt) — быстрый, но его содержимое исчезает при переезде машины на другой хост. Никогда не храните там ничего ценного.
| Тип диска | Когда брать | Цена |
| Standard HDD | Архивы, бэкапы, ленивые данные | самый дешёвый |
| Standard SSD | Dev-стенды, лёгкие сайты | дешёвый |
| Premium SSD (P-серия) | Прод, базы данных | дороже, зато гарантированные IOPS |
| Ultra Disk | Экстремальные требования по задержке | дорого, настраивается отдельно |
az vm disk attach \
--resource-group rg-demo \
--vm-name vm-web-01 \
--name disk-data-01 \
--new \
--size-gb 64 \
--sku StandardSSD_LRSКлючевая деталь про деньги: вы платите за выделенный размер диска, а не за занятое место. Диск на 1 ТБ, в котором лежит 5 ГБ логов, стоит как диск на 1 ТБ. И платите вы за него, даже когда машина выключена.
Как это работает
Под капотом ваша VM — это гостевая система на гипервизоре Hyper-V, работающем на физическом хосте в дата-центре. Управляющий слой Azure (fabric) решает, на каком хосте вас разместить, и умеет переносить машину при плановом обслуживании железа.
Отсюда следуют неочевидные вещи. Managed-диск физически не лежит внутри сервера — это объект в хранилище Azure с тройной репликацией внутри дата-центра. Поэтому машина может «переехать» на другой хост, не потеряв данные, и поэтому временный диск (который как раз локальный) — единственное, что теряется.
Самое важное для кошелька — состояния машины:
| Состояние | Что происходит | Платите ли за CPU/RAM |
| Running | Машина работает | Да |
| Stopped (allocated) | ОС выключена, но ресурсы хоста за вами закреплены | Да! |
| Stopped (deallocated) | Ресурсы освобождены, остались только диски и IP | Нет |
# НЕ прекращает оплату compute:
az vm stop --resource-group rg-demo --name vm-web-01
# Прекращает — освобождает vCPU и память:
az vm deallocate --resource-group rg-demo --name vm-web-01
az vm start --resource-group rg-demo --name vm-web-01Частые ошибки
- «Я же выключил машину!» —
sudo shutdownизнутри ОС илиaz vm stopоставляют VM в состоянии allocated, и почасовая оплата продолжает капать. Останавливать надо черезaz vm deallocateили кнопку «Stop» в портале (она деаллоцирует). - Деаллокация — не панацея. Диски, статический публичный IP и снапшоты тарифицируются всегда. Выключенный сервер на Premium SSD может стоить несколько долларов в месяц «просто так».
- Удалили VM — остался мусор. NIC, NSG, публичный IP и диск переживают удаление машины. Проверяйте
az resource list --resource-group rg-demo --output table, а для экспериментов заводите отдельную группу и сносите её целиком:az group delete --name rg-demo --yes. - SSH открыт всему миру. Порт 22 на публичном IP за сутки соберёт тысячи попыток подбора. Ограничьте источник в NSG своим IP, отключите вход по паролю, а лучше используйте Azure Bastion.
- «Сервер тормозит после обеда». B-серия работает на кредитах: машина копит их в простое и тратит при нагрузке. Кончились кредиты — производительность падает до базовой доли (у B1s это порядка 10 % от vCPU). Под постоянную нагрузку берите D-серию.
- Взяли размер «с запасом». Классика: D8s v5 под сайт с сотней посетителей в сутки. Смотрите метрики CPU и памяти в Azure Monitor и меняйте размер:
az vm resize --size Standard_B2s(машина при этом перезагрузится).
Итоги
- VM — это IaaS: максимум контроля и максимум ответственности. Берите её, когда PaaS реально не подходит.
az group create→az vm create→ssh— минимальный путь до работающего сервера.- Размер (SKU) определяет цену: B — бюджетно и с кредитами, D — рабочая лошадка, E/F/N — под специфичные задачи.
- Диски и публичный IP — отдельные ресурсы: они переживают удаление VM и оплачиваются по выделенному размеру.
stop≠deallocate. Эта разница — самая частая дыра в бюджете новичка.- Экспериментируйте в отдельной ресурсной группе и удаляйте её целиком — так вы физически не сможете забыть о забытом сервере.