Azure: деплой VM из образа с помощью Azure CLI

Автор: | 01/04/2016
 

azure_logo

Установка и настройка Azure CLI описывается в посте Azure: установка Azure CLI.

Подготовка

Подключаемся к аккаунту:

$ azure login

Проверяем доступные подписки:

$ azure account list
info:    Executing command account list
data:    Name        Id                                    Current  State
data:    ----------  ------------------------------------  -------  -------
data:    Free Trial  97214f99-1f75-4602-91ee-715556cd5906  true     Enabled
info:    account list command OK

Для переключения между подписками – выполните:

$ azure account set 97214f99-1f75-4602-91ee-715556cd5906 true
info:    Executing command account set
info:    Setting subscription to "Free Trial" with id "97214f99-1f75-4602-91ee-715556cd5906".
info:    Changes saved
info:    account set command OK

Проверяем доступные локации:

$ azure vm location list
info:    Executing command vm location list
+ Getting locations
data:    Name
data:    --------------
data:    East US
data:    Central US
data:    Southeast Asia
data:    Japan West
info:    vm location list command OK

По умолчанию – Azure CLI работает в режиме service management, тогда как нам потребуется resource group.
Переключаемся:

$ azure config mode arm
info:    New mode is arm

Что бы переключиться обратно в service management режим – выполните:

$ azure config mode asm
info:    New mode is asm

Дальнейшие действия должны выполняться в режиме arm.

Получение подсказки

Как и во многих CLI – есть возможность получить помощь, проходя по “дереву” команд.

Например:

$ azure vm --help
help:    Commands to manage your virtual machines
help:
help:    Create a virtual machine in a resource group
help:      vm create [options] <resource-group> <name> <location> <os-type>

И далее – по vm create:

$ azure vm create --help
help:    Create a virtual machine in a resource group
help:
help:    Usage: vm create [options] <resource-group> <name> <location> <os-type>
help:
help:    Options:
help:      -h, --help                                                             output usage information
help:      -v, --verbose                                                          use verbose output

И, конечно, документация на сайте. Тут к MS никаких претензий.

Описание шаблонов и групп ресурсов

Большая часть приложений состоит из нескольких различных типов ресурсов (например – одна или несколько виртуальных машин, хранилищ данных, база данных SQL, виртуальная сеть и тому подобное).

Шаблоны Azure Resource Manager (arm) позволяют деплоить и управлять этими ресурсами как единым объектом деплоя. Вместо того, что бы явно указывать Azure что необходимо деплоить, выполняя команду за командой – вы можете описать весь деплой в JSON-файле, после чего Azure выполнит деплой всех указанных в нем ресурсов единой группой.

Создание виртуальной машины с помощью quick-create

Что бы быстро создать виртуальную машину, не углубляясь в ее настройки – используйте команду azure vm quick-create.

Сначала – создаем группу ресурсов:

$ azure group create RTFM westus
info:    Executing command group create
+ Getting resource group RTFM
+ Creating resource group RTFM
info:    Created resource group RTFM
data:    Id:                  /subscriptions/97214f99-1f75-4602-91ee-715556cd5906/resourceGroups/RTFM
data:    Name:                RTFM
data:    Location:            westus
data:    Provisioning State:  Succeeded
data:    Tags: null
data:
info:    group create command OK

Проверяем:

$ azure group list
info:    Executing command group list
+ Listing resource groups
data:    Name   Location     Provisioning State  Tags:
data:    -----  -----------  ------------------  -----
data:    Group  eastus       Succeeded           null
data:    RTFM   westus       Succeeded           null
data:    test1  northeurope  Succeeded           null
data:    WP-NE  northeurope  Succeeded           null
info:    group list command OK

Screen Shot 2015-12-30 at 16.50.16

Ищем подходящий образ.

Мы будем запускать виртуальную машину с Ubuntu.

Находим “издателя” в локации westus:

$ azure vm image list-publishers westus
info:    Executing command vm image list-publishers
+ Getting virtual machine and/or extension image publishers (Location: "westus")
data:    Publisher                                             Location
data:    ----------------------------------------------------  --------
data:    4psa                                                  westus
...
data:    Canonical                                             westus
...

Теперь, зная издателя – находим ОС:

$ azure vm image list-offers westus Canonical
info:    Executing command vm image list-offers
+ Getting virtual machine image offers (Publisher: "Canonical" Location:"westus")
data:    Publisher  Offer                    Location
data:    ---------  -----------------------  --------
data:    Canonical  Ubuntu15.04Snappy        westus
data:    Canonical  Ubuntu15.04SnappyDocker  westus
data:    Canonical  UbunturollingSnappy      westus
data:    Canonical  UbuntuServer             westus
info:    vm image list-offers command OK

У нас есть локация – westus, издатель – Canonical, ОС – UbuntuServer.

Находим доступные версии:

$ azure vm image list-skus westus Canonical UbuntuServer
info:    Executing command vm image list-skus
+ Getting virtual machine image skus (Publisher:"Canonical" Offer:"UbuntuServer" Location:"westus")
data:    Publisher  Offer         sku                Location
data:    ---------  ------------  -----------------  --------
data:    Canonical  UbuntuServer  12.04.2-LTS        westus
...
data:    Canonical  UbuntuServer  15.10-beta         westus
data:    Canonical  UbuntuServer  15.10-DAILY        westus
data:    Canonical  UbuntuServer  16.04.0-DAILY-LTS  westus
info:    vm image list-skus command OK

И последний шаг – получить т.н. Urn:

$ azure vm image list westus Canonical UbuntuServer 14.04.2-LTS
info:    Executing command vm image list
+ Getting virtual machine images (Publisher:"Canonical" Offer:"UbuntuServer" Sku: "14.04.2-LTS" Location:"westus")
data:    Publisher  Offer         Sku          OS     Version          Location  Urn
data:    ---------  ------------  -----------  -----  ---------------  --------  --------------------------------------------------
data:    Canonical  UbuntuServer  14.04.2-LTS  Linux  14.04.201503090  westus    Canonical:UbuntuServer:14.04.2-LTS:14.04.201503090
...
data:    Canonical  UbuntuServer  14.04.2-LTS  Linux  14.04.201507060  westus    Canonical:UbuntuServer:14.04.2-LTS:14.04.201507060
info:    vm image list command OK

Теперь, имея Urn (например, возьмем Canonical:UbuntuServer:14.04.2-LTS:14.04.201507060) – можно создавать новую машину.

В случае ошибки вида:

error:   The subscription must be registered to use namespace "Microsoft.Storage" [...]

Подключаем необходимых провайдеров.

Мне потребовалось подключить три:

$ azure provider register Microsoft.Storage
$ azure provider register Microsoft.Network
$ azure provider register Microsoft.Compute

При чем о том, что провайдер не активен – Azure CLI сообщает после того, как вы пять раз запустите vm quick-create (поэтому – параметры лучше передавать в командной строке, что бы не вводить их каждый раз заново), и он упадет с ошибкой из-за отсутствующего провайдера.

Теперь – создаем саму машину.

Имейте ввиду, что пароль должен быть минимум 8 символов разного регистра и содержать минимум 1 спецсимвол. А имя – не должно содержать никаких символов подчеркивания и других нестандартных знаков – так как из него будет сформирована DNS-запись для нового хоста.

И опять-таки – об этом вы узнаете, когда vm quick-create сфейлится.

Необходимые параметры можно указать вручную во время создания:

$ azure vm quick-create
info:    Executing command vm quick-create
Resource group name: RTFM
Virtual machine name: rtfm-example
Location name: westus
Operating system Type [Windows, Linux]: Linux
ImageURN (format: "publisherName:offer:skus:version"): Canonical:UbuntuServer:14.04.2-LTS:14.04.201507060
User name: setevoy
Password: *********
Confirm password: *********
...

Либо передать все в параметрах:

$ azure vm quick-create -g RTFM -n rtfm-example -l westus -y Linux -Q Canonical:UbuntuServer:14.04.2-LTS:14.04.201507060 -u setevoy -p P@ssword1
info:    Executing command vm quick-create
+ Looking up the VM "rtfm-example"
info:    Using the VM Size "Standard_D1"
info:    The [OS, Data] Disk or image configuration requires storage account
+ Retrieving storage accounts
info:    Using the storage account "clia76d815175d27d9814514" in "westus"
+ Looking up the NIC "rtfm--westu-1451489821984-nic"
info:    An nic with given name "rtfm--westu-1451489821984-nic" not found, creating a new one
+ Looking up the virtual network "rtfm--westu-1451489821984-vnet"
info:    Preparing to create new virtual network and subnet
+ Creating a new virtual network "rtfm--westu-1451489821984-vnet" [address prefix: "10.0.0.0/16"] with subnet "rtfm--westu-1451489821984-snet" [address prefix: "10.0.1.0/24"]
+ Looking up the virtual network "rtfm--westu-1451489821984-vnet"
+ Looking up the subnet "rtfm--westu-1451489821984-snet" under the virtual network "rtfm--westu-1451489821984-vnet"
info:    Found public ip parameters, trying to setup PublicIP profile
+ Looking up the public ip "rtfm--westu-1451489821984-pip"
info:    PublicIP with given name "rtfm--westu-1451489821984-pip" not found, creating a new one
+ Creating public ip "rtfm--westu-1451489821984-pip"
+ Looking up the public ip "rtfm--westu-1451489821984-pip"
+ Creating NIC "rtfm--westu-1451489821984-nic"
+ Looking up the NIC "rtfm--westu-1451489821984-nic"
+ Creating VM "rtfm-example"
+ Looking up the VM "rtfm-example"
+ Looking up the NIC "rtfm--westu-1451489821984-nic"
+ Looking up the public ip "rtfm--westu-1451489821984-pip"
data:    Id                              :/subscriptions/97214f99-1f75-4602-91ee-715556cd5906/resourceGroups/RTFM/providers/Microsoft.Compute/virtualMachines/rtfm-example
data:    ProvisioningState               :Succeeded
data:    Name                            :rtfm-example
data:    Location                        :westus
data:    FQDN                            :rtfm--westu-1451489821984-pip.westus.cloudapp.azure.com
data:    Type                            :Microsoft.Compute/virtualMachines
data:
data:    Hardware Profile:
data:      Size                          :Standard_D1
data:
data:    Storage Profile:
data:      Image reference:
data:        Publisher                   :Canonical
data:        Offer                       :UbuntuServer
data:        Sku                         :14.04.2-LTS
data:        Version                     :14.04.201507060
data:
data:      OS Disk:
data:        OSType                      :Linux
data:        Name                        :cli8552da36493957f4-os-1451489823131
data:        Caching                     :ReadWrite
data:        CreateOption                :FromImage
data:        Vhd:
data:          Uri                       :https://clia76d815175d27d9814514.blob.core.windows.net/vhds/cli8552da36493957f4-os-1451489823131.vhd
data:
data:    OS Profile:
data:      Computer Name                 :rtfm-example
data:      User Name                     :setevoy
data:      Linux Configuration:
data:        Disable Password Auth       :false
data:
data:    Network Profile:
data:      Network Interfaces:
data:        Network Interface #1:
data:          Id                        :/subscriptions/97214f99-1f75-4602-91ee-715556cd5906/resourceGroups/RTFM/providers/Microsoft.Network/networkInterfaces/rtfm--westu-1451489821984-nic
data:          Primary                   :true
data:          MAC Address               :00-0D-3A-30-59-AF
data:          Provisioning State        :Succeeded
data:          Name                      :rtfm--westu-1451489821984-nic
data:          Location                  :westus
data:            Private IP alloc-method :Dynamic
data:            Private IP address      :10.0.1.4
data:            Public IP address       :40.112.143.2
data:            FQDN                    :rtfm--westu-1451489821984-pip.westus.cloudapp.azure.com
data:
data:    Diagnostics Profile:
data:
data:      Diagnostics Instance View:
info:    vm quick-create command OK

Проверяем:

$ azure vm list RTFM
info:    Executing command vm list
+ Getting virtual machines
data:    ResourceGroupName  Name          ProvisioningState  PowerState  Location  Size
data:    -----------------  ------------  -----------------  ----------  --------  -----------
data:    RTFM               rtfm-example  Succeeded          VM running  westus    Standard_D1
info:    vm list command OK

Screen Shot 2015-12-30 at 17.44.35

Ссылки по теме

поиск образов:

https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching

команды arm vs asm:

https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-azure-manage-vm-asm-arm

оригинал документа:

https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-deploy-rmtemplates-azure-cli