Otomasyonda modüler runbook'lar oluşturma

diğer runbook'ların çağırmış olduğu ayrık bir işlevle yeniden kullanılabilir, modüler runbook'lar yazmak Azure Otomasyonu iyi bir uygulamadır. Üst runbook, gerekli işlevleri gerçekleştirmek için genellikle bir veya daha fazla alt runbook çağırır.

Alt runbook'u çağırmanın iki yolu vardır: satır içi veya cmdlet aracılığıyla. Aşağıdaki tabloda, senaryolarınız için hangi yolun daha iyi olduğuna karar vermenize yardımcı olacak farklılıklar özetlemektedir.

Satır içi Cmdlet
İş Alt runbook'lar üst runbook'la aynı işte çalışır. Alt runbook için ayrı bir iş oluşturulur.
Yürütme Üst runbook devam etmeden önce alt runbook'un bitmesini bekler. Üst runbook, alt runbook başlatıldıktan hemen sonra devam eder veya üst runbook alt işin tamamlanmasını bekler.
Çıktı Üst runbook doğrudan alt runbook'tan çıktı alabilir. Üst runbook, alt runbook işinden çıktı almalıdır veya üst runbook doğrudan alt runbook'tan çıkış alabilir.
Parametreler Alt runbook parametre değerleri ayrı ayrı belirtilir ve herhangi bir veri türünü kullanabilir. Alt runbook parametrelerinin değerlerinin tek bir karma tablo halinde birleştirilmesi gerekir. Bu karma tablo yalnızca JSON serileştirme kullanan basit, dizi ve nesne veri türlerini içerebilir.
Otomasyon Hesabı Üst runbook, aynı Otomasyon hesabında yalnızca bir alt runbook kullanabilir. Üst runbook'lar herhangi bir Otomasyon hesabından, aynı Azure aboneliğinden ve hatta bağlantınız olan farklı bir abonelikten alt runbook kullanabilir.
Yayımlama Üst runbook yayımlanmadan önce bir alt runbook yayımlanmalıdır. Üst runbook başlatılmadan önce her zaman bir alt runbook yayımlanır.

Satır içi yürütmeyi kullanarak bir alt runbook çağırma

Bir runbook'u başka bir runbook'tan satır içi olarak çağırmak için runbook'un adını kullanın ve bir etkinlik veya cmdlet'i kullandığınız gibi parametreleri için değerler sağlayın. Aynı Otomasyon hesabındaki tüm runbook'lar bu şekilde kullanılmak üzere diğer tüm runbook'lar tarafından kullanılabilir. Üst runbook, sonraki satıra geçmeden önce alt runbook'un bitmesini bekler ve tüm çıkışlar doğrudan üst öğeye döner.

Bir runbook'u satır içi olarak çağırdığınızda, üst runbook ile aynı işte çalışır. Alt runbook'un iş geçmişinde herhangi bir gösterge yoktur. Alt runbook'tan gelen tüm özel durumlar ve akış çıkışları üst öğeyle ilişkilendirilir. Bu davranış daha az işe neden olur ve bunların izlenmesini ve sorun gidermesini kolaylaştırır.

Bir runbook yayımlandığında, çağırdığı tüm alt runbook'lar zaten yayımlanmış olmalıdır. Bunun nedeni, Azure Otomasyonu bir runbook derlerken alt runbook'larla bir ilişkilendirme oluşturmasıdır. Alt runbook'lar henüz yayımlanmadıysa, üst runbook düzgün yayımlanıyor gibi görünür ancak başlatıldığında bir özel durum oluşturur.

Özel durum alırsanız, alt runbook'lara düzgün başvurmak için üst runbook'u yeniden yayımlayabilirsiniz. İlişkilendirme zaten oluşturulduğundan herhangi bir alt runbook değiştirilirse üst runbook'u yeniden yayımlamanız gerekmez.

Satır içi olarak adlandırılan bir alt runbook'un parametreleri karmaşık nesneler de dahil olmak üzere herhangi bir veri türünde olabilir. Runbook'u Azure portalını veya Start-AzAutomationRunbook cmdlet'ini kullanarak başlattığınızda olduğu gibi JSON serileştirmesi yoktur.

Runbook türleri

Şu anda PowerShell 5.1 desteklenmektedir ve yalnızca belirli runbook türleri birbirini çağırabilir:

  • PowerShell runbook'u ve grafik runbook'u birbirini satır içi olarak çağırabilir çünkü her ikisi de PowerShell tabanlıdır.
  • PowerShell İş Akışı runbook'u ve grafik PowerShell İş Akışı runbook'u birbirini satır içi olarak çağırabilir çünkü her ikisi de PowerShell İş Akışı tabanlıdır.
  • PowerShell türleri ve PowerShell İş Akışı türleri birbirini satır içi olarak çağıramaz. kullanmaları Start-AzAutomationRunbookgerekir.

Önemli

Kullanarak .\child-runbook.ps1 alt betiklerin yürütülmesi PowerShell 7.1 ve PowerShell 7.2'de desteklenmez Geçici çözüm: Üst runbook'tan başka bir runbook başlatmak için (iç cmdlet) veya Start-AzAutomationRunbook (Az.Automation modülünden) kullanın Start-AutomationRunbook .

Runbook'ların yayımlama sırası yalnızca PowerShell İş Akışı ve grafik PowerShell İş Akışı runbook'ları için önemlidir.

Runbook'unuz satır içi yürütmeyi kullanarak bir grafik veya PowerShell İş Akışı alt runbook'unu çağırdığında runbook'un adını kullanır. Betiğin yerel dizinde olduğunu belirtmek için adın ile .\\ başlaması gerekir.

Örnek

Aşağıdaki örnek karmaşık bir nesne, bir tamsayı değeri ve Boole değeri kabul eden bir test alt runbook'u başlatır. Alt runbook'un çıkışı bir değişkene atanır. Bu durumda, alt runbook bir PowerShell İş Akışı runbook'udur.

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

Aşağıda aynı örnek verilmiştir ancak alt öğe olarak powershell runbook'u kullanılır.

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

Cmdlet kullanarak bir alt runbook başlatma

Önemli

Runbook'unuz cmdlet'ini Start-AzAutomationRunbook parametresiyle Wait kullanarak bir alt runbook çağırırsa ve alt runbook bir nesne sonucu üretirse, işlem bir hatayla karşılaşabilir. Hatayı geçici olarak çözmek için bkz . Nesne çıkışına sahip alt runbook'lar. Bu makalede, Get-AzAutomationJobOutputRecord cmdlet'ini kullanarak sonuçları yoklama mantığını nasıl uygulayabileceğiniz gösterilmektedir.

Windows PowerShell ile runbook başlatma başlığında açıklandığı gibi bir runbook başlatmak için kullanabilirsinizStart-AzAutomationRunbook. Bu cmdlet için iki kullanım modu vardır:

  • Cmdlet, alt runbook için iş oluşturulduğunda iş kimliğini döndürür.
  • Cmdlet, alt iş bitene kadar bekler ve alt runbook'tan çıktıyı döndürür. Betiğiniz parametresini Wait belirterek bu modu etkinleştirir.

Bir alt runbook'tan alınan iş, üst runbook işinden ayrı olarak çalıştırılan bir cmdlet ile başlar. Bu davranış runbook'u satır içinde başlatmaktan daha fazla işle sonuçlanıp işlerin izlenmesini zorlaştırır. Üst öğe, her birinin bitimini beklemeden zaman uyumsuz olarak birden fazla alt runbook başlatabilir. Alt runbook'ları satır içinde çağıran bu paralel yürütme için, üst runbook paralel anahtar sözcüğünü kullanmalıdır.

Alt runbook çıkışı, zamanlama nedeniyle üst runbook'a güvenilir bir şekilde geri dönmez. Ayrıca, $VerbosePreference, $WarningPreferenceve diğer değişkenler alt runbook'lara yayılmayabilir. Bu sorunları önlemek için parametresini Wait kullanarak Start-AzAutomationRunbook alt runbook'ları ayrı Otomasyon işleri olarak başlatabilirsiniz. Bu teknik, alt runbook tamamlanana kadar üst runbook'u engeller.

Üst runbook'un beklerken engellenmesini istemiyorsanız, parametresi olmadan kullanarak Start-AzAutomationRunbook alt runbook'u Wait başlatabilirsiniz. Bu durumda runbook'unuzun işin tamamlanmasını beklemek için Get-AzAutomationJob kullanması gerekir. Sonuçları almak için Get-AzAutomationJobOutput ve Get-AzAutomationJobOutputRecord da kullanılmalıdır.

Bir cmdlet ile başlatılan bir alt runbook'un parametreleri, Runbook parametrelerinde açıklandığı gibi karma tablo olarak sağlanır. Yalnızca basit veri türlerini kullanabilirsiniz. Runbook karmaşık veri türüne sahip bir parametreye sahipse, satır içi olarak çağrılmalıdır.

Alt runbook'ları ayrı işler olarak başlatırken abonelik bağlamı kaybolabilir. Alt runbook'un belirli bir Azure aboneliğinde Az modülü cmdlet'lerini yürütmesi için alt öğe, üst runbook'dan bağımsız olarak bu abonelikte kimlik doğrulaması yapmalıdır.

Aynı Otomasyon hesabındaki işler birden fazla abonelikle çalışıyorsa, bir işte abonelik seçmek diğer işler için seçili durumdaki abonelik bağlamını değiştirebilir. Bu durumu önlemek için her runbook'un başında kullanın Disable-AzContextAutosave -Scope Process . Bu eylem, bağlamı yalnızca bu runbook yürütmesine kaydeder.

Örnek

Aşağıdaki örnek, parametrelerle bir alt runbook başlatır ve ardından parametresiyle Wait cmdlet'ini Start-AzAutomationRunbook kullanarak bitmesini bekler. Alt runbook tamamlandıktan sonra örnek, alt runbook'tan cmdlet çıktısı toplar. kullanmak Start-AzAutomationRunbookiçin betiğin Azure aboneliğinizde kimlik doğrulaması yapması gerekir.

# 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

Runbook'un sistem tarafından atanan yönetilen kimlikle yürütülmesini istiyorsanız, kodu olduğu gibi bırakın. Kullanıcı tarafından atanan bir yönetilen kimlik kullanmayı tercih ediyorsanız:

  1. 5. satırdan öğesini kaldırın $AzureContext = (Connect-AzAccount -Identity).context.
  2. değerini ve ile $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).contextdeğiştirin
  3. İstemci Kimliğini girin.

Sonraki adımlar