- Azure IaaS (1) – první VM z grafického portálu
- Azure IaaS (2) – první VM z PowerShell
- Azure IaaS (3) – první VM z Azure CLI
- Azure IaaS (4) – první VM z ARM šablony
- Azure IaaS (5) – Network security group
- Azure IaaS (6) – vlastní image
- Azure IaaS (7) – automatizace stavu VM při vytvoření
- Azure IaaS (8) – Availability Set aneb jak je to s SLA
V minulém díle jsme naklikali VM v portálu. Bylo to snadné, ale pokud jich bude potřeba víc a budeme chtít tyto operace často opakovat, GUI nebude nejrychlejší a rutinní opakování má potenciál pro vznik chyb. Dnes si zkusíme totéž v PowerShellu, ať už to uděláme interaktivně nebo jako skript. To nám umožní začít věci automatizovat.
PowerShell a Azure
Linux uživatelé vždy měli k dispozici velmi mocná textová prostředí jako je bash. Svět Windows byl hodně klikací a zkušenost v “cmd” příšerná. Nicméně Microsoft před deseti lety začal pracovat na PowerShell, který se ve verzi 2.0 stal integrální součástí Windows 7 a Windows 2008 R2. Povedl se a práce s ním je intuitivní a velmi příjemná. Nabídne interaktivní režim, kde se příkazy rovnou vykonávají i možnost vytvářet skripty nebo pracovat v prostředí, kde skript píšete, máte okamžitou nápovědu a pak ho můžete vykonat v dávce (PowerShell ISE). PowerShell je řekl bych někde mezi příkazovou řádkou a programovacím jazykem. Nedosahuje flexibility a programátorských konceptů jako třeba Python, ale má zabudované pokročilé a velmi užitečné konstrukty jako je ForEach. Před nějakým časem dokonce Microsoft oznámil dostupnost PowerShell i pro Linux OS.
PowerShell ekosystém umí instalovat rozšíření pro další funkce, které nejsou přímo jeho součástí. Azure výbava patří do této kategorie. Instalace je snadná – spusťte PowerShell okno jako správce a zadejte:
PS C:\ Install-Module AzureRM
Vytváříme VM v PowerShell
Nejprve se zalogujeme do Azure naším účtem.
Login-AzureRmAccount
Dále vytvoříme novou skupinu zdrojů s názvem “test”.
New-AzureRmResourceGroup -Name test -Location westeurope
V této skupině si vytvoříme storage account, tedy prostor pro ukládání dat a také samozřejmě disků našich VM.
New-AzureRmStorageAccount -ResourceGroupName test -Name tomastore -Location westeurope -SkuName Standard_LRS -Kind "Storage"
Pusťme se do síťařiny. Vytvoříme si nejprve nový subnet s nějakými interními adresami a tento objekt uložíme do proměnné (abychom se na něj mohli odkazovat). Následně vytvoříme novou privátní síť, která bude právě tento subnet obsahovat a objekt sítě si uložíme do proměnné. Ve třetím kroku získáme veřejnou IP adresu a na závěr necháme vzniknout virtuální síťovou kartu v našem subnetu a k této kartě přiřadíme naší veřejnou adresu.
$sub1= New-AzureRmVirtualNetworkSubnetConfig -Name sub1 -AddressPrefix "10.1.1.0/24" $net1= New-AzureRmVirtualNetwork -Name net1 -ResourceGroupName test -Location westeurope -AddressPrefix "10.1.1.0/24" -Subnet $sub1 $pip= New-AzureRmPublicIpAddress -Name pip1 -ResourceGroupName test -Location westeurope -AllocationMethod Static $nic1= New-AzureRmNetworkInterface -Name nic1 -ResourceGroupName test -Location westeurope -SubnetId $net1.Subnets[0].Id -PublicIpAddressId $pip.Id
Začneme si budovat konfiguraci VM a určíme její velikost.
$vm1 = New-AzureRmVMConfig -VMName vm1 -VMSize "Standard_DS1_v2"
Určíme si způsob přihlášení do této VM. Nejprve vytvoříme objekt $cred (credentials), kam bychom dali jméno a heslo, ale v mém případě to heslo bude prázdné (chci totiž použít login SSH klíčem). Tyto přiřadíme k našemu objektu $vm1, kam postupně přidáváme všechna potřebná nastavení VM. Na konec do ní ještě přidáme náš veřejný SSH klíč.
$creds = New-Object System.Management.Automation.PSCredential ("tomas", (new-object System.Security.SecureString)) $vm1 = Set-AzureRmVMOperatingSystem -VM $vm1 -Linux -ComputerName vm1 -Credential $creds -DisablePasswordAuthentication $vm1= Add-AzureRmVMSshPublicKey -VM $vm1 -Path “/home/tomas/.ssh/authorized_keys” -KeyData "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFhm1FUhzt/9roX7SmT/dI+vkpyQVZp3Oo5HC23YkUVtpmTdHje5oBV0LMLBB1Q5oSNMCWiJpdfD4VxURC31yet4mQxX2DFYz8oEUh0Vpv+9YWwkEhyDy4AVmVKVoISo5rAsl3JLbcOkSqSO8FaEfO5KIIeJXB6yGI3UQOoL1owMR9STEnI2TGPZzvk/BdRE73gJxqqY0joyPSWOMAQ75Xr9ddWHul+v//hKjibFuQF9AFzaEwNbW5HxDsQj8gvdG/5d6mt66SfaY+UWkKldM4vRiZ1w11WlyxRJn5yZNTeOxIYU4WLrDtvlBklCMgB7oF0QfiqahauOEo6m5Di2Ex Generated-by-Nova"
Přidejte k objektu $vm image. Potřebné údaje (Offer, SKU, …) jsem si opsal v portálovém GUI, ale existují příkazy, kterými můžete vyhledávat přímo v PowerShellu.
$vm1 = Set-AzureRmVMSourceImage -VM $vm1 -PublisherName Canonical -Offer UbuntuServer -Skus 16.04.0-LTS -Version "latest"
Přiřadíme si virtuální síťovou kartu.
$vm1 = Add-AzureRmVMNetworkInterface -VM $vm1 -Id $nic1.Id
Teď musíme zajistit disk. V prvním kroku načteme náš storage account a vybudujeme URI našeho disku s tím, že název určíme jako vm1.vhd. Toto URI k objektu $vm přiřadíme.
$storageAcc = Get-AzureRmStorageAccount -ResourceGroupName test -AccountName tomastore $osDiskUri = $storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds/vm1.vhd" $vm1 = Set-AzureRmVMOSDisk -VM $vm1 -Name vm1 -VhdUri $osDiskUri -CreateOption fromImage
Jdeme na to, vytvoříme VM !
New-AzureRmVM -ResourceGroupName test -Location westeurope -VM $vm1
Po nějaké době se budeme moci připojit, veřejnou IP si vypíšeme takhle:
Write-Host "VM public IP: " $pip.IpAddress
Podívejte se na výsledek také v portálu – to všechno se nám podařilo vytvořit skriptem. Když budete takových VM potřebovat 20 s drobnými rozdíly v image či velikosti, snadno uděláte skript, který spustíte, odejdete na kafe a mezitím se vše připraví.
Na závěr, protože rádi šetříme, zase všechno smažeme – rovnou celou resource group.
Remove-AzureRmResourceGroup -Name test
Příště uděláme prakticky totéž, ale s využitím Azure CLI.
Chcete pomoci s návrhem on-premise řešení IaaS postaveným na Azure Pack/Stack, OpenStack nebo VMware? Potřebujete poradit s migrací aplikací a nasazením v Azure cloudu? HPE má certifikované Microsoft architekty a konzultanty a můžete také využít plně konvergovaných systémů pro vaše on-premise potřeby.