Moda na co dzień determinuje wiele z naszych zachowań – kupujemy „wypasione” telefony, szybkie (lub duże) samochody, modne ciuchy, piszemy na blogach, itd. W chwili refleksji dotarło do mnie, że nie nadążam za modą – wszak nie prowadzę bloga… Czas więc to nadrobić i dołączyć do bardziej nowoczesnej części społeczeństwa. Nie dość więc, że na blogu, to zajmiemy się jeszcze modnymi technologiami – Windows Azure i PowerShellem. Zapraszam…
Windows Azure oferuje całkiem przyjemny portal do zarządzania naszą „chmurką” nie mniej jednak w niektórych sytuacjach przydałaby się nam automatyzacja wybranych czynności. Z pomocą przychodzi oczywiście PowerShell i dedykowany moduł do Windows Azure. Aby rozpocząć naszą przygodę, będziemy potrzebowali PowerShell w wersji minimum 3.0 oraz moduł, który można pobrać z witryny Microsoft: http://go.microsoft.com/fwlink/?LinkID=279888.
Po pobraniu i instalacji modułu uruchamiamy konsolę PowerShell i tu czeka na nas mała niespodzianka – funkcja automatycznego ładowania modułów, do której tak już się zdążyliśmy przyzwyczaić nie zadziałała… Spieszę jednak aby Was uspokoić – to nie błąd, moduł domyślnie instaluje się w katalogu C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure, który nie jest brany pod uwagę przez mechanizm importujący moduły. Jak zwykle mamy kilka sposobów na zmianę tego zachowania, jednym z nich może być dodanie do naszego profilu PowerShell następującej linii:
$env:PSModulePath = $env:PSModulePath + ";C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure"
Przy ponownym uruchomieniu PowerShella możemy już korzystać z poleceń dostępnych w module Azure.
Czas więc podłączyć się do naszej subskrypcji Windows Azure. Do wyboru mamy dwie możliwości.
W przypadku pierwszej opcji możemy skorzystać z polecenia Add-AzureAccount, niestety zostaniemy poproszeni o zalogowanie się w dodatkowym oknie. O ile metoda ta sprawdzi się podczas prac ad hoc, o tyle przy próbie automatyzacji zadań będzie to problem.
Drugi sposób wykorzystuje certyfikat, który można pobrać z portalu Windows Azure. Po uruchomieniu polecenia Get-AzurePublishSettingsFile zostanie uruchomiona przeglądarka internetowa na stronie udostępniającej plik z certyfikatem. Plik o rozszerzeniu .publishsettings należy zapisać w bezpiecznym miejscu (wszak jest to klucz do zarządzania naszym środowiskiem!). Tak przygotowani, uruchamiamy polecenie Import-AzurePublishSettingsFile, jako parametr podając ścieżkę do pobranego przed chwilą pliku i możemy zarządzać środowiskiem.
Import-AzurePublishSettingsFile azure.publishsettings
Polecenie powoduje import certyfikatu do naszego magazynu oraz utworzenie pliku konfiguracyjnego w ścieżce C:\Users\Nazwa_Użytkownika\AppData\Roaming\Windows Azure PowerShell.
Za pomocą polecenia Get-AzureSubscription możemy sprawdzić jak długo ważny jest nasz certyfikat umożliwiający połączenie - [Not After].
Pora wykonać jakieś prawdziwe zadanie. Na początek sprawdźmy, jakie maszyny wirtualne mamy już utworzone w naszym środowisku – wykorzystamy polecenie Get-AzureVM:
W celu uruchomienia jednej z maszyn wydamy polecenie Start-AzureVM, np.:
Start-AzureVM -ServiceName gblab -Name dc2
Analogicznie wyglądałoby zatrzymanie maszyny:
Stop-AzureVM -ServiceName gblab -Name dc2 -Force
Parametr Force będzie potrzebny, gdy zatrzymujemy ostatnią maszynę w ramach naszej usługi (gblab w tym przypadku). Uważajcie jednak, efektem zatrzymania ostatniej maszyny będzie zmiana adresu IP (zarówno VIP, jaki i DIP). Więcej na ten temat znajdziecie tutaj: http://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 przykładową funkcję, która spowoduje uruchomienie całego naszego środowiska (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 „kliknięć”…
Pierwsze zadanie wykonane. Jeśli uważacie, że czasami warto podążać za modą – niewykluczone, że ciąg dalszy nastąpi…
Więcej informacji o aspektach praktycznego wykorzystania Windows Azure znaleźć można w artykule Piotra - Wirtualna maszyna “w chmurze”– czyli środowisko testowe lub produkcyjne, w Windows Azure.