Vissza

Azure automatizálás ütemezett PowerShell szkriptekkel

  Zsolt Hajnalka

  2017.06.01. 11:00

A Microsoft Azure felhős platform fejlett szkriptelési, automatizálási eszköztárral könnyíti meg az üzemeltetést. Be fogom mutatni, miként lehet PowerShell-szkriptek ütemezett végrehajtásával rugalmasan testre szabni Azure-fogyasztásunkat, és még szigorúbban értelmezett használatalapú számlázást elérni.

Két tényező együttese a kulcs:

  • PowerShell-parancsok végrehajtásával is elláthatók az üzemeltetési feladatok Azure környezetben
  • PowerShell-szkriptek ütemezésére, időzített végrehajtására is széles körű lehetőségünk van

Illusztrációként lássuk Azure felhőben futó virtuális gépek indítását. Meglepő talán, de jelen pillanatban csak a virtuális gépek időzített leállítására van grafikus beállítási lehetőség, ám a művelet ellenpárjára, időzített indításra (egyelőre) nincs.

 

Semmi gond, épp ideális illusztráció lesz a PowerShell-szkriptek időzítésére!

Először is szükségünk lesz egy aktív „Automation Account”-ra. A szokásos módon, a keresőben az Automation kifejezés nyomán tudjuk létrehozni.


Az Automation Account létrehozása során ügyeljünk rá, hogy mindenképp kérjük „Azure Run As account” létrehozását. Szkriptjeink ennek segítségével kapcsolódnak majd Azure RM (Resource Manager) erőforrásokhoz.


Navigáljunk az elkészült Automation Account-ba, majd az Overview áttekintő felületen keressük meg a Runbooks szekciót.

 

Ezek a Runbook-ok jelentik a kottát, ebből játszik az Azure. Többféle úton is létrehozhatjuk őket, most .ps1 szkriptfájl importjával tesszük majd.

Adjunk hozzá új Runbook-ot, majd egyenként importáljuk be a már létező, előre elkészített .ps1 szkriptfájljainkat -- letöltés innen.

 

Figyelem: két szkriptfájlunk van, StartVezerlo.ps1, és StartVM.ps1. Szándékosan bontottuk ketté a végrehajtást, később kitérek majd ennek az okára.

Az importált, létrehozott két Runbook mindegyikén végig kell járnunk a szerkesztés (Edit), mentés (Save), és közzététel (Publish) folyamatot. Egy-egy kattintásról beszélünk, gyorsan készen vagyunk.

  1. A StartVezerlő runbook elején a szerkesztés során ki kell töltenünk az alapértelmezett paramétereket: az elindítani kívánt virtuális gépek melyik erőforrás-csoportban (resource group) találhatók, továbbá hogy hívják a runbook-okat tartalmazó Azure Automation Account-ot.
  2. A StartVM runbookban nincs szükség semmilyen testre szabásra.

Ha minden igaz, az Edit-Save-Publish lépések végén mindkét runbook-unk „Published” státuszban vár bevetésre.

 

 

 

Mi van még hátra? Meg kell adnunk, melyik virtuális gépeink indítását kérjük a szkripttől. Több módszerből választhatunk, például név, típus, méret alapján bele is égethetjük a szűrést a PowerShell-kódba, ám ez nem tűnik rugalmas megoldásnak. Szerencsére az Azure erőforrásokhoz címkék rendelhetők, kulcs-érték párok formájában. Jelen állás szerint egy-egy objektumhoz maximum 15 címke adható hozzá, ebből használunk el egyet az ütemezett indításhoz. Menjünk az adott virtuális gépek információs lapjára, s ott keressük meg a „Tags” szekciót.

 

Adjuk hozzá a „Start” kulcsot és az „Auto” értéket! Erre a címkére keresünk ugyanis rá a PowerShell kóddal. Ilyen módon rugalmasan menedzselhetjük az érintett virtuális gépek körét: igény szerint adhatjuk hozzá újabb virtuális gépekhez, s távolíthatjuk el nagyon egyszerűen.

Sikeresen kikerültük tehát, hogy az ütemezett indítás kedvéért megkössük a kezünket pl. a virtuális gépek elnevezési konvencióit illetően.

Következő lépésünk az ütemezés. Keressük meg a StartVezerlo runbook-ot (ismét győződjünk meg róla, hogy Published státuszú), és a Schedules / „Add a schedule” menüpont segítségével adjunk hozzá egy új ütemezést.

 

Az ütemezéssel párhuzamosan amúgy indítási paramétereket is megadhatnánk, de nekünk most megfelelőek az alapértelmezett (a runbook PowerShell-szkriptjében definiált) paraméterek. Jellemzően ismétlődő („recurring”) ütemezést definiálunk, megadhatjuk az első futás időpontját, az időzónát, az ismétlés gyakoriságát, illetve igény szerint az utolsó futást is.

 

Az ütemezett, és rendszeresen végrehajtott PowerShell kódba írtam ellenőrzést, ami figyelembe veszi, munkanapról van-e szó. Szombaton és vasárnap nem kerül sor a virtuális gép indítására, ám jelen formájában pl. nem számol a szombatra áthelyezett munkanapokkal – nem „munkaügyi” naptárra néz rá tehát, hanem csak a legegyszerűbb ellenőrzést végzi.

Szándékosan van kettébontva a szkript:

  • nem a StartVezerlo indít, ő csak azonosítja az indítandó virtuális gépeket, majd „továbbpasszolja a labdát”
  • a vezérlő által paraméteresen meghívott StartVM azután elvégzi a tényleges indítást.

A konstrukció lényege, hogy így az indítást ténylegesen végző StartVM runbook példányok (job-ok) futását párhuzamosítani lehet: a vezérlőnek nem kell megvárnia egy virtuális gép indításának percekig tartó, sikeres befejezését, mielőtt kiadja az utasítást a listában következő virtuális gép indítására. Mivel a StartVM kódnak azonosítania kell magát az Azure felé („szia, én vagyok, és van jogom virtuális gépet indítani”), 1 érintett gép esetén pár másodperccel lassabb így a folyamat, de már 2 érintett gép esetén is bőven megtérül a dolog, és jelentős a sebességelőny.

Világos, hogy a virtuális gépek indítása illusztráció csupán. Az a fontos, hogy PowerShell szkriptek ütemezett végrehajtásával ütőképes eszköztárat kapunk a kezünkbe.

Köszönöm a figyelmet!


   

Megjegyzések
Még nincsenek hozzászólások. Légy első!

Blog kategória

Címkefelhő

Bloggerek

Mihály Kávási
Bejegyzések: 9
Csillagok: 6
Dátum: 2017.11.20.
Kata Rozmis
Bejegyzések: 12
Csillagok: 12
Dátum: 2017.11.15.
György Retek
Bejegyzések: 6
Csillagok: 8
Dátum: 2017.10.30.
Zsolt Hajnalka
Bejegyzések: 2
Csillagok: 0
Dátum: 2017.06.01.
Bence Baranyás
Bejegyzések: 1
Csillagok: 1
Dátum: 2017.05.24.

Kapcsolat