Modna para – Windows Azure i PowerShell
Moda na co dzien determinuje wiele z naszych zachowan – kupujemy „wypasione” telefony, szybkie (lub duze) samochody, modne ciuchy, piszemy na blogach, itd. W chwili refleksji dotarlo do mnie, ze nie nadazam za moda – wszak nie prowadze bloga… Czas wiec to nadrobic i dolaczyc do bardziej nowoczesnej czesci spoleczenstwa. Nie dosc wiec, ze na blogu, to zajmiemy sie jeszcze modnymi technologiami – Windows Azure i PowerShellem. Zapraszam…
Windows Azure oferuje calkiem przyjemny portal do zarzadzania nasza „chmurka” nie mniej jednak w niektórych sytuacjach przydalaby sie nam automatyzacja wybranych czynnosci. Z pomoca przychodzi oczywiscie PowerShell i dedykowany modul do Windows Azure. Aby rozpoczac nasza przygode, bedziemy potrzebowali PowerShell w wersji minimum 3.0 oraz modul, który mozna pobrac z witryny Microsoft: https://go.microsoft.com/fwlink/?LinkID=279888.
Po pobraniu i instalacji modulu uruchamiamy konsole PowerShell i tu czeka na nas mala niespodzianka – funkcja automatycznego ladowania modulów, do której tak juz sie zdazylismy przyzwyczaic nie zadzialala… Spiesze jednak aby Was uspokoic – to nie blad, modul domyslnie instaluje sie w katalogu C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure, który nie jest brany pod uwage przez mechanizm importujacy moduly. Jak zwykle mamy kilka sposobów na zmiane tego zachowania, jednym z nich moze byc dodanie do naszego profilu PowerShell nastepujacej linii:
$env:PSModulePath = $env:PSModulePath + ";C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure"
Przy ponownym uruchomieniu PowerShella mozemy juz korzystac z polecen dostepnych w module Azure.
Czas wiec podlaczyc sie do naszej subskrypcji Windows Azure. Do wyboru mamy dwie mozliwosci.
W przypadku pierwszej opcji mozemy skorzystac z polecenia Add-AzureAccount, niestety zostaniemy poproszeni o zalogowanie sie w dodatkowym oknie. O ile metoda ta sprawdzi sie podczas prac ad hoc, o tyle przy próbie automatyzacji zadan bedzie to problem.
Drugi sposób wykorzystuje certyfikat, który mozna pobrac z portalu Windows Azure. Po uruchomieniu polecenia Get-AzurePublishSettingsFile zostanie uruchomiona przegladarka internetowa na stronie udostepniajacej plik z certyfikatem. Plik o rozszerzeniu .publishsettings nalezy zapisac w bezpiecznym miejscu (wszak jest to klucz do zarzadzania naszym srodowiskiem!). Tak przygotowani, uruchamiamy polecenie Import-AzurePublishSettingsFile, jako parametr podajac sciezke do pobranego przed chwila pliku i mozemy zarzadzac srodowiskiem.
Import-AzurePublishSettingsFile azure.publishsettings
Polecenie powoduje import certyfikatu do naszego magazynu oraz utworzenie pliku konfiguracyjnego w sciezce C:\Users\Nazwa_Uzytkownika\AppData\Roaming\Windows Azure PowerShell.
Za pomoca polecenia Get-AzureSubscription mozemy sprawdzic jak dlugo wazny jest nasz certyfikat umozliwiajacy polaczenie - [Not After].
Pora wykonac jakies prawdziwe zadanie. Na poczatek sprawdzmy, jakie maszyny wirtualne mamy juz utworzone w naszym srodowisku – wykorzystamy polecenie Get-AzureVM:
W celu uruchomienia jednej z maszyn wydamy polecenie Start-AzureVM, np.:
Start-AzureVM -ServiceName gblab -Name dc2
Analogicznie wygladaloby zatrzymanie maszyny:
Stop-AzureVM -ServiceName gblab -Name dc2 -Force
Parametr Force bedzie potrzebny, gdy zatrzymujemy ostatnia maszyne w ramach naszej uslugi (gblab w tym przypadku). Uwazajcie jednak, efektem zatrzymania ostatniej maszyny bedzie zmiana adresu IP (zarówno VIP, jaki i DIP). Wiecej na ten temat znajdziecie tutaj: https://blogs.technet.com/b/keithmayer/archive/2013/06/19/windows-azure-virtual-machines-there-s-more-than-1-way-to-shutdown-a-vm.aspx
Stwórzmy zatem przykladowa funkcje, która spowoduje uruchomienie calego naszego srodowiska (ograniczamy klikanie na portalu!):
function Start-AzureLAB
{
$x = 1
Write-Progress -Activity "Getting VMs" -Status "Please wait..."
$VMs = Get-AzureVM | where {$_.Status -ne "ReadyRole"}
foreach ($VM in $VMs)
{
Write-Progress -Activity "Starting VMs" -Status $VM.Name `
-PercentComplete ($x * 100 / $VMs.Count)
Start-AzureVM -ServiceName $VM.ServiceName -Name $VM.Name
do
{
Start-Sleep -Milliseconds 250
}
while ((Get-AzureVM -ServiceName $VM.ServiceName `
-Name $VM.Name).PowerState -ne "Started")
$x++
}
}
Po dodaniu funkcji do profilu mamy gotowy mechanizm – proste polecenie PowerShell zamiast serii „klikniec”…
Pierwsze zadanie wykonane. Jesli uwazacie, ze czasami warto podazac za moda – niewykluczone, ze ciag dalszy nastapi…
Wiecej informacji o aspektach praktycznego wykorzystania Windows Azure znalezc mozna w artykule Piotra - Wirtualna maszyna “w chmurze”– czyli srodowisko testowe lub produkcyjne, w Windows Azure.