Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: ✔️ Windows VM'leri ✔️ Linux VM'leri ✔️ Şirket içi ortam ✔️ Azure VM'leri ✔️ Azure Arc özellikli sunucular.
Zamanlanmış düzeltme eki yüklemeden önce ve sonra kullanıcı tanımlı eylemleri yürütmek için bakım öncesi ve bakım sonrası olayları kullanabilirsiniz. En yaygın senaryolardan biri, bir sanal makineyi (VM) başlatmak ve durdurmaktır. Zamanlanmış düzeltme uygulama sürecini başlatmadan önce, bakım öncesi olaylar aracılığıyla VM'yi başlatmak için bir betik çalıştırabilirsiniz. Planlanan düzeltme eki uygulama tamamlandıktan ve sunucu yeniden başlatıldıktan sonra VM'yi güvenli bir şekilde kapatmak için bir script çalıştırabilirsiniz.
Bu öğreticide, bir web kancası kullanarak zamanlanmış bir yama iş akışında VM'yi başlatmak ve durdurmak için bakım öncesi ve bakım sonrası olayların nasıl oluşturulacağı açıklanmaktadır.
Bu eğitimde, siz:
- Azure Otomasyon Çalışma Kitapçığı'nı tasarlayın ve yayımlayın.
- Webhook ekle.
- Bir olay aboneliği oluştur.
Prerequisites
PowerShell 7.4 runbook kullandığınızdan emin olun.
uygun yönetilen kimliğe izinler atayın. Runbook, Otomasyon hesabının sistem tarafından atanan yönetilen kimliğini veya kullanıcı tarafından atanan yönetilen kimliği kullanabilir.
Aşağıdaki betik örnekleri (VM'leri başlatma ve durdurma), Sanal Makine Katkıda Bulunanı rolünü veya bu belirli izinlere sahip özel bir rolü gerektirir:
- Microsoft.Compute/sanalMakinalar/başlat/action
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/sanalMakineler/yeniBaşlat/eylem
- Microsoft.Compute/virtualMachines/powerOff/action
Her kimliğe izin atamak için Azure portalını veya Azure PowerShell cmdlet'lerini kullanabilirsiniz:
İzinleri atamak için Azure portalını kullanarak Azure rolleri atama başlığındaki adımları izleyin.
-
Az.ResourceGraphmodülünü içe aktarın. Modülün 2.0.3 modül sürümüyle ThreadJob'a güncelleştirildiğinden emin olun.
Otomasyon çalışma kitabını oluşturma ve yayımlama
Azure portalında oturum açın ve Azure Otomasyonu hesabınıza gidin.
Azure Otomasyonu Güncelleştirme Yönetimi'nde bakım öncesi ve bakım sonrası görevler için runbook'ları kullandıysanız makineleriniz ve başarısız bakım çalıştırmaları üzerinde beklenmeyen bir etkiyi önlemek için aşağıdaki adımları kullanmanız önemlidir:
Runbook'larınızın, yalnızca
Microsoft.Maintenance.PreMaintenanceEventveyaMicrosoft.Maintenance.PostMaintenanceEventolaylarında tetiklendiğinden emin olmak için web kancası yükünü ayrıştırın. Tasarım gereği, aynı uç noktaya başka bir olay eklenirse web kancaları diğer abonelik olaylarında tetiklenir.Bakım yapılandırmalarına özgü Event Grid şemasına bakın.
Aşağıdaki koda bakın:
param ( [Parameter(Mandatory=$false)] [object] $WebhookData ) $notificationPayload = ConvertFrom-Json -InputObject $WebhookData.RequestBody $eventType = $notificationPayload[0].eventType if ($eventType -ne "Microsoft.Maintenance.PreMaintenanceEvent" -and $eventType –ne "Microsoft.Maintenance.PostMaintenanceEvent" ) { Write-Output "Webhook not triggered as part of pre or post patching for maintenance run" return }
SoftwareUpdateConfigurationRunContext parametresi, güncelleştirme dağıtımındaki makine listeleri hakkında bilgi içerir. Otomasyon webhook kullanırken, bakım öncesi veya sonrası olaylar için betikleri kullandığınızda, bu bilgiler betiklere aktarılmayacaktır. Azure Kaynak Grafı'ndan makine listesini sorgulayabilir veya betiklerde kodlanmış makine listesini kullanabilirsiniz.
Betikte kullandığınız yönetilen kimliklere, Kaynak Grafı sorgularını yürütmek ve makineleri başlatmak veya durdurmak için uygun rollerin ve izinlerin verildiğinden emin olun.
Kaynak Grafı sorgularıyla ilgili izinlere bakın.
Bkz. webhook yükü.
Aşağıdaki koda bakın:
param ( [Parameter(Mandatory=$false)] [object] $WebhookData ) Connect-AzAccount -Identity # Install the Resource Graph module from PowerShell Gallery # Install-Module -Name Az.ResourceGraph $notificationPayload = ConvertFrom-Json -InputObject $WebhookData.RequestBody $maintenanceRunId = $notificationPayload[0].data.CorrelationId $resourceSubscriptionIds = $notificationPayload[0].data.ResourceSubscriptionIds if ($resourceSubscriptionIds.Count -gt 0) { Write-Output "Querying ARG to get machine details[MaintenanceRunId=$maintenanceRunId][ResourceSubscriptionIdsCount=$($resourceSubscriptionIds.Count)]" $argQuery = @"maintenanceresources | where type =~ 'microsoft.maintenance/applyupdates' | where properties.correlationId =~ '$($maintenanceRunId)' | where id has '/providers/microsoft.compute/virtualmachines/' | project id, resourceId = tostring(properties.resourceId) | order by id asc "@ Write-Output "Arg Query Used: $argQuery" $allMachines = [System.Collections.ArrayList]@() $skipToken = $null $res = Search-AzGraph -Query $argQuery -First 1000 -SkipToken $skipToken -Subscription $resourceSubscriptionIds $skipToken = $res.SkipToken $allMachines.AddRange($res.Data) } while ($skipToken -ne $null -and $skipToken.Length -ne 0) if ($allMachines.Count -eq 0) { Write-Output "No Machines were found." break } }
Özelleştirmek için, önceki değişikliklerle mevcut betiklerinizi kullanabilir veya aşağıdaki betikleri kullanabilirsiniz.
Örnek betikler
param
(
[Parameter(Mandatory=$false)]
[object] $WebhookData
)
Connect-AzAccount -Identity
# Install the Resource Graph module from PowerShell Gallery
# Install-Module -Name Az.ResourceGraph
$notificationPayload = ConvertFrom-Json -InputObject $WebhookData.RequestBody
$eventType = $notificationPayload[0].eventType
if ($eventType -ne "Microsoft.Maintenance.PreMaintenanceEvent") {
Write-Output "Webhook not triggered as part of pre-patching for maintenance run"
return
}
$maintenanceRunId = $notificationPayload[0].data.CorrelationId
$resourceSubscriptionIds = $notificationPayload[0].data.ResourceSubscriptionIds
if ($resourceSubscriptionIds.Count -eq 0) {
Write-Output "Resource subscriptions are not present."
break
}
Write-Output "Querying ARG to get machine details [MaintenanceRunId=$maintenanceRunId][ResourceSubscriptionIdsCount=$($resourceSubscriptionIds.Count)]"
$argQuery = @"
maintenanceresources
| where type =~ 'microsoft.maintenance/applyupdates'
| where properties.correlationId =~ '$($maintenanceRunId)'
| where id has '/providers/microsoft.compute/virtualmachines/'
| project id, resourceId = tostring(properties.resourceId)
| order by id asc
"@
Write-Output "Arg Query Used: $argQuery"
$allMachines = [System.Collections.ArrayList]@()
$skipToken = $null
do
{
$res = Search-AzGraph -Query $argQuery -First 1000 -SkipToken $skipToken -Subscription $resourceSubscriptionIds
$skipToken = $res.SkipToken
$allMachines.AddRange($res.Data)
} while ($skipToken -ne $null -and $skipToken.Length -ne 0)
if ($allMachines.Count -eq 0) {
Write-Output "No Machines were found."
break
}
$jobIDs= New-Object System.Collections.Generic.List[System.Object]
$startableStates = "stopped" , "stopping", "deallocated", "deallocating"
$allMachines | ForEach-Object {
$vmId = $_.resourceId
$split = $vmId -split "/";
$subscriptionId = $split[2];
$rg = $split[4];
$name = $split[8];
Write-Output ("Subscription Id: " + $subscriptionId)
$mute = Set-AzContext -Subscription $subscriptionId
$vm = Get-AzVM -ResourceGroupName $rg -Name $name -Status -DefaultProfile $mute
$state = ($vm.Statuses[1].DisplayStatus -split " ")[1]
if($state -in $startableStates) {
Write-Output "Starting '$($name)' ..."
$newJob = Start-ThreadJob -ScriptBlock { param($resource, $vmname, $sub) $context = Set-AzContext -Subscription $sub; Start-AzVM -ResourceGroupName $resource -Name $vmname -DefaultProfile $context} -ArgumentList $rg, $name, $subscriptionId
$jobIDs.Add($newJob.Id)
} else {
Write-Output ($name + ": no action taken. State: " + $state)
}
}
$jobsList = $jobIDs.ToArray()
if ($jobsList)
{
Write-Output "Waiting for machines to finish starting..."
Wait-Job -Id $jobsList
}
foreach($id in $jobsList)
{
$job = Get-Job -Id $id
if ($job.Error)
{
Write-Output $job.Error
}
}
Web kancaları ekleme
Önceki yayımlanan runbook'lara web kancaları ekleyin ve web kancası URL'lerini kopyalayın.
Note
Web kancası oluşturduktan sonra URL'yi kopyaladığınızdan emin olun. URL'yi yeniden alamazsınız.
Olay aboneliği oluşturma
Azure portalda oturum açın ve Azure Güncelleme Yöneticisi'ne gidin.
Yönet'in altında MakineBakım> seçin.
Bakım Yapılandırması bölmesinde yapılandırmayı seçin.
Ayarlar'ın altında Olaylar'ı seçin.
Bakım öncesi veya bakım sonrası olay oluşturmak için +Olay Aboneliği'ne tıklayın.
Olay Aboneliği Oluştur bölmesinin Olay Aboneliği Ayrıntıları bölümünde uygun bir ad belirtin. Şemayı Event Grid Şeması olarak tutun.
Olay Türleri bölümünde, Olay Türlerine Filtre Uygula için Bakım Öncesi Olay veya BakımSonrası Olay'ı seçin.
Uç Nokta Ayrıntıları bölümünde Web Kancası uç noktasını seçin ve ardından Uç nokta yapılandır'ı seçin.
Olayı tetikleyen bakım öncesi veya bakım sonrası olayın web kancası URL'si gibi uygun ayrıntıları sağlayın.
Oluştur'i seçin.
İlgili içerik
- Azure Update Manager'da bakım öncesi ve bakım sonrası olaylara genel bir bakış edinin.
- Bakım öncesi ve bakım sonrası olayları oluşturma hakkında daha fazla bilgi edinin.
- Bakım öncesi ve bakım sonrası olayları yönetmeyi veya zamanlanmış çalıştırmayı iptal etmeyi öğrenin.
- Azure İşlevlerini kullanarak bakım öncesi ve bakım sonrası olayları oluşturmayı öğrenin.