Otomasyon'da modüler runbook'lar oluşturma
Diğer runbook'ların çağır Azure Otomasyonu ayrı bir işleve sahip yeniden kullanılabilir, modüler runbook'lar yazmak iyi bir uygulamadır. Üst runbook, gerekli işlevleri gerçekleştirmek için genellikle bir veya daha fazla alt runbook'a çağrır.
Alt runbook'ları ç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 yol daha iyi olduğuna karar vermenizi yardımcı olacak farklar özetlenmiştir.
| 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 bitip bitmeden önce bitip bitmeden önce beklemesi gerekir. | Üst runbook, alt runbook başlatıldıktan hemen sonra devam eder veya üst runbook alt işin bitip bitimini bekler. |
| Çıkış | Üst runbook, alt runbook'tan doğrudan çıkış elde olabilir. | Üst runbook, alt runbook işinin çıktısını alsa da üst runbook, alt runbook'tan doğrudan çıkış alabilir. |
| Parametreler | Alt runbook parametre değerleri ayrı ayrı belirtilir ve herhangi bir veri türünü kullanabilir. | Alt runbook parametrelerinin değerleri tek bir karma tablosu olarak birleştir gerekir. Bu karma tablosu 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 bir alt runbook kullanabilir. |
| Yayımlama | Üst runbook yayımdan önce bir alt runbook yayımlanır. | Üst runbook başlamadan önce bir alt runbook yayımlanır. |
Satır içi yürütmeyi kullanarak alt runbook çağırma
Başka bir runbook'tan satır içi bir runbook'a çağrı yapmak için, tıpkı bir etkinlik veya cmdlet'i gibi runbook'un adını kullanın ve parametreleri için değerler girin. Aynı Otomasyon hesabı içinde yer alan tüm runbook'lar, diğer tüm runbook'lar tarafından bu şekilde kullanılabilir. Üst runbook, bir sonraki satıra taşınmadan önce alt runbook'un bitip bitip tüm çıkışlar doğrudan üst runbook'a döner.
Satır içi bir runbook çağırarak üst runbook ile aynı işte çalışır. Alt runbook'un iş geçmişinde bir gösterge yoktur. Alt runbook'tan gelen tüm özel durumlar ve akış çıkışları üst runbook ile ilişkilendirildi. Bu davranış daha az iş ile sonuç verir ve bunları izleme ve sorun gidermeyi kolaylaştırır.
Bir runbook yayım olduğunda, çağıran tüm alt runbook'lar zaten yayımlanmış olması gerekir. Bunun nedeni, Azure Otomasyonu runbook'ları derlediği zaman alt runbook'larla bir ilişki oluşturmasıdır. Alt runbook'lar henüz yayım oluşturulmamışsa, üst runbook düzgün bir şekilde yayımlanır ancak başlatıldıklarından bir özel durum oluşturur.
Bir özel durumla karşısanız, alt runbook'lara düzgün bir şekilde başvuracak şekilde üst runbook'un yeniden yayımlandırabilirsiniz. İlişki zaten oluşturulmuş olduğundan herhangi bir alt runbook değiştirilirse üst runbook'ları yeniden yayımlamanız gerek yok.
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 veya Start-AzAutomationRunbook cmdlet'ini kullanarak başlatan bir JSONserileştirmesi yoktur.
Runbook türleri
Şu anda PowerShell 5.1 ve 7.1 (önizleme) de desteklene ve yalnızca belirli runbook türleri birbirini çağırabilirsiniz:
- Her ikisi de PowerShell tabanlı olduğundan, powershell runbook'ları ve grafik runbook'lar birbirini satır içi olarak çağırabilirsiniz.
- PowerShell İş Akışı tabanlı olduğundan bir PowerShell İş Akışı runbook'un ve grafik PowerShell İş Akışı runbook'ları birbirini satır içi olarak çağırabilirsiniz.
- PowerShell türleri ve PowerShell İş Akışı türleri birbirini satır içi olarak çağıramaz. kullanmaları
Start-AzAutomationRunbookgerekir.
Runbook'ların yayımlama sırası yalnızca PowerShell İş Akışı ve grafik PowerShell İş Akışı runbook'ları için önemlidir.
Runbook'uz satır içi yürütmeyi kullanarak grafik veya PowerShell İş Akışı alt runbook'larını çağırıyorsa 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, 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'larıdır.
$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = PSWF-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true
Aynı örnek aşağıdaki gibidir ancak alt uygulama olarak PowerShell runbook'ları kullanılarak 2.
$vm = Get-AzVM -ResourceGroupName "LabRG" -Name "MyVM"
$output = .\PS-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true
Cmdlet kullanarak alt runbook başlatma
Önemli
Runbook'uz cmdlet'ini parametresiyle kullanarak bir alt runbook çağırıyorsa ve alt runbook bir nesne sonucu üretirse, işlem Start-AzAutomationRunbook Wait bir hatayla karşılaşabilirsiniz. Hataya bir son olarak, bkz. Nesne çıkışına sahip alt runbook'lar. Bu makalede Get-AzAutomationJobOutputRecord cmdlet'ini kullanarak sonuçları yoklama mantığının nasıl uygulandığını gösterir.
Start-AzAutomationRunbookrunbook'ları ile runbook başlatma konusunda açıklandığı gibi bir runbook'Windows PowerShell. 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 belirterek bu modu
Waitsağlar.
Bir alt runbook'tan gelen iş, üst runbook işlerinden ayrı olarak bir cmdlet ile başladı. Bu davranış runbook'un satır içi olarak başlatılamayarak daha fazla iş ile sonuç verir ve işlerin daha zor takip şekilde izlerini zorlaştırabilirsiniz. Üst, her birinin bitip bitmeden birden fazla alt runbook'u zaman uyumsuz olarak başlat olabilir. Alt runbook'ları satır içinde çağıran bu paralel yürütme için üst runbook'un parallel anahtar sözcüğünü kullanması gerekir.
Alt runbook çıktısı, zamanlama nedeniyle üst runbook'a güvenilir bir şekilde geri dönmez. Ayrıca, $VerbosePreference $WarningPreference , ve diğer değişkenler alt runbook'lara yayılmamış olabilir. Bu sorunları önlemek için, parametresiyle kullanarak alt runbook'ları ayrı Otomasyon işleri Start-AzAutomationRunbook olarak Wait başlatabilirsiniz. Bu teknik, alt runbook tamam olana kadar üst runbook'un engeller.
Üst runbook'un beklerken engellenmiş olması istemiyorsanız, parametresi olmadan kullanarak alt Start-AzAutomationRunbook runbook'a Wait başlayabilirsiniz. Bu durumda, işin tamamlanmasını beklemek için runbook'un Get-AzAutomationJob'ı kullanması gerekir. Sonuçları almak için Get-AzAutomationJobOutput ve Get-AzAutomationJobOutputRecord da kullan gerekir.
Cmdlet ile başlayan bir alt runbook'un parametreleri, Runbookparametrelerinde açıklandığı gibi karma tablosu olarak sağlanır. Yalnızca basit veri türlerini kullanabilirsiniz. Runbook'un karmaşık veri türüne sahip bir parametresi varsa, satır içi olarak çağrılsı gerekir.
Alt runbook'ları ayrı işler olarak başlatacaksanız abonelik bağlamı kaybolabilir. Alt runbook'un Belirli bir Azure aboneliğinde Az modülü cmdlet'lerini yürütmesi için alt runbook'un üst runbook'dan bağımsız olarak bu abonelikte kimlik doğrulaması yapmaları gerekir.
Aynı Otomasyon hesabı içindeki işler birden fazla abonelikle çalışıyorsa, bir işte bir abonelik seçmek diğer işler için o anda seçili olan abonelik bağlamını değiştirebilir. Bu durumu önlemek için her Disable-AzContextAutosave -Scope Process runbook'un başında kullanın. Bu eylem yalnızca bağlamı bu runbook yürütmeye kaydeder.
Örnek
Aşağıdaki örnek, parametreleri olan bir alt runbook başlatır ve ardından Start-AzAutomationRunbook parametresiyle cmdlet'ini kullanarak bitip bitimini Wait bekler. Alt runbook tamam olduktan sonra örnek, alt runbook'tan cmdlet çıktısını toplar. kullanmak için Start-AzAutomationRunbook betiğin Azure aboneliğiniz için kimlik doğrulaması yapmaları 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ütmesi için kodu olduğu gibi bırakın. Kullanıcı tarafından atanan yönetilen kimlik kullanmayı tercih ederseniz:
-
- satırdan
$AzureContext = (Connect-AzAccount -Identity).contextkaldırın,
- satırdan
- , ve
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).contextile değiştirin - İstemci Kimliğini girin.
Sonraki adımlar
- Runbook'larınızı çalıştırmak için bkz. Runbook'ta Azure Otomasyonu.
- Runbook işlemi izlemek için bkz. Runbook çıktısı ve iletileri Azure Otomasyonu.