
Итак, давайте попробуем в Microsoft Azure создать виртуальную машину с именем server-01 и настройками по умолчанию. Следующий рисунок наглядно отображает ту кашу, которую имеем в итоге.

Если вас здесь всё устраивает, то дальше можете не читать. Ну а если вам, как и мне, нравится тотальный порядок в администрируемом хозяйстве, то рискну предложить схему красивого именования компонентов Microsoft Azure, которой сам пользуюсь на протяжении последних нескольких лет.
Данная схема позволяет привести всю систему к следующему унифицированному виду:
{Группа компонентов}__{Элемент}
{Компонент}-{Номер}__{Элемент}-{номер}
Итак, приступим…
Добавляем группу ресурсов
Resource groups >> +Add
Resource group name: servers
Создаём виртуальную сеть и подсеть
По умолчанию Microsoft Azure расширяет подсеть на всю виртуальную сеть. Это не очень удобно, так как при необходимости будет очень сложно добавить новые подсети (к примеру, подсеть VPN). Поэтому я обычно под виртуальную сеть отдаю два последних октета (маска 16), а для подсети — один последний октет (маска 24).
Virtual networks >> +Add
Name: servers__network
Address space: 10.0.0.0/16
Subnet:
Name: default
Address range: 10.0.0.0/24
Network interfaces: +Add
Name: server-01__ip-private-01
Virtual network: servers__network
Subnet: default
Private IP address: Static/10.0.0.101
Первые несколько адресов подсети (10.0.0.01…03) Azure использует под свои нужды, поэтому я сдвинул рабочие адреса в диапазон выше 100. Таким образом, номер сервера будет соответствовать последней цифре IP-адреса: server-01 = 10.0.0.101, server-02 = 10.0.0.102, server-43 = 10.0.0.143 и т.п.
Внешний адрес и группа безопасности
Если планируется, что виртуальная машина будет смотреть наружу, то создаём публичный адрес и группу безопасности.
Public IP addresses: +Add
Name: server-01__ip-public-01
IP address assignment: Static
Public IP addresses >> выбираем server-01__ip-public-01 >> Associate:
Resource type >> Network interface: server-01__ip-private-01
В Azure группу безопасности можно создать как для одной машины, так и для подсети в целом. В зависимости от варианта имена будут различаться.
Network security groups >> +Add
Вариант группы безопасности для отдельного хоста:
Name: server-01__security-group
Network interfaces >> +Associate: server-01__ip-private-01
Группа безопасности для подсети:
Name: servers__network-security-group
Subnets >> +Associate:
Virtual network: servers__network
Subnet: default
Диск
К сожалению, Azure не позволяет создавать диски с произвольными именами, поэтому здесь потребуется проделать обходной манёвр через создание фиктивной виртуальной машины, а потом воспользоваться её диском как болванкой для создания рабочей машины.
Создаём фиктивную виртуальную машину
Virtual machines >> +Add
Basics:
Name: server-01-raw
VM disk type: Premium SSD
Username: your-name
SSH public key: your-public-key
Settings:
Availability set: None
Network: servers__network
Subnet: default
Public IP address: None
Select public inbound ports: No public inbound ports
Monitoring: Disabled
После создания фиктивной машины можно удалить все компоненты (включая саму машину), помеченные суффиксом raw за исключением диска.
Снимаем снапшот диска
Disks >> выбираем disk server-01-raw_OsDisk_... >> +Create snapshot
Name: server-01-raw-snapshot
На основе снапшота создаём новый рабочий диск:
Disks >> +Add
Name: server-01__disk-01
Source type: Snapshot
Source snapshot: server-01-raw-snapshot
Разворачиваем рабочую машину на основе нового диска
Disks >> выбираем server-01__disk-01 >> + Create VM
Basics:
Name: server-01
Settings:
Availability set: None
Network: servers__network
Subnet: default
Public IP address: None
Select public inbound ports: No public inbound ports
Monitoring: Disabled
Сетевые интерфейсы
Ещё одно упущение Microsoft — при создании виртуальной машины из диска в GUI нет возможности прикрепить к ней созданный ранее сетевой интерфейс. Поэтому останавливаем машину, удаляем сетевой интерфейс и прикрепляем к ней тот, что мы создали выше.
Virtual machines >> выбрать VM server-01 >> Stop
Virtual machines >> выбрать VM server-01 >> Networking:
Attach network interface >> server-01__ip-private-01
Detach network interface >> server-01982
Удаление мусора
Последний штрих — удаление мусора, который остался от сделанных нами манипуляций.
Удаляем:
сетевой интерфейс server-01982,
группу безопасности server-01-nsg,
диск от фиктивной машины: server-01-raw_OsDisk…
снапшот server-01-raw-snapshot
Вот что в итоге получилось:

CLI
Вы, наверное, уже заметили, что навести красоту в Azure является довольно хлопотным занятием. Но всё существенно упрощается, если воспользоваться командной строкой (CLI). Microsoft Azure предоставляет CLI как для её родного PowerShell, так и для консоли Линукс. Последний вариант и будет описан ниже.
Логинимся:
az login -u AzureUserName
Получаем список доступных локаций
az account list-locations
Получаем список размеров виртуальных машин:
az vm list-sizes --location locationName
Задаём список параметров сети и виртуальной машины (во все последующие команды эти данные будут передаваться через переменные):
location="westindia" resource_group="servers" virt_network="servers__network" virt_network_range="10.0.0.0/16" subnet="default" subnet_range="10.0.0.0/24" user="username" ssh_key="ssh-public-key" name="server-01" image="UbuntuLTS" ip="10.0.0.101" interface_suffix="__ip-private-01" disk_suffix="__disk-01" size="Standard_B1s" ### SSD = "Premium_LRS"; HDD = "Standard_LRS" storage_type="Premium_LRS"
Создаём группу ресурсов:
az group create --location ${location} --name ${resource_group}
Создаём виртуальную сеть и подсеть:
az network vnet create --location ${location} --resource-group ${resource_group} --name ${virt_network} --address-prefixes ${virt_network_range}
az network vnet subnet create --resource-group ${resource_group} --vnet-name ${virt_network} --name ${subnet} --address-prefix ${subnet_range}
Создаём сетевой интерфейс:
az network nic create --resource-group ${resource_group} --location ${location} --name ${name}${interface_suffix} --subnet ${subnet} --vnet-name ${virt_network} --private-ip-address ${ip}
Создаём фиктивную виртуальную машину:
az vm create --name ${name} --admin-username ${user} --ssh-key-value "${ssh_key}" --resource-group ${resource_group} --location ${location} --image ${image} --size ${size} --nics ${name}${interface_suffix} --storage-sku ${storage_type}
Нормализуем диск:
az vm stop --name ${name} --resource-group ${resource_group} disk_old=$(az vm get-instance-view --name ${name} --resource-group ${resource_group} | grep -o "${name}_OsDisk[0-9a-z\_]\{1,\}" | head -1) az disk create --location ${location} --resource-group ${resource_group} --name ${name}${disk_suffix} --source ${disk_old} --sku ${storage_type}
Удаляем фиктивную машину и разворачиваем рабочую:
az vm delete --name ${name} --resource-group ${resource_group} --yes az vm create --name ${name} --resource-group ${resource_group} --location ${location} --size ${size} --nics ${name}${interface_suffix} --attach-os-disk ${name}${disk_suffix} --os-type Linux ${availability_set_as_option}
Удаляем фиктивный диск:
az disk delete --resource-group ${resource_group} --name ${disk_old} --yes
Автоматизация
Чтоб автоматизировать процесс разворачивания виртуальных машин в облаке Microsoft Azure, я свёл все вышеперечисленные команды в один bash-скрипт azure-create-vm.sh, который можно взять с Github. Открываете скрипт в любом текстовом редакторе, вбиваете свои данные и можно разворачивать виртуальные машины с красивыми именами нажатием нескольких клавиш.
ссылка на оригинал статьи https://habr.com/post/422211/
Добавить комментарий