Spacer w chmurach czyli Microsoft Azure dla świeżaków. Automatyzacja zadań oraz prosty RUNBOOK cz.4

Witajcie. Dzisiaj kontynuujemy nasz kurs Microsoft Azure. Tym razem jak już umiemy instalować i łączyć się z naszymi maszynami wirtualnymi, przejdziemy sobie dalej i zastanowimy się w jaki sposób możemy tworzyć zadania automatyzacyjne dla naszych systemów wirtualnych. Dowiemy się również czym jest RUNBOOK oraz do czego przyda nam się konto automatyzacyjne. Zapinajcie pasy i siadajcie, zaczynamy.

Platforma Microsoft Azure umożliwia nam na pisanie prostych lub bardziej rozbudowanych skryptów przydatnych do wykonywania pewnych operacji na naszych wirtualnych maszynach lub obiektach. Wiele codziennych czynności możemy zautomatyzować lub po prostu wykonać ręcznie za pomocą uruchomienia pojedynczego skryptu, zawierającego serie poleceń Powershell.

Fajny jest również fakt, że skrypty mogą być wywoływane zdalnie z poziomu kodu w praktycznie dowolnym nowożytnym języku programowania, czyli możemy pisać i tworzyć aplikacje, które uruchomią nasz skrypt i wykonają pewne operacje w chmurze AZURE.

Tworzenie konta automatyzacji

Generalnie aby rozpocząć przygodę z pisaniem RUNBOOKów i wykonywaniem skryptów Powershell (a właściwie Powershell Workflow) będziemy musieli do naszej grupy zasobów dodać konto automatyzacji.

W wyszukiwarce wyszukajmy sobie „Automation Accounts” i kliknijmy na to:

Aktualnie wewnątrz naszych kont automatyzacji, nie powinno znajdować się nic. Ja jednak już coś mam ale proszę to zignorować. Klikamy znaczek plus aby dodać nowe konto automatyzacji:

Wypełniamy wszystko wedle naszego uznania. W polu name wstawiamy nazwę naszego konta automatyzacji i przypisujemy go do naszej aktualnej grupy zasobów.Dalej klikamy przycisk CREATE. Nowe konto zostało dodane.

Tworzenie pierwszego RUNBOOKa

Aby utworzyć sobie nowy skrypt automatyzacyjny (RUNBOOK) będziemy musieli wejść do środka konta automatyzacji. Tam ujrzymy sporo ciekawych opcji, które możemy wykorzystać.

Sam RUNBOOK jest obiektem usługi automatyzacji zadań, które możemy wykonywać na naszej chmurce i jej obiektach. Jest ogromnym ułatwieniem w zarządzaniu.

RUNBOOK może zostać zaimportowany z gotowej galerii lub może zostać napisany przez Nas od zera co wymaga znajomości Powershell lub Powershell Workflow.

Napiszemy teraz swój pierwszy RUNBOOK, który pozwoli na zatrzymanie naszych wirtualnych maszyn, które należą do grupy zasobów BLOG. Wszystkie pozostałe maszyny wirtualne będą działać bez zmian.

Aby to zrobić, wchodzimy do środka naszego konta automatyzacji:

Na pasku po lewej stronie wyszukajmy zakładki „RUNBOOKS” i kliknijmy w nią:

Wewnątrz widzimy, że znajdują się tam różne przykładowe RUNBOOKI w wielu różnych językach takich jak PYTHON, PowerShell czy BASH. Teraz sami chcemy stworzyć swój własny RUNBOOK, postępujemy identycznie i klikamy przycisk plus aby dodać nowy RUNBOOK:

Mamy do wyboru dwie drogi, albo tworzymy RUNBOOK od zera w edytorze albo importujemy gotowy plik RUNBOOKA z dysku lokalnego naszego komputera. My korzystamy z opcji pierwszej (Quick Create):

Ustaliliśmy nazwę dla naszego RUNBOOKa, wybraliśmy również język „Powershell Workflow” oraz oddatkowy opis naszego skryptu automatyzacji. Teraz zostaniemy przeniesieni do edytora:

Generalnie tutaj możemy w fajny sposób tworzyć nasze skrypty. Sam Powershell Workflow jest obszernie udokumentowany w internecie na stronach Microsoft. W edytorze działa również podpowiadanie składni. Przystąpimy teraz do pisania naszego skryptu.

workflow StopBlogVMsRunBook
{
    # dodajemy parametr obowiązkowy do działania naszego RUNBOOKa
    # Jest to nazwa grupy zasobów, z której chcemy zatrzymać VMki
    Param(
        [Parameter(Mandatory=$true)]
        [String]
        $resourceGroupName
    )
}

Następnie będziemy musieli dokonać autentykacji naszego użytkownika w dowolny sposób. My wykorzystamy sposób prosty z certyfikatem.

workflow StopBlogVMsRunBook
{
    # dodajemy parametr obowiązkowy do działania naszego RUNBOOKa
    # Jest to nazwa grupy zasobów, z której chcemy zatrzymać VMki
    Param(
        [Parameter(Mandatory=$true)]
        [String]
        $resourceGroupName
    )

    #dokonujemy autoryzacji naszego użytkownika
    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
}

Kolejno będziemy musieli wyciągnąć w jakiś sposób wszystkie maszyny wirtualne, które będą należeć do naszej grupy zasobów, które podamy w formie obowiązkowego (mandatory) parametru:

workflow StopBlogVMsRunBook
{
    # dodajemy parametr obowiązkowy do działania naszego RUNBOOKa
    # Jest to nazwa grupy zasobów, z której chcemy zatrzymać VMki
    Param(
        [Parameter(Mandatory=$true)]
        [String]
        $resourceGroupName
    )

    #dokonujemy autoryzacji naszego użytkownika
    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

    #pobieramy listę wirtualnych maszyn
    #należących do podanej grupy zasobów
    $vms = Get-AzureRmVM -ResourceGroupName $resourceGroupName
}

Następnie w sposób pararell będziemy dokonywać operacji zatrzymania na wszystkich maszynach wirtualnych. Nie chcemy zatrzymywać ich jedna po drugiej i czekać na zatrzymanie poprzedniej, chcemy zatrzymywać wiele na raz w tym samym czasie. Dodajemy pętle:

workflow StopBlogVMsRunBook
{
    # dodajemy parametr obowiązkowy do działania naszego RUNBOOKa
    # Jest to nazwa grupy zasobów, z której chcemy zatrzymać VMki
    Param(
        [Parameter(Mandatory=$true)]
        [String]
        $resourceGroupName
    )

    #dokonujemy autoryzacji naszego użytkownika
    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

    #pobieramy listę wirtualnych maszyn
    #należących do podanej grupy zasobów
    $vms = Get-AzureRmVM -ResourceGroupName $resourceGroupName

    #zatrzymujemy wiele maszyn wielowątkowo
    foreach -parallel ($vm in $vms)
    {
        #wyswietlamy nazwy maszyn
        Write-Output $vm.Name

        #zatrzymujemy maszyny z naszej grupy zasobów
        Stop-AzureRmVM -ResourceGroupName $resourceGroupName -Name $vm.Name -Force
    }
}

Testowanie RUNBOOKa

W tej chwili zapiszmy nasz skrypt przy użyciu dyskietki. Następnie możemy go przetestować przed publikacją. Aby to zrobić klikamy prawym przyciskiem myszy wewnątrz edytora i wybieramy Test Pane. Zostaniemy przeniesieni do panelu testowania, który pozwoli nam na przeprowadzenie symulacji:

Wpisujemy nazwę naszej grupy zasobów „BLOGRESOURCEGROUP” i uruchamiamy nasz test za pomocą przycisku PLAY (uruchom). Będziemy musieli chwile poczekać, bo skrypt wykonuje się na realnych obiektach. Potrwa to chwile ale jeśli wszystko jest ok to będzie COMPLETED.

Generalnie słowo symulacja jest tutaj troszkę nie na miejscu bo wszystko wykonuje się na naszych realnych maszynach wirtualnych. Gdybyśmy chcieli na przykład skasować nasze maszyny to wystarczy skorzystać z polecenia:

workflow StopBlogVMsRunBook
{
    # dodajemy parametr obowiązkowy do działania naszego RUNBOOKa
    # Jest to nazwa grupy zasobów, z której chcemy zatrzymać VMki
    Param(
        [Parameter(Mandatory=$true)]
        [String]
        $resourceGroupName
    )

    #dokonujemy autoryzacji naszego użytkownika
    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationID $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

    #pobieramy listę wirtualnych maszyn
    #należących do podanej grupy zasobów
    $vms = Get-AzureRmVM -ResourceGroupName $resourceGroupName

    #zatrzymujemy wiele maszyn wielowątkowo
    foreach -parallel ($vm in $vms)
    {
        #wyswietlamy nazwy maszyn
        Write-Output $vm.Name

        #kasujemy maszyny z naszej grupy zasobów
        Remove-AzureRmVM -ResourceGroupName $resourceGroupName -Name $vm.Name -Force
    }
}

Po wykonaniu tego RUNBOOKa, nasze wirtualne maszyny blog-vm1 oraz blog-vm2 zostaną usunięte. Wykonajmy skrypt i zobaczmy sami. Musiie być bardzo ostrożni z poleceniami Powershell tym bardziej jeśli korzystamy z atrybutu -force (na siłę).

Zobaczmy czy nasze wirtualne maszyny zostały usunięte:

Publikowanie naszego RUNBOOKa

Gotowy RUNBOOK może zostać opublikowany przy użyciu przycisku „PUBLISH” tak abyśmy mogli wykonać go w sposób jawny i odwołać się do niego później.

Następnie przy użyciu przycisku o kształcie zegarka (Schedule) będziemy mogli ustalić harmonogram wykonywania naszego RUNBOOKa o godzinie, która będzie nam najbardziej pasowała. Bardzo przydatna opcja gdy na przykład chcemy restartować systematycznie nasze maszyny wirtualnie. Będzie on wykonywał się sam o ściśle ustalonej porze.

Podsumowanie

Automatyzacja usług na platformie AZURE pozwala nam na bardzo skuteczne zarządzanie naszymi obiektami z poziomu kodu Powershell lub PYTHON. Ułatwia nam to zadania, które sami musielibyśmy wykonywać ręcznie robiąc wszystko krok po kroku. To jest troche podobnie jakbyśmy napisali sobie skrypt w BASHU lub POWERSHELLU normalnie na Windowsa lub zastosowali AUTOIT.