Vytváření modulárních runbooků ve službě Automation

V Azure Automation je vhodné psát opakovaně použitelné modulární runbooky s diskrétní funkcí, kterou ostatní runbooky volají. Nadřazený runbook často volá jeden nebo více podřízených runbooků, aby prováděly požadované funkce.

Existují dva způsoby volání podřízeného runbooku: vložené nebo prostřednictvím rutiny. Následující tabulka shrnuje rozdíly, které vám pomůžou rozhodnout, jaký způsob je pro vaše scénáře lepší.

Na řádku Rutina
Práce Podřízené runbooky se spouštějí ve stejné úloze jako nadřazený objekt. Pro podřízený runbook se vytvoří samostatná úloha.
Spuštění Nadřazený runbook před pokračováním čeká na dokončení podřízeného runbooku. Nadřazený runbook pokračuje ihned po spuštění podřízeného runbooku nebo nadřazený runbook čeká na dokončení podřízené úlohy.
Výstup Nadřazený runbook může přímo získat výstup z podřízeného runbooku. Nadřazený runbook musí načíst výstup z podřízené úlohy runbooku nebo nadřazený runbook může přímo získat výstup z podřízeného runbooku.
Parametry Hodnoty pro parametry podřízeného runbooku jsou zadány samostatně a mohou používat libovolný datový typ. Hodnoty pro parametry podřízeného runbooku se musí zkombinovat do jedné hashovatelné tabulky. Tato hashovatelná tabulka může obsahovat pouze jednoduché datové typy, pole a objekty, které používají serializaci JSON.
Účet Automation Nadřazený runbook může používat pouze podřízený runbook ve stejném účtu Automation. Nadřazené runbooky můžou používat podřízený runbook z libovolného účtu Automation, ze stejného předplatného Azure a dokonce i z jiného předplatného, ke kterému máte připojení.
Publikování Podřízený runbook musí být publikovaný před publikováním nadřazeného runbooku. Podřízený runbook se publikuje kdykoli před spuštěním nadřazeného runbooku.

Volání podřízeného runbooku pomocí vloženého spuštění

Pokud chcete volat runbook vložený z jiného runbooku, použijte název runbooku a zadejte hodnoty pro jeho parametry, stejně jako byste použili aktivitu nebo rutinu. Všechny runbooky ve stejném účtu Automation jsou k dispozici všem ostatním, které se tímto způsobem použijí. Nadřazený runbook čeká na dokončení podřízeného runbooku před přesunutím na další řádek a všechny výstupy se vrátí přímo do nadřazeného řádku.

Když voláte vložený runbook, spustí se ve stejné úloze jako nadřazený runbook. V historii úloh podřízeného runbooku není žádná indikace. Všechny výjimky a výstupy datového proudu z podřízeného runbooku jsou přidružené k nadřazené sadě. Výsledkem tohoto chování je méně úloh a usnadňuje jejich sledování a řešení potíží.

Při publikování runbooku musí být všechny podřízené runbooky, které volá, již publikovány. Důvodem je, že Azure Automation sestaví přidružení k jakýmkoli podřízeným runbookům při kompilaci runbooku. Pokud se podřízené runbooky ještě nepublikovaly, zobrazí se nadřazený runbook správně publikovat, ale po spuštění vygeneruje výjimku.

Pokud dojde k výjimce, můžete nadřazený runbook znovu publikovat, aby správně odkazovat na podřízené runbooky. Nadřazený runbook nemusíte znovu publikovat, pokud se změní některý podřízený runbook, protože přidružení již bylo vytvořeno.

Parametry podřízeného runbooku označovaného jako vložený mohou být libovolného datového typu, včetně složitých objektů. Neexistuje žádná serializace JSON, protože při spuštění runbooku pomocí webu Azure Portal nebo pomocí rutiny Start-AzAutomationRunbook .

Typy runbooků

PowerShell 5.1 se v současné době podporuje a mezi sebou můžou volat jenom některé typy runbooků:

  • Runbook PowerShellu a grafický runbook se můžou vzájemně volat, protože oba jsou založené na PowerShellu.
  • Runbook pracovního postupu PowerShellu a grafický runbook pracovního postupu PowerShellu se můžou vzájemně volat, protože oba jsou založené na pracovním postupu PowerShellu.
  • Typy PowerShellu a typy pracovních postupů PowerShellu se nemůžou vzájemně volat vloženě. Musí používat Start-AzAutomationRunbook.

Důležité

Spouštění podřízených skriptů pomocí .\child-runbook.ps1 není podporováno v PowerShellu 7.1 a PowerShellu 7.2 Alternativní řešení: Použití Start-AutomationRunbook (interní rutina) nebo Start-AzAutomationRunbook (z modulu Az.Automation ) ke spuštění jiného runbooku z nadřazeného runbooku.

Pořadí publikování runbooků je důležité jenom pro pracovní postup PowerShellu a grafické runbooky pracovních postupů PowerShellu.

Když runbook volá grafický nebo podřízený runbook pracovního postupu PowerShellu pomocí vloženého spuštění, použije název runbooku. Název musí začínat .\\ zadáním skriptu v místním adresáři.

Příklad

Následující příklad spustí testovací podřízený runbook, který přijímá komplexní objekt, celočíselnou hodnotu a logickou hodnotu. Výstup podřízeného runbooku je přiřazen k proměnné. V tomto případě je podřízený runbook runbook runbook pracovního postupu PowerShellu.

$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = PSWF-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true

Tady je stejný příklad, ale použití runbooku PowerShellu jako podřízeného runbooku.

$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = .\PS-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true

Spuštění podřízeného runbooku pomocí rutiny

Důležité

Pokud runbook volá podřízený runbook pomocí Start-AzAutomationRunbook rutiny s parametrem Wait a podřízený runbook vytvoří výsledek objektu, operace může narazit na chybu. Pokud chcete tuto chybu obejít, přečtěte si téma Podřízené runbooky s výstupem objektu. V tomto článku se dozvíte, jak implementovat logiku pro dotazování na výsledky pomocí rutiny Get-AzAutomationJobOutputRecord .

Runbook můžete spustit Start-AzAutomationRunbook , jak je popsáno v tématu Spuštění runbooku pomocí Windows PowerShellu. Pro tuto rutinu existují dva režimy použití:

  • Rutina vrátí ID úlohy při vytvoření úlohy pro podřízený runbook.
  • Rutina čeká na dokončení podřízené úlohy a vrátí výstup z podřízeného runbooku. Skript tento režim povolí zadáním parametru Wait .

Úloha z podřízeného runbooku spuštěná s rutinou se spouští odděleně od úlohy nadřazeného runbooku. Výsledkem tohoto chování je více úloh než spuštění runbooku v textu a ztěžuje sledování úloh. Nadřazený objekt může spustit více než jeden podřízený runbook asynchronně bez čekání na dokončení každého z nich. Pro toto paralelní spuštění, které volá podřízené runbooky vložené, musí nadřazený runbook používat paralelní klíčové slovo.

Výstup podřízeného runbooku se kvůli načasování nevrátí do nadřazeného runbooku spolehlivě. Také , $VerbosePreference$WarningPreferencea další proměnné nemusí být rozšířeny do podřízených runbooků. Abyste se těmto problémům vyhnuli, můžete spustit podřízené runbooky jako samostatné úlohy Automation pomocí Start-AzAutomationRunbook parametru Wait . Tato technika blokuje nadřazený runbook, dokud se podřízený runbook nedokončí.

Pokud nechcete, aby byl nadřazený runbook blokovaný při čekání, můžete podřízený runbook spustit bez Start-AzAutomationRunbook parametru Wait . V takovém případě musí runbook použít Rutinu Get-AzAutomationJob k čekání na dokončení úlohy. K načtení výsledků musí také použít Get-AzAutomationJobOutput a Get-AzAutomationJobOutputRecord .

Parametry podřízeného runbooku spuštěného s rutinou se poskytují jako hashovací tabulka, jak je popsáno v parametrech runbooku. Můžete použít pouze jednoduché datové typy. Pokud má runbook parametr se složitým datovým typem, musí se volat jako vložený.

Kontext předplatného může být ztracen, když spouštíte podřízené runbooky jako samostatné úlohy. Aby podřízený runbook spouštět rutiny modulu Az v konkrétním předplatném Azure, musí se podřízená rutina ověřit v tomto předplatném nezávisle na nadřazené sadě Runbook.

Pokud úlohy ve stejném účtu Automation fungují s více než jedním předplatným, může výběr předplatného v jedné úloze změnit kontext aktuálně vybraného předplatného pro jiné úlohy. Pokud se chcete této situaci vyhnout, použijte Disable-AzContextAutosave -Scope Process na začátku každého runbooku. Tato akce uloží kontext pouze do tohoto spuštění runbooku.

Příklad

Následující příklad spustí podřízený runbook s parametry a pak počká, až se dokončí pomocí Start-AzAutomationRunbook rutiny s parametrem Wait . Po dokončení podřízeného runbooku tento příklad shromažďuje výstup rutiny z podřízeného runbooku. Aby bylo možné tento skript použít Start-AzAutomationRunbook, musí se ověřit ve vašem předplatném Azure.

# 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

Pokud chcete, aby runbook běžel se spravovanou identitou přiřazenou systémem, nechejte kód tak, jak je. Pokud chcete použít spravovanou identitu přiřazenou uživatelem, pak:

  1. Z řádku 5 odeberte $AzureContext = (Connect-AzAccount -Identity).context,
  2. Nahraďte ho a $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
  3. Zadejte ID klienta.

Další kroky