Moduláris runbookok létrehozása az Automationben
Az Azure Automationben ajánlott újrahasználható, moduláris runbookokat írni egy különálló funkcióval, amelyet más runbookok hívnak meg. A szülő runbookok gyakran meghívnak egy vagy több gyermek runbookot a szükséges funkciók elvégzéséhez.
A gyermek runbookok meghívásának két módja van: beágyazott vagy parancsmagon keresztül. Az alábbi táblázat összefoglalja azokat a különbségeket, amelyek segítenek eldönteni, hogy melyik út a jobb a forgatókönyvekhez.
Beágyazott | Parancsmag | |
---|---|---|
Feladat | A gyermek runbookok ugyanabban a feladatban futnak, mint a szülő. | A gyermek runbookhoz külön feladat jön létre. |
Kivégzés | A szülő runbook a folytatás előtt megvárja, amíg a gyermek runbook befejeződik. | A szülő runbook közvetlenül a gyermek runbook elindítása után folytatódik, vagy a szülő runbook megvárja a gyermekfeladat befejezését. |
Hozam | A szülő runbook közvetlenül lekérheti a kimenetet a gyermek runbookból. | A szülő runbooknak le kell kérnie a kimenetet a gyermek runbook-feladatból, vagy a szülő runbook közvetlenül lekérheti a kimenetet a gyermek runbookból. |
Paraméterek | A gyermek runbook paramétereinek értékei külön vannak megadva, és bármilyen adattípust használhatnak. | A gyermek runbook paramétereinek értékeit egyetlen kivonatolóba kell kombinálni. Ez a kivonatoló csak egyszerű, tömb- és objektumadattípusokat tartalmazhat, amelyek JSON-szerializálást használnak. |
Automation-fiók | A szülő runbook csak egy gyermek runbookot használhat ugyanabban az Automation-fiókban. | A szülő runbookok bármilyen Automation-fiókból, ugyanabból az Azure-előfizetésből, vagy akár egy másik előfizetésből is használhatnak gyermek runbookot, amelyhez ön rendelkezik kapcsolattal. |
Könyvkiadás | A gyermek runbookot közzé kell tenni a szülő runbook közzététele előtt. | A gyermek runbookok a szülő runbook elindítása előtt bármikor közzé lesznek téve. |
Gyermek runbook meghívása beágyazott végrehajtással
Ha egy runbookot egy másik runbookból szeretne beágyazottként meghívni, használja a runbook nevét, és adja meg a paraméterek értékeit, ugyanúgy, mint egy tevékenységet vagy parancsmagot. Az ugyanabban az Automation-fiókban lévő összes runbook minden más számára elérhető, így használható. A szülő runbook megvárja, amíg a gyermek runbook befejeződik, mielőtt továbblépne a következő sorra, és a kimenet közvetlenül a szülőnek ad vissza.
Amikor beágyazott runbookot hív meg, az ugyanabban a feladatban fut, mint a szülő runbook. A gyermek runbook feladatelőzményeiben nincs jelzés. A gyermek runbook kivételei és streamkimenetei a szülőhöz vannak társítva. Ez a viselkedés kevesebb feladatot eredményez, és megkönnyíti a nyomon követési és hibaelhárítási feladatokat.
Egy runbook közzétételekor a hívott gyermek runbookokat már közzé kell tenni. Ennek az az oka, hogy az Azure Automation társításokat hoz létre a gyermek runbookokkal, amikor egy runbookot állít össze. Ha a gyermek runbookok még nem lettek közzétéve, a szülő runbook úgy tűnik, hogy megfelelően közzéteszi, de kivételt hoz létre az indításkor.
Ha kivételt kap, újra közzéteheti a szülő runbookot, hogy megfelelően hivatkozzon a gyermek runbookokra. Nem kell újból közzétennie a szülő runbookot, ha bármely gyermek runbook módosult, mert a társítás már létrejött.
A beágyazott gyermek runbook paraméterei bármilyen típusúak lehetnek, beleértve az összetett objektumokat is. Nincs JSON-szerializálás, mint amikor elindítja a runbookot az Azure Portal vagy a Start-AzAutomationRunbook parancsmag használatával.
Runbook-típusok
Jelenleg a PowerShell 5.1 támogatott, és csak bizonyos runbooktípusok hívhatják egymást:
- A PowerShell-runbookok és a grafikus runbookok beágyazottan hívhatják egymást, mivel mindkettő PowerShell-alapú.
- A PowerShell-munkafolyamat-forgatókönyvek és a grafikus PowerShell-munkafolyamat-forgatókönyvek inline meghívhatják egymást, mivel mindkettő PowerShell-munkafolyamaton alapul.
- A PowerShell-típusok és a PowerShell-munkafolyamat-típusok nem tudják egymást beágyazottan meghívni. Használniuk kell
Start-AzAutomationRunbook
őket.
Fontos
A gyermekszkripteket .\child-runbook.ps1
nem támogatja a PowerShell 7.1 és a PowerShell 7.2 kerülő megoldása: Használja Start-AutomationRunbook
a (belső parancsmagot) vagy Start-AzAutomationRunbook
(az Az.Automation modulból) egy másik runbook elindításához a szülő runbookból.
A runbookok közzétételi sorrendje csak a PowerShell-munkafolyamatok és a grafikus PowerShell-munkafolyamat-forgatókönyvek esetében számít.
Amikor a runbook grafikus vagy PowerShell-munkafolyamat gyermek runbookot hív meg beágyazott végrehajtással, a runbook nevét használja. A névnek azzal .\\
kell kezdődnie, hogy a szkript a helyi könyvtárban legyen.
Példa
Az alábbi példa elindít egy teszt gyermek runbookot, amely egy összetett objektumot, egy egész számot és egy logikai értéket fogad el. A gyermek runbook kimenete egy változóhoz van rendelve. Ebben az esetben a gyermek runbook egy PowerShell-munkafolyamat-runbook.
$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = PSWF-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true
Ugyanez a példa, de egy PowerShell-runbookot használ, mint a gyermek.
$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = .\PS-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true
Gyermek runbook indítása parancsmaggal
Fontos
Ha a runbook a paraméterrel rendelkező Wait
parancsmaggal Start-AzAutomationRunbook
meghív egy gyermek runbookot, és a gyermek runbook objektumeredményt hoz létre, a művelet hibát tapasztalhat. A hiba megkerüléséhez tekintse meg az objektumkimenettel rendelkező gyermek runbookokat. Ez a cikk bemutatja, hogyan valósíthatja meg az eredmények lekérdezésére szolgáló logikát a Get-AzAutomationJobOutputRecord parancsmaggal.
A runbookok indítására a Windows PowerShell-lel való runbook indítása című cikkben leírtak szerint van lehetőségStart-AzAutomationRunbook
. A parancsmag kétféleképpen használható:
- A parancsmag visszaadja a feladat azonosítóját, amikor a gyermek runbookhoz létrejön a feladat.
- A parancsmag megvárja, amíg a gyermekfeladat befejeződik, és visszaadja a gyermek runbook kimenetét. A szkript a paraméter megadásával engedélyezi ezt a
Wait
módot.
A gyermek runbookból származó feladat egy parancsmaggal indult, amely a szülő runbook-feladattól külön fut. Ez a viselkedés több feladatot eredményez, mint a runbook beágyazott indítása, és megnehezíti a feladatok nyomon követését. A szülő aszinkron módon több gyermek runbookot is elindíthat anélkül, hogy mindegyik befejeződik. A gyermek runbookok beágyazott meghívásához a szülő runbooknak a párhuzamos kulcsszót kell használnia.
A gyermek runbook kimenete az időzítés miatt nem tér vissza megbízhatóan a szülő runbookhoz. Emellett előfordulhat, $VerbosePreference
hogy a , $WarningPreference
és más változók nem propagálhatók a gyermek runbookokra. A problémák elkerülése érdekében a paraméterrel külön Automation-feladatként Start-AzAutomationRunbook
indíthatja el a Wait
gyermek runbookokat. Ez a technika letiltja a szülő runbookot, amíg a gyermek runbook be nem fejeződik.
Ha nem szeretné, hogy a szülő runbook várakoztatás közben le legyen tiltva, a paraméter nélkül is elindíthatja a Wait
gyermek runbookotStart-AzAutomationRunbook
. Ebben az esetben a runbooknak a Get-AzAutomationJob használatával kell várnia a feladat befejezését. Az eredmények lekéréséhez a Get-AzAutomationJobOutput és a Get-AzAutomationJobOutputRecord parancsot is használnia kell.
A parancsmaggal indított gyermek runbook paraméterei kivonatolóként vannak megadva, a Runbook paramétereiben leírtak szerint. Csak egyszerű adattípusokat használhat. Ha a runbook egy összetett adattípusú paraméterrel rendelkezik, akkor beágyazottnak kell hívni.
Az előfizetési környezet elveszhet, amikor külön feladatként kezdi el a gyermek runbookokat. Ahhoz, hogy a gyermek runbook végrehajtsa az Az modul parancsmagjait egy adott Azure-előfizetésen, a gyermeknek a szülő runbooktól függetlenül hitelesítenie kell ezt az előfizetést.
Ha az ugyanazon Automation-fiókban lévő feladatok több előfizetéssel is működnek, az egyik feladatban lévő előfizetés kiválasztása megváltoztathatja a többi feladat aktuális előfizetési környezetét. A helyzet elkerülése érdekében használja Disable-AzContextAutosave -Scope Process
az egyes runbookok elején. Ez a művelet csak a runbook végrehajtásához menti a környezetet.
Példa
Az alábbi példa elindít egy gyermek runbookot paraméterekkel, majd megvárja, amíg a Start-AzAutomationRunbook
parancsmagot használja a Wait
paraméterrel. A gyermek runbook befejezése után a példa a gyermek runbook parancsmag-kimenetét gyűjti össze. A használatához Start-AzAutomationRunbook
a szkriptnek hitelesítenie kell az Azure-előfizetését.
# Ensure that the runbook does not inherit an AzContext
Disable-AzContextAutosave -Scope Process
# Connect to Azure with system-assigned managed identity
$AzureContext = (Connect-AzAccount -Identity).context
# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
$params = @{"VMName"="MyVM";"RepeatCount"=2;"Restart"=$true}
Start-AzAutomationRunbook `
-AutomationAccountName 'MyAutomationAccount' `
-Name 'Test-ChildRunbook' `
-ResourceGroupName 'LabRG' `
-DefaultProfile $AzureContext `
-Parameters $params -Wait
Ha azt szeretné, hogy a runbook a rendszer által hozzárendelt felügyelt identitással fusson, hagyja meg a kódot. Ha inkább felhasználó által hozzárendelt felügyelt identitást szeretne használni, akkor:
- Az 5. sorból távolítsa el
$AzureContext = (Connect-AzAccount -Identity).context
a - Cserélje le a
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
- Adja meg az ügyfél azonosítóját.
Következő lépések
- A runbook futtatásához lásd : Runbook indítása az Azure Automationben.
- A runbook működésének monitorozásához tekintse meg a Runbook kimenetét és üzenetét az Azure Automationben.