Виртуальные машины

Виртуальная машина — самый прямолинейный способ получить в облаке сервер: платите за железо по часам, а всё остальное настраиваете сами.

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/RAMD2s 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 SSDDev-стенды, лёгкие сайтыдешёвый
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 createaz vm createssh — минимальный путь до работающего сервера.
  • Размер (SKU) определяет цену: B — бюджетно и с кредитами, D — рабочая лошадка, E/F/N — под специфичные задачи.
  • Диски и публичный IP — отдельные ресурсы: они переживают удаление VM и оплачиваются по выделенному размеру.
  • stopdeallocate. Эта разница — самая частая дыра в бюджете новичка.
  • Экспериментируйте в отдельной ресурсной группе и удаляйте её целиком — так вы физически не сможете забыть о забытом сервере.
Проверьте себя
1. Чем az vm deallocate отличается от az vm stop?
AНичем, это псевдонимы одной команды
Bstop выключает ОС, но ресурсы хоста остаются закреплены и оплата за vCPU/память продолжается; deallocate освобождает их и останавливает оплату compute
Cdeallocate удаляет виртуальную машину вместе с дисками
Dstop прекращает оплату, а deallocate только приостанавливает работу приложения
2. За что вы продолжаете платить после деаллокации виртуальной машины?
AНи за что — деаллокация обнуляет все расходы по этой VM
BТолько за трафик
CЗа managed-диски (по выделенному размеру), статический публичный IP и снапшоты
DЗа vCPU по половинному тарифу