Azure: tworzenie maszyny wirtualnej z PowerShell

Jak utworzyć maszynę wirtualną z użyciem PowerShell? Jak dodać do Azure maszynę z użyciem skryptu PowerShell? Jak zautomatyzować proces tworzenia maszyny wirtualnej?

Tworzyliśmy już wspólnie wirtualną maszynę w portalu Microsoft Azure. Chwile to trwało, dziś utworzymy serwer z użyciem skryptu PowerShell. Zrobimy to bezpośrednio z naszego komputera. Następnie połączymy się z nią używając pulpitu zdalnego. Wszystko w jednym skrypcie.
Test nie będzie oderwany od rzeczywistości – nie raz potrzebowałem maszynę z systemem Windows dosłownie na godzinę, dwie albo i krócej. Stawianie nowej VM lokalnie czy u klienta czasami jest nie możliwe. Czasami trzeba było przetestować coś w innym środowisku. W naszym teście aby połączyć się z usługą Azure będziemy używać dedykowanego modułu PowerShell – jego instalacje opisałem we wcześniejszym wpisie.

Kolejnym wymaganiem oprócz modułu będzie konto Azure z aktywną subskrypcją.

Na potrzeby samego testu znacznie uprościmy też konfiguracje, aby czas jej tworzenia trwał dosłownie minutę. VM utworzymy w dedykowanej nowej grupie zasobów/resource group. Schematu działania ma wyglądać tak:

  • połączenie z usługą Azure
  • wybranie subskrypcji (można pominąć jeżeli jest tylko jedna)
  • utworzenie nowej Resource Group (nazwa jako parametr)
  • utworzenie nowej maszyny wirtualnej (bazując na predefiniowanych parametrach
  • pobranie publicznego adresu IP na potrzeby połączenia RDP
  • zestawienie połączenia RDP

Cały proces uruchamiany z poziomu skryptu wygląda tak:

Nowa maszyna w minute! Dobrze rzućmy okiem na nasz skrypt użyty w powyższym przykładzie – komentarz znajdziecie przed każdym etapem:

# import module
Import-Module Az.Accounts,Az.Resources,Az.Storage


# connect to Azure
Connect-AzAccount


# select subscription
$AZSubscription = Get-AzSubscription | Out-GridView -Title "Choose Subscription" -PassThru
Set-AzContext -Subscription $AZSubscription


# name Resource Group and parameters
$rgName = "rg-sprawdzone-it"
$location = "EastUS"
New-AzResourceGroup -Name $rgName -Location $location


# new VM parameters
$vmName = "vmsprawdzoneit"
$vnetName = "vnsprawdzoneit"
$subnetName = "subnetsprawdzoneit"
$NetworkSecurtityGroupName = "nsgsprawdzoneit"
$publicIPName = "pipsprawdzoneit"

# creating a new VM:
# *you will be prompted for a local administrator name and password for the VM
# *we indicate the machine type, for the purposes of the test it is the default type
# *the default is also OS VM, which in the case of Azure means that it is Windows Server
New-AzVm `
    -ResourceGroupName $rgName `
    -Name $vmName `
    -Location $location `
    -VirtualNetworkName $vnetName `
    -SubnetName $subnetName `
    -SecurityGroupName $NetworkSecurtityGroupName `
    -PublicIpAddressName $publicIPName `
    -OpenPorts 3389 


# getting the public IP address of the new VM
$rdpIP = (Get-AzPublicIpAddress -ResourceGroupName $rgName  | Select-Object IpAddress).IpAddress


# establishing a RDP connection with the VM
mstsc /v:$rdpIP

Jak widzicie skrypt realizuje wszystkie nasze założenia – jego prostota działania skupia się na dużym uproszczenie głównego polecenia czyli New-AzVm bo tutaj opcja parametrów może być bardzo duża. Zaczynając od ilości otwartych portów, przez typ maszyny czy wybór systemu operacyjnego, dodanie dysku zarządzanego etc. Jeżeli chcecie zgłębić temat to najlepiej robić to z aktualną dokumentacją Microsoft.

Oczywiście klocki najlepiej poukładać samemu, np użyć dodatkowych parametrów, zdefiniować subskrypcje z góry, czy wybierać grupę zasobów.

Skrypt do pobrania jest dostępny w naszym repozytorium GitHub

Pamiętajcie że niektóre parametry takie jak nazwa VNET nie pozwalają na użycie myślnika, czasami też użytkownicy zapominają że jako domyślnej nazwy administratora lokalnego nie możemy używać admin/administrator.