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.