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.
Bu öğreticide, Azure İşlevleri'ni kullanarak zamanlanmış bir yama iş akışında bir sanal makineyi (VM) başlatmak ve durdurmak için bakım öncesi ve bakım sonrası olayların nasıl oluşturulacağı açıklanır.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- İşlev uygulaması oluşturun.
- İşlev oluşturma.
- Bir olay aboneliği oluştur.
Önkoşullar
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.
İşlev uygulaması oluşturma
İşlev uygulaması oluşturmak için adımları izleyin.
Aşağıdaki adımları kullanarak kaynağa gidin ve bağımlılıkları yükleyin.
Not
Bağımlılıkları yalnızca ilk kez yüklemeniz gerekir. PowerShell bağımlılıkları yüklenmiyorsa,
AzveAz.ResourceGraphöğelerinin en son sürümlerini kontrol edin.İşlev Uygulaması için Uygulama dosyaları'yı seçin.
host.jsonaltında ManagedDependecy değerini True olarak ayarlayın ve requirements.psd1 dosyasını seçin.
requirements.psd1 dosyasının altına aşağıdaki kodu yapıştırın:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }Kaydet'i seçin.
requirements.psd1 dosyasında belirtilen bağımlılıkları yüklemek için Genel Bakış sekmesinden işlev uygulamasını yeniden başlatın.
İşlev oluşturma
İşlev uygulamasını oluşturduktan sonra kaynağa gidin, Genel Bakış'a gidin ve ardından Azure portalında oluştur'u seçin.
İşlev oluştur bölmesinde aşağıdaki seçimleri yapın:
Olay kılavuzu işlevi bölmesinde, soldaki menüden Code+Test'i seçin. Aşağıdaki kodu yapıştırın ve kaydet'i seçin.
# Make sure that you're using eventGridEvent for parameter binding in the Azure function. param($eventGridEvent, $TriggerMetadata) Connect-AzAccount -Identity # Install the Resource Graph module from PowerShell Gallery # Install-Module -Name Az.ResourceGraph $maintenanceRunId = $eventGridEvent.data.CorrelationId $resourceSubscriptionIds = $eventGridEvent.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 } }Sol menüde Tümleştirme'yi seçin. Tetikleyici için Olay Tetikleyicisi parametre adı değerini girin. Code+Test penceresinde verilen parametre adını kullanın. Örnekte parametresidir
eventGridEvent.Kaydet'i seçin.
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 Azure İşlevi uç noktasını ve ardından Uç noktayı yapılandır'ı seçin.
Olayı tetikleyen kaynak grubu ve işlev uygulaması gibi uygun ayrıntıları sağlayın.
Oluştur'u belirleyin.
Olayları depolamak, göndermek ve almak için Azure Depolama hesaplarını ve olay hub'larını da kullanabilirsiniz. Daha fazla bilgi için Bkz. Azure Depolama'da kuyruk oluşturma ve Azure portalını kullanarak olay hub'ı oluşturma ile ilgili hızlı başlangıçlar.
İ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.
- Otomasyon runbook'ları ile webhook kullanarak bakım öncesi ve bakım sonrası etkinlikleri oluşturmayı öğrenin.