Mengelola runbook di Azure Automation

Anda dapat menambahkan runbook ke Azure Automation dengan membuat runbook baru atau mengimpor runbook yang sudah ada dari file atau Galeri Runbook. Artikel ini memberikan informasi untuk mengelola runbook dan pola yang direkomendasikan serta praktik terbaik dengan desain runbook. Anda dapat menemukan semua detail untuk mengakses runbook dan modul komunitas di Galeri Runbook dan modul untuk Azure Automation.

Membuat runbook

Buat runbook baru di Azure Automation menggunakan portal Microsoft Azure atau PowerShell. Setelah membuat runbook, Anda dapat mengeditnya menggunakan informasi di:

Membuat runbook di portal Microsoft Azure

  1. Masuk ke portal Microsoft Azure.
  2. Cari dan pilih Akun Automation.
  3. Di halaman Akun Automation, pilih akun Automation Anda dari daftar.
  4. Dari akun Azure Automation, pilih Runbook di bawah Proses Automation untuk membuka daftar runbook.
  5. Klik Buat runbook.
    1. Beri nama pada runbook.
    2. Dari drop-down Jenis runbook. Pilih jenisnya. Nama runbook harus dimulai dengan huruf dan dapat berisi huruf, angka, garis bawah, dan tanda hubung
    3. Pilih Versi runtime
    4. Masukkan Deskripsi yang berlaku
  6. Klik Buat untuk membuat runbook.

Membuat runbook dengan PowerShell

Gunakan cmdlet New-AzAutomationRunbook untuk membuat runbook kosong. Gunakan parameter Type untuk menentukan salah satu jenis runbook yang ditentukan untuk New-AzAutomationRunbook.

Contoh berikut menunjukkan cara membuat runbook kosong baru.

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

Mengimpor runbook

Anda dapat mengimpor skrip PowerShell atau PowerShell Workflow ( .ps1) , runbook grafis ( .graphrunbook), atau skrip Python 2 atau Python 3 ( .py) untuk membuat runbook Anda sendiri. Anda harus menentukan jenis runbook yang dibuat selama impor, dengan memperhatikan pertimbangan berikut.

  • Anda dapat mengimpor file .ps1 yang tidak berisi alur kerja ke dalam runbook PowerShell atau runbook PowerShell Workflow. Jika Anda mengimpornya ke dalam runbook PowerShell Workflow, runbook tersebut akan dikonversi menjadi alur kerja. Dalam hal ini, komentar akan disertakan dalam runbook untuk menjelaskan perubahan yang dibuat.

  • Anda hanya dapat mengimpor file .ps1 yang berisi PowerShell Workflow ke dalam runbook PowerShell Workflow. Jika file berisi beberapa alur kerja PowerShell, maka impor gagal. Anda harus menyimpan setiap alur kerja ke file-nya sendiri dan mengimpor masing-masing secara terpisah.

  • Jangan mengimpor file .ps1 yang berisi PowerShell Workflow ke dalam runbook PowerShell, karena mesin skrip PowerShell tidak dapat mengenalinya.

  • Hanya impor file .graphrunbook ke dalam runbook grafis baru.

Mengimpor runbook dari portal Microsoft Azure

Anda dapat menggunakan prosedur berikut ini untuk mengimpor file skrip ke Azure Automation.

Catatan

Anda hanya dapat mengimpor file .ps1 ke dalam runbook PowerShell Workflow menggunakan portal.

  1. Di portal Microsoft Azure, cari dan pilih Akun Automation.
  2. Di halaman Akun Automation, pilih akun Automation Anda dari daftar.
  3. Dari akun Azure Automation, pilih Runbook di bawah Proses Automation untuk membuka daftar runbook.
  4. Klik Impor runbook. Anda dapat memilih salah satu dari opsi berikut:
    1. Telusuri file - memilih file dari komputer lokal Anda.
    2. Telusuri dari Galeri - Anda dapat menelusuri dan memilih runbook yang ada dari galeri.
  5. Pilih file.
  6. Jika bidang Nama diaktifkan, Anda memiliki opsi untuk mengubah nama runbook. Nama harus dimulai dengan huruf dan dapat berisi huruf, angka, garis bawah, dan tanda hubung.
  7. Jenis runbook diisi secara otomatis, tetapi Anda dapat mengubah jenisnya setelah mempertimbangkan batasan yang berlaku.
  8. Versi runtime diisi secara otomatis atau memilih versi dari daftar drop-down.
  9. Klik Impor. Runbook baru akan muncul di daftar runbook untuk akun Automation.
  10. Anda harus menerbitkan runbook sebelum dapat menjalankannya.

Catatan

Setelah mengimpor runbook grafis, Anda dapat mengonversinya ke jenis lain. Namun, Anda tidak dapat mengonversi runbook grafis menjadi runbook tekstual.

Mengimpor runbook dengan PowerShell

Gunakan cmdlet Import-AzAutomationRunbook untuk mengimpor file skrip sebagai draf runbook. Jika runbook sudah ada, impor akan gagal kecuali Anda menggunakan parameter Force dengan cmdlet.

Contoh berikut menunjukkan cara mengimpor file skrip ke dalam runbook.

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

Menangani sumber daya

Jika runbook Anda membuat sumber daya, skrip harus memeriksa apakah sumber daya sudah ada sebelum mencoba membuatnya. Berikut ini contoh dasarnya.

$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"
}

Mengambil detail dari log Aktivitas

Anda dapat mengambil detail runbook, seperti orang atau akun yang memulai runbook, dari log Aktivitas untuk akun Automation. Contoh PowerShell berikut menyediakan pengguna terakhir untuk menjalankan runbook yang ditentukan.

$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

Lacak kemajuan

Ini adalah praktik yang baik untuk membuat runbook Anda bersifat modular dengan logika yang dapat digunakan kembali dan dimulai ulang dengan mudah. Melacak kemajuan dalam runbook memastikan bahwa logika runbook dijalankan dengan benar jika ada masalah.

Anda dapat melacak kemajuan runbook dengan menggunakan sumber eksternal, seperti akun penyimpanan, database, atau file bersama. Buat logika di runbook Anda untuk terlebih dahulu memeriksa status tindakan terakhir yang diambil. Kemudian, berdasarkan hasil pemeriksaan, logika dapat melewati atau melanjutkan tugas tertentu di runbook.

Mencegah pekerjaan bersamaan

Beberapa runbook akan berperilaku aneh jika menjalankan beberapa pekerjaan secara bersamaan. Dalam hal ini, runbook harus menerapkan logika untuk menentukan apakah sudah ada pekerjaan yang sedang berjalan. Berikut ini contoh dasarnya.

# 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"
}

Jika Anda ingin runbook dijalankan dengan identitas terkelola yang ditetapkan sistem, jangan ubah kodenya. Jika Anda lebih suka menggunakan identitas terkelola yang ditetapkan pengguna:

  1. Dari baris 5, hapus $AzureContext = (Connect-AzAccount -Identity).context,
  2. Ganti dengan $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, dan
  3. Masukkan ID klien.

Menangani kesalahan sementara dalam skrip yang bergantung pada waktu

Runbook Anda harus kuat dan mampu menangani kesalahan, termasuk kesalahan sementara yang dapat menyebabkan runbook tersebut dimulai ulang atau gagal. Jika runbook gagal, Azure Automation akan mencobanya lagi.

Jika runbook Anda biasanya berjalan dalam batasan waktu, minta skrip menerapkan logika untuk memeriksa waktu eksekusi. Pemeriksaan ini memastikan berjalannya operasi seperti mulai, matikan, atau perbesar hanya selama waktu tertentu.

Catatan

Waktu lokal pada proses sandbox Azure diatur ke UTC. Perhitungan untuk tanggal dan waktu di runbook Anda harus mempertimbangkan fakta ini.

Bekerja dengan beberapa langganan

Runbook Anda harus dapat bekerja dengan langganan. Misalnya, untuk menangani beberapa langganan, runbook menggunakan cmdlet Disable-AzContextAutosave. Cmdlet ini memastikan bahwa konteks autentikasi tidak diambil dari runbook lain yang berjalan di sandbox yang sama.

# 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

Jika Anda ingin runbook dijalankan dengan identitas terkelola yang ditetapkan sistem, jangan ubah kodenya. Jika Anda lebih suka menggunakan identitas terkelola yang ditetapkan pengguna:

  1. Dari baris 5, hapus $AzureContext = (Connect-AzAccount -Identity).context,
  2. Ganti dengan $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, dan
  3. Masukkan ID klien.

Bekerja dengan skrip khusus

Catatan

Anda biasanya tidak dapat menjalankan skrip khusus dan runbook di host dengan agen Analitik Log yang terinstal.

Untuk menggunakan skrip khusus:

  1. Membuat akun Azure Automation.
  2. Sebarkan peran Pekerja Runbook Hibrid.
  3. Anda memerlukan hak istimewa yang ditinggikan pada komputer Linux. Masuk untuk mematikan pemeriksaan tanda tangan.

Menguji runbook

Saat Anda menguji runbook, versi Draf akan dijalankan dan tindakan apa pun yang dilakukannya akan selesai. Tidak ada riwayat pekerjaan yang dibuat, tetapi output dan aliran peringatan dan kesalahan akan ditampilkan di panel Uji output. Pesan ke aliran verbose akan ditampilkan di panel Output hanya jika variabel VerbosePreference diatur ke Continue.

Meskipun versi Draf sedang dijalankan, runbook masih berjalan secara normal dan melakukan tindakan apa pun terhadap sumber daya di lingkungan. Untuk alasan ini, Anda hanya harus menguji runbook pada sumber daya non-produksi.

Prosedur untuk menguji setiap jenis runbook adalah sama. Tidak ada perbedaan dalam pengujian antara editor tekstual dan editor grafis di portal Microsoft Azure.

  1. Buka versi Draf dari runbook di editor tekstual atau editor grafis.
  2. Klik Uji untuk membuka halaman Pengujian.
  3. Jika runbook memiliki parameter, parameter tersebut tercantum di panel sebelah kiri, tempat Anda dapat memberikan nilai yang akan digunakan untuk pengujian.
  4. Jika Anda ingin menjalankan pengujian pada Hybrid Runbook Worker, ubah Pengaturan Jalankan ke Hybrid Worker, lalu pilih nama grup target. Jika tidak, pertahankan Azure default untuk menjalankan pengujian di cloud.
  5. Klik Mulai untuk memulai pengujian.
  6. Anda dapat menggunakan tombol di bawah panel Output untuk menghentikan atau menangguhkan PowerShell Workflow atau runbook grafis saat sedang diuji. Ketika Anda menangguhkan runbook, tindakan tersebut akan menyelesaikan aktivitas saat ini sebelum ditangguhkan. Setelah runbook ditangguhkan, Anda dapat menghentikannya atau memulai ulang.
  7. Periksa output dari runbook di panel Output.

Menerbitkan runbook

Saat Anda membuat atau mengimpor runbook baru, Anda harus menerbitkannya sebelum dapat menjalankannya. Setiap runbook di Azure Automation memiliki versi Draf dan versi yang Diterbitkan. Hanya versi yang Diterbitkan yang tersedia untuk dijalankan dan hanya versi Draf yang dapat diedit. Versi yang Diterbitkan tidak terpengaruh oleh perubahan apa pun pada versi Draf. Ketika versi Draf harus tersedia, Anda menerbitkannya, lalu menimpa versi yang Diterbitkan saat ini dengan versi Draf.

Menerbitkan runbook di portal Microsoft Azure

  1. Di portal Microsoft Azure, cari dan pilih Akun Automation.
  2. Di halaman Akun Automation, pilih akun Automation Anda dari daftar.
  3. Buka runbook di akun Automation Anda.
  4. Klik Edit.
  5. Klik Terbitkan lalu pilih Ya sebagai respons atas pesan verifikasi.

Menerbitkan runbook menggunakan PowerShell

Gunakan cmdlet Publish-AzAutomationRunbook untuk menerbitkan runbook Anda.

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

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

Menjadwalkan runbook di portal Microsoft Azure

Ketika runbook telah diterbitkan, Anda dapat menjadwalkannya untuk operasi:

  1. Di portal Microsoft Azure, cari dan pilih Akun Automation.
  2. Di halaman Akun Automation, pilih akun Automation Anda dari daftar.
  3. Pilih runbook dari daftar runbook Anda.
  4. Pilih Jadwal di bawah Sumber Daya.
  5. Pilih Tambahkan jadwal.
  6. Di panel Jadwalkan Runbook pilih Tautkan jadwal ke runbook Anda.
  7. Pilih Buat jadwal baru di panel Jadwal.
  8. Masukkan nama, deskripsi, dan parameter lainnya di panel Jadwal baru.
  9. Setelah membuat jadwal, sorot dan klik OK. Jadwal sekarang harus ditautkan dengan runbook Anda.
  10. Cari email di kotak mail Anda tentang pemberitahuan status runbook.

Mendapatkan status pekerjaan

Melihat status di portal Microsoft Azure

Detail penanganan pekerjaan di Azure Automation disediakan di Pekerjaan. Saat Anda siap untuk melihat pekerjaan runbook Anda, gunakan portal Microsoft Azure dan akses akun Automation Anda. Di sebelah kanan, Anda dapat melihat ringkasan semua pekerjaan runbook di Statistik Pekerjaan.

Job Statistics tile

Ringkasan menampilkan hitungan dan representasi grafis dari status pekerjaan untuk setiap pekerjaan yang dijalankan.

Mengeklik ubin akan menampilkan halaman Pekerjaan, yang mencakup daftar ringkasan semua pekerjaan yang dijalankan. Halaman ini memperlihatkan status, nama runbook, waktu mulai, dan waktu penyelesaian untuk setiap pekerjaan.

Screenshot of the Jobs page.

Anda dapat memfilter daftar pekerjaan dengan memilih Filter pekerjaan. Filter pada runbook tertentu, status pekerjaan, atau pilihan dari menu drop-down dan berikan rentang waktu untuk pencarian.

Filter job status

Atau Anda dapat melihat detail ringkasan pekerjaan untuk runbook tertentu dengan memilih runbook tersebut dari halaman Runbook di akun Automation Anda, lalu memilih Pekerjaan. Tindakan ini akan menampilkan halaman Pekerjaan. Dari sini, Anda dapat mengeklik catatan pekerjaan untuk melihat detail dan output-nya.

Screenshot of the Jobs page with the Errors button highlighted.

Mengambil status pekerjaan menggunakan PowerShell

Gunakan cmdlet Get-AzAutomationJob untuk mengambil pekerjaan yang dibuat untuk runbook dan detail pekerjaan tertentu. Jika Anda memulai runbook menggunakan Start-AzAutomationRunbook, itu akan mengembalikan pekerjaan yang dihasilkan. Gunakan Get-AzAutomationJobOutput untuk mengambil output pekerjaan.

Contoh berikut mendapatkan pekerjaan terakhir untuk contoh runbook dan menampilkan statusnya, nilai yang diberikan untuk parameter runbook, dan output pekerjaan.

$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

Contoh berikut mengambil output untuk pekerjaan tertentu dan mengembalikan setiap data. Jika ada pengecualian untuk salah satu data, skrip akan menulis pengecualian, bukan nilainya. Perilaku ini berguna karena pengecualian dapat memberikan informasi tambahan yang mungkin tidak dicatat secara normal selama output.

$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
    }
}

Langkah berikutnya