Azure Otomasyonu 'nda runbook 'ları yönetme

Yeni bir tane oluşturarak veya var olan bir dosyayı ya da runbook galerisindenbir runbook 'u içeri aktararak, Azure Otomasyonu 'na bir runbook ekleyebilirsiniz. Bu makalede, runbook tasarımıyla ilgili bir runbook 'u ve önerilen desenleri ve en iyi uygulamaları yönetmeye yönelik bilgiler sağlanmaktadır. Azure Otomasyonu Için runbook ve modül galerilerindetopluluk runbook 'larına ve modüllerine erişmenin tüm ayrıntılarını bulabilirsiniz.

Runbook oluşturma

Azure portal veya PowerShell kullanarak Azure Otomasyonu 'nda yeni bir runbook oluşturun. Runbook oluşturulduktan sonra, içindeki bilgileri kullanarak düzenleyebilirsiniz.

Azure portal runbook oluşturma

  1. Azure portalındaoturum açın.
  2. Otomasyon hesaplarını arayın ve seçin.
  3. Otomasyon hesapları sayfasında, listeden Otomasyon hesabınızı seçin.
  4. Otomasyon hesabından, runbook 'ların listesini açmak için Işlem Otomasyonu ' nun altındaki runbook 'lar ' ı seçin.
  5. Runbook oluştur ' a tıklayın.
    1. Runbook 'u adlandırın.
    2. Runbook türü açılır listesinden. Türünüseçin. Runbook adı bir harfle başlamalıdır ve harfler, rakamlar, alt çizgiler ve kısa çizgiler içerebilir
    3. Çalışma zamanı sürümünü seçin
    4. Geçerli açıklamayı girin
  6. Runbook oluşturmak için Oluştur’a tıklayın.

PowerShell ile runbook oluşturma

Boş bir runbook oluşturmak için New-AzAutomationRunbook cmdlet 'ini kullanın. Typeİçin tanımlanan runbook türlerinden birini belirtmek için parametresini kullanın New-AzAutomationRunbook .

Aşağıdaki örnek, yeni bir boş runbook oluşturmayı gösterir.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'NewRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
}
New-AzAutomationRunbook @params

Runbook 'u içeri aktarma

Kendi runbook 'unuzu oluşturmak için bir PowerShell veya PowerShell Iş akışı (.ps1) betiğini, bir grafik runbook 'unu (. graphrunbook) veya Python 2 veya Python 3 betiğini (**.**çıgrafı) içeri aktarabilirsiniz. İçeri aktarma sırasında oluşturulan runbook 'un türünü belirtin ve aşağıdaki noktalara dikkat edin.

  • Bir PowerShell runbook 'Una veya PowerShell iş akışı runbook'unda iş akışı içermeyen bir .ps1 dosyasını içeri aktarabilirsiniz. Bir PowerShell Iş akışı runbook 'una içeri aktarırsanız, bir iş akışına dönüştürülür. Bu durumda, yapılan değişiklikleri anlatmak için Runbook 'a açıklamalar dahildir.

  • PowerShell iş akışı runbook 'unayalnızca PowerShell iş akışı içeren bir .ps1 dosyasını içeri aktarabilirsiniz. Dosya birden çok PowerShell iş akışı içeriyorsa içeri aktarma başarısız olur. Her bir iş akışını kendi dosyasına kaydetmeniz ve ayrı ayrı içeri aktarmanız gerekir.

  • PowerShell betik altyapısı bunu tanıyamadığı için PowerShell Iş akışını içeren bir .ps1 dosyasını PowerShell runbook 'unaiçeri aktarmayın.

  • Yalnızca bir . graphrunbook dosyasını yeni bir grafik runbook 'unaaktarın.

Azure portal runbook 'u içeri aktarma

Bir betik dosyasını Azure Otomasyonu 'na aktarmak için aşağıdaki yordamı kullanabilirsiniz.

Not

Portalı kullanarak yalnızca bir .ps1 dosyasını PowerShell iş akışı runbook 'una aktarabilirsiniz.

  1. Azure portal Otomasyon hesaplarını arayıp seçin.
  2. Otomasyon hesapları sayfasında, listeden Otomasyon hesabınızı seçin.
  3. Otomasyon hesabından, runbook 'ların listesini açmak için Işlem Otomasyonu ' nun altındaki runbook 'lar ' ı seçin.
  4. Runbook 'U Içeri Aktar ' a tıklayın. Aşağıdaki seçeneklerden birini seçebilirsiniz:
    1. Dosya Için tarama -yerel makinenizden bir dosya seçer.
    2. Galeriye gözatın -Galeri 'den mevcut bir runbook 'a gözatabilir ve buradan seçim yapabilirsiniz.
  5. Dosyayı seçin.
  6. Ad alanı etkinleştirilirse, runbook adını değiştirme seçeneğiniz vardır. Ad bir harfle başlamalıdır ve harfler, rakamlar, alt çizgiler ve kısa çizgiler içerebilir.
  7. Runbook türü otomatik olarak doldurulur, ancak ilgili kısıtlamaları hesaba ayırarak türü değiştirebilirsiniz.
  8. Çalışma zamanı sürümü otomatik olarak doldurulur veya açılan listeden sürümü seçer.
  9. İçeri Aktar’a tıklayın. Yeni runbook, Otomasyon hesabı için Runbook 'lar listesinde görüntülenir.
  10. Runbook 'u çalıştırmadan önce yayımlamanız gerekir.

Not

Grafik runbook 'unu içeri aktardıktan sonra, başka bir türe dönüştürebilirsiniz. Ancak, grafik bir runbook 'u metin temelli bir runbook 'a dönüştüremezsiniz.

PowerShell ile runbook 'u içeri aktarma

Bir betik dosyasını taslak runbook olarak içeri aktarmak için Import-AzAutomationRunbook cmdlet 'ini kullanın. Runbook zaten mevcutsa, parametresini cmdlet ile kullanmadığınız müddetçe içeri aktarma başarısız olur Force .

Aşağıdaki örnek bir runbook 'a bir betik dosyasının nasıl içeri aktarılacağını gösterir.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    Name                  = 'Sample_TestRunbook'
    ResourceGroupName     = 'MyResourceGroup'
    Type                  = 'PowerShell'
    Path                  = 'C:\Runbooks\Sample_TestRunbook.ps1'
}
Import-AzAutomationRunbook @params

Kaynakları işle

Runbook 'ağınız bir kaynakoluşturursa, betiği oluşturmayı denemeden önce kaynağın zaten mevcut olup olmadığını kontrol etmelidir. Temel bir örnek aşağıda verilmiştir.

$vmName = 'WindowsVM1'
$rgName = 'MyResourceGroup'
$myCred = Get-AutomationPSCredential 'MyCredential'

$vmExists = Get-AzResource -Name $vmName -ResourceGroupName $rgName
if (-not $vmExists) {
    Write-Output "VM $vmName does not exist, creating"
    New-AzVM -Name $vmName -ResourceGroupName $rgName -Credential $myCred
} else {
    Write-Output "VM $vmName already exists, skipping"
}

Etkinlik günlüğünden ayrıntıları alma

Otomasyon hesabı için etkinlik günlüğünden runbook 'u başlatan kişi veya hesap gibi runbook ayrıntılarını alabilirsiniz. Aşağıdaki PowerShell örneği, son kullanıcının belirtilen runbook 'u çalıştırmasını sağlar.

$rgName = 'MyResourceGroup'
$accountName = 'MyAutomationAccount'
$runbookName = 'MyRunbook'
$startTime = (Get-Date).AddDays(-1)

$params = @{
    ResourceGroupName = $rgName
    StartTime         = $startTime
}
$JobActivityLogs = (Get-AzLog @params).Where( { $_.Authorization.Action -eq 'Microsoft.Automation/automationAccounts/jobs/write' })

$JobInfo = @{}
foreach ($log in $JobActivityLogs) {
    # Get job resource
    $JobResource = Get-AzResource -ResourceId $log.ResourceId

    if ($null -eq $JobInfo[$log.SubmissionTimestamp] -and $JobResource.Properties.Runbook.Name -eq $runbookName) {
        # Get runbook
        $jobParams = @{
            ResourceGroupName     = $rgName
            AutomationAccountName = $accountName
            Id                    = $JobResource.Properties.JobId
        }
        $Runbook = Get-AzAutomationJob @jobParams | Where-Object RunbookName -EQ $runbookName

        # Add job information to hashtable
        $JobInfo.Add($log.SubmissionTimestamp, @($Runbook.RunbookName, $Log.Caller, $JobResource.Properties.jobId))
    }
}
$JobInfo.GetEnumerator() | Sort-Object Key -Descending | Select-Object -First 1

İlerleme izleme

Runbook 'larınızın daha kolay bir şekilde yeniden kullanılabilmesi ve yeniden başlatılması için, runbook 'larınızı doğası gereği modüler olarak yazmak iyi bir uygulamadır. Bir runbook 'ta ilerlemeyi izlemek, sorunlar varsa runbook mantığının doğru şekilde yürütüldüğünü sağlar.

Bir runbook 'un ilerlemesini depolama hesabı, veritabanı veya paylaşılan dosyalar gibi bir dış kaynak kullanarak izleyebilirsiniz. İlk olarak gerçekleştirilen son eylemin durumunu denetlemek için Runbook 'ınızdaki mantığı oluşturun. Daha sonra, denetim sonuçlarına göre, mantıksal runbook 'taki belirli görevleri atlayabilir veya devam edebilir.

Eş zamanlı işleri engelle

Bazı runbook 'lar aynı anda birden çok iş üzerinde çalışıyorsa Strangely davranır. Bu durumda, bir runbook 'un zaten çalışmakta olan bir işin olup olmadığını belirlemede Logic uygulaması için önem taşır. Temel bir örnek aşağıda verilmiştir.

# Ensures you do not inherit an AzContext in your runbook
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

# Check for already running or new runbooks
$runbookName = "runbookName"
$resourceGroupName = "resourceGroupName"
$automationAccountName = "automationAccountName"

$jobs = Get-AzAutomationJob -ResourceGroupName $resourceGroupName `
    -AutomationAccountName $automationAccountName `
    -RunbookName $runbookName `
    -DefaultProfile $AzureContext

# Check to see if it is already running
$runningCount = ($jobs.Where( { $_.Status -eq 'Running' })).count

if (($jobs.Status -contains 'Running' -and $runningCount -gt 1 ) -or ($jobs.Status -eq 'New')) {
    # Exit code
    Write-Output "Runbook $runbookName is already running"
    exit 1
} else {
    # Insert Your code here
    Write-Output "Runbook $runbookName is not running"
}

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

    1. satırdan, $AzureContext = (Connect-AzAccount -Identity).context öğesini kaldırın
  1. İle değiştirin $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context ve
  2. Istemci KIMLIĞINI girin.

Zamana bağlı bir betikte geçici hataları işleme

Runbook 'larınızın, yeniden başlatılmasına veya başarısız olmasına neden olabilecek geçici hatalar da dahil olmak üzere sağlam ve hatalarıişleyebilme yeteneğine sahip olması gerekir. Bir runbook başarısız olursa, Azure Otomasyonu bunu yeniden dener.

Runbook 'larınız normalde bir zaman kısıtlaması içinde çalışıyorsa, yürütme süresini denetlemek için komut dosyasının Logic uygular. Bu denetim, yalnızca belirli zamanlarda başlatma, kapatma veya genişleme gibi işlemlerin çalıştırılmasını sağlar.

Not

Azure korumalı alan işlemindeki yerel saat UTC olarak ayarlanır. Runbook 'larınızda tarih ve saat hesaplamaları bu olguyu göz önünde bulundurmanız gerekir.

Birden fazla abonelik ile çalışma

Runbook 'larınızın aboneliklerleçalışabilebilmesi gerekir. Örneğin, birden çok aboneliği işlemek için Runbook devre dışı bırak-AzContextAutosave cmdlet 'ini kullanır. Bu cmdlet, kimlik doğrulama bağlamının aynı korumalı alanda çalışan başka bir runbook 'tan alınmamasını sağlar.

# Ensures you do not inherit an AzContext in your runbook
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

$childRunbookName = 'childRunbookDemo'
$resourceGroupName = "resourceGroupName"
$automationAccountName = "automationAccountName"

$startParams = @{
    ResourceGroupName     = $resourceGroupName
    AutomationAccountName = $automationAccountName
    Name                  = $childRunbookName
    DefaultProfile        = $AzureContext
}
Start-AzAutomationRunbook @startParams

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

    1. satırdan, $AzureContext = (Connect-AzAccount -Identity).context öğesini kaldırın
  1. İle değiştirin $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context ve
  2. Istemci KIMLIĞINI girin.

Özel bir komut dosyasıyla çalışma

Not

Normalde Log Analytics Aracısı yüklü olan konakta özel komut dosyaları ve Runbook 'lar çalıştıramazsınız.

Özel bir komut dosyası kullanmak için:

  1. Bir Otomasyon hesabı oluşturun.
  2. Karma Runbook Worker rolünü dağıtın.
  3. Bir Linux makinesinde, yükseltilmiş ayrıcalıklara sahip olmanız gerekir. İmza denetimlerinikapatmak için oturum açın.

Bir runbook'u test etme

Bir runbook 'u test ettiğinizde taslak sürümü yürütülür ve gerçekleştirdiği tüm işlemler tamamlanır. İş geçmişi oluşturulmaz, ancak Çıkış ve uyarı ve hata akışları Test çıkış bölmesinde görüntülenir. Ayrıntılı akışa Iletiler yalnızca VerbosePreference değişkeni olarak ayarlandıysa çıkış bölmesinde görüntülenir Continue .

Taslak sürümü çalıştırılsa da runbook hala normal şekilde yürütülür ve ortamdaki kaynaklara karşı herhangi bir eylem gerçekleştirir. Bu nedenle, yalnızca üretim dışı kaynaklarda runbook 'ları test etmelisiniz.

Her runbook türünü test etme yordamı aynıdır. Azure portal metin Düzenleyicisi ile grafik Düzenleyicisi arasındaki sınamada fark yoktur.

  1. Runbook 'un taslak sürümünü metin düzenleyicisinde veya grafik düzenleyicideaçın.
  2. Test sayfasını açmak için Test ' e tıklayın.
  3. Runbook 'ta parametreler varsa, bunlar sol bölmede listelenir ve burada test için kullanılacak değerleri sağlayabilirsiniz.
  4. bir karma Runbook çalışanındatesti çalıştırmak istiyorsanız, run Ayarlar öğesini karma çalışan olarak değiştirin ve hedef grubun adını seçin. Aksi takdirde, testi bulutta çalıştırmak için varsayılan Azure 'u saklayın.
  5. Testi başlatmak için Başlat ' a tıklayın.
  6. Test edilirken bir PowerShell Iş akışını veya grafik runbook 'u durdurmak veya askıya almak için Çıkış bölmesi altındaki düğmeleri kullanabilirsiniz. Bir runbook'u askıya aldığınızda, askıya alınmadan önce geçerli etkinliği tamamlar. Runbook askıya alındığında, durdurabilir veya yeniden başlatabilirsiniz.
  7. Çıkış bölmesinde runbook 'tan çıktıyı inceleyin.

Runbook yayımlama

Yeni bir runbook oluşturduğunuzda veya içeri aktardığınızda, çalıştırmadan önce onu yayımlamanız gerekir. Azure Otomasyonu 'ndaki her runbook 'un bir taslak sürümü ve yayımlanmış bir sürümü vardır. Yalnızca Yayımlanan sürüm çalıştırılabilir ve yalnızca Taslak sürüm düzenlenebilir. Yayımlanan sürüm Taslak sürümdeki herhangi bir değişiklikten etkilenmez. Taslak sürümü kullanılabilir hale getirilmeli hale geldiğinde, geçerli yayımlanmış sürümün üzerine bir taslak sürümü yazarak onu yayımlayın.

Azure portal runbook yayımlama

  1. Azure portal Otomasyon hesaplarını arayıp seçin.
  2. Otomasyon hesapları sayfasında, listeden Otomasyon hesabınızı seçin.
  3. Runbook 'u Otomasyon hesabınızda açın.
  4. Düzenle’ye tıklayın.
  5. Yayımla ' ya tıklayın ve doğrulama iletisine yanıt olarak Evet ' i seçin.

PowerShell kullanarak runbook yayımlama

Runbook 'unuzu yayımlamak için Publish-AzAutomationRunbook cmdlet 'ini kullanın.

$accountName = "MyAutomationAccount"
$runbookName = "Sample_TestRunbook"
$rgName = "MyResourceGroup"

$publishParams = @{
    AutomationAccountName = $accountName
    ResourceGroupName     = $rgName
    Name                  = $runbookName
}
Publish-AzAutomationRunbook @publishParams

Azure portalda runbook zamanlama

Runbook 'u yayımlandığında, işlem için zamanlayabilirsiniz:

  1. Azure portal Otomasyon hesaplarını arayıp seçin.
  2. Otomasyon hesapları sayfasında, listeden Otomasyon hesabınızı seçin.
  3. Runbook listenizden runbook 'u seçin.
  4. Kaynaklar altında zamanlamalar ' ı seçin.
  5. Zamanlama Ekle ' yi seçin.
  6. Runbook 'U zamanla bölmesinde, runbook 'Una bir zamanlama bağla' yı seçin.
  7. Zamanlama bölmesinde Yeni bir zamanlama oluştur ' a tıklayın.
  8. Yeni zamanlama bölmesine bir ad, açıklama ve diğer parametreleri girin.
  9. Zamanlama oluşturulduktan sonra, vurgulayın ve Tamam' a tıklayın. Artık runbook 'ıza bağlanmalıdır.
  10. Runbook 'un durumunu bildirmek için posta kutunuzda bir e-posta arayın.

İş durumlarını al

Azure portal durumları görüntüleme

Azure Automation 'da iş işleme ayrıntıları işler' de verilmiştir. Runbook işlerinizi görmeyi hazırsanız Azure portal kullanın ve otomasyon hesabınıza erişin. Sağ tarafta, Iş istatistikleri' nde tüm runbook işlerinin özetini görebilirsiniz.

İş Istatistikleri kutucuğu

Özet, yürütülen her iş için iş durumunun bir sayısını ve grafik temsilini görüntüler.

Kutucuğa tıkladığınızda, yürütülen tüm işlerin özetlenen listesini içeren Işler sayfası sunulmaktadır. Bu sayfada her iş için durum, Runbook adı, başlangıç saati ve tamamlanma zamanı gösterilir.

Işler sayfasının ekran görüntüsü.

İş listesini filtre işleri' ni seçerek filtreleyebilirsiniz. Belirli bir runbook 'u, iş durumunu veya açılan listeden bir seçimi filtreleyin ve arama için zaman aralığını belirtin.

İş durumunu filtrele

Alternatif olarak, belirli bir runbook için iş Özeti ayrıntılarını Otomasyon hesabınızdaki runbook 'Lar sayfasından seçip işler' i seçerek görüntüleyebilirsiniz. Bu eylem Işler sayfasını gösterir. Buradan, ayrıntılarını ve çıktısını görüntülemek için bir iş kaydına tıklayabilirsiniz.

Hatalar düğmesinin vurgulandığı Işler sayfasının ekran görüntüsü.

PowerShell kullanarak iş durumlarını alma

Bir runbook için oluşturulan işleri ve belirli bir işin ayrıntılarını almak için Get-AzAutomationJob cmdlet 'ini kullanın. Kullanarak bir runbook başlatırsanız Start-AzAutomationRunbook , sonuçta elde edilen işi döndürür. İş çıktısını almak için Get-Azautomationjoi put komutunu kullanın.

Aşağıdaki örnek, örnek bir runbook 'un son işini alır ve durumunu, runbook parametreleri için belirtilen değerleri ve iş çıktısını görüntüler.

$getJobParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Runbookname           = 'Test-Runbook'
}
$job = (Get-AzAutomationJob @getJobParams | Sort-Object LastModifiedDate -Desc)[0]
$job | Select-Object JobId, Status, JobParameters

$getOutputParams = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Id                    = $job.JobId
    Stream                = 'Output'
}
Get-AzAutomationJobOutput @getOutputParams

Aşağıdaki örnek, belirli bir işin çıkışını alır ve her bir kaydı döndürür. Kayıtlardan biri için bir özel durum varsa, komut dosyası değeri yerine özel durumu yazar. Bu davranış, özel durumlar çıkış sırasında normalde günlüğe kaydedilmeyeceğini daha fazla bilgi sağlayamadığı için yararlıdır.

$params = @{
    AutomationAccountName = 'MyAutomationAccount'
    ResourceGroupName     = 'MyResourceGroup'
    Stream                = 'Any'
}
$output = Get-AzAutomationJobOutput @params

foreach ($item in $output) {
    $jobOutParams = @{
        AutomationAccountName = 'MyAutomationAccount'
        ResourceGroupName     = 'MyResourceGroup'
        Id                    = $item.StreamRecordId
    }
    $fullRecord = Get-AzAutomationJobOutputRecord @jobOutParams

    if ($fullRecord.Type -eq 'Error') {
        $fullRecord.Value.Exception
    } else {
        $fullRecord.Value
    }
}

Sonraki adımlar