Öğretici: Azure İşlevleri kullanarak önceki ve sonraki olayları oluşturma
Ş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 kullanarak bir vm'yi bir zamanlama düzeltme eki iş akışında başlatmak ve durdurmak için olayları önceden oluşturma ve gönderme açıklanmaktadır.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Önkoşullar
- İşlev uygulaması oluşturma
- İşlev oluşturma
- Olay aboneliği oluşturma
Önkoşullar
PowerShell 7.2 runbook kullandığınızdan emin olun.
Yönetilen kimliklere izin atama - İzinleri uygun yönetilen kimliğe atayabilirsiniz. Runbook, Otomasyon hesabı sistem tarafından atanan yönetilen kimliği veya kullanıcı tarafından atanan yönetilen kimliği kullanabilir.
Her kimliğe izin atamak için portal veya PowerShell cmdlet'lerini kullanabilirsiniz:
- Azure portalı kullanarak
- Azure PowerShell’i kullanma
İzinleri atamak için Azure portalını kullanarak Azure rolleri atama başlığındaki adımları izleyin
- Modülü içeri aktarın
Az.ResourceGraph
, 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şturma adımlarını izleyin.
İşlev uygulamasını oluşturduktan sonra Kaynağa git, aşağıdaki adımları izleyerek bağımlılıkları yüklediğinizden emin olun:
Not
Bağımlılıkları yalnızca ilk kez yüklemeniz gerekir. PowerShell bağımlılıkları yüklenmiyorsa. AZ ve AZ'nin en son sürümlerini denetleyin. ResourceGraph.
İşlev Uygulamasında Uygulama dosyaları'nı seçin.
host.json altında ManagedDependecy değerini True olarak etkinleştirin 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 Kaynak'a gidin ve Genel Bakış'ta Azure portalında oluştur'u seçin.
İşlev oluştur penceresinde aşağıdaki seçimleri yapın:
Event grid işlevinde soldaki menüden Code+Test'i seçin, aşağıdaki kodu yapıştırın ve Kaydet'i seçin.
# Make sure that we are using eventGridEvent for parameter binding in 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üden Tümleştirme'yi seçin ve Tetikleyici altında Olay Tetikleyicisi parametre adını düzenleyin. Code+Test penceresinde verilen parametre adını kullanın. Örnekte parametresi eventGridEvent'tir.
Kaydet'i seçin.
Olay aboneliği oluşturma
- Azure portalında oturum açın ve Azure Update Manager'ınıza gidin.
- Yönet'in altında Makineler, Bakım Yapılandırması'yı seçin.
- Bakım Yapılandırması sayfasında yapılandırmayı seçin.
- Ayarlar'ın altında Olaylar'ı seçin.
- Bakım öncesi/sonrası olayı oluşturmak için +Olay Aboneliği'ne tıklayın.
- Olay Aboneliği Oluştur sayfasında aşağıdaki ayrıntıları girin:
- Olay Aboneliği Ayrıntıları bölümünde uygun bir ad girin.
- Şemayı Event Grid Şeması olarak tutun.
- Olay Türleri bölümünde, Olay Türlerine Filtre Uygula'yı seçin.
- Bir ön olay için Bakım Öncesi Olay'ı seçin.
- Uç nokta ayrıntıları bölümünde Azure İşlevi uç noktasını ve ardından Yapılandır ve Uç Nokta'yı seçin.
- Olayı tetikleyen Kaynak grupları, işlev uygulaması gibi uygun ayrıntıları sağlayın.
- Olay sonrası için Bakım Sonrası Olay'ı seçin.
- Uç nokta ayrıntıları bölümünde Azure İşlevi uç noktası ve Yapılandır ve Uç Nokta'yı seçin.
- Olayı tetikleyen Kaynak grubu, İşlev uygulaması gibi uygun ayrıntıları sağlayın.
- Bir ön olay için Bakım Öncesi Olay'ı seçin.
- Oluştur'u belirleyin.
Olayları depolamak, göndermek ve almak için Azure Depolama hesaplarını ve Olay hub'larını da kullanabilirsiniz. Olay hub'ı ve Depolama kuyrukları oluşturma hakkında daha fazla bilgi edinin.
Sonraki adımlar
- Azure Update Manager'da etkinlik öncesi ve gönderilerine genel bakış hakkında daha fazla bilgi edinin.
- Etkinlik öncesi oluşturma ve gönderme hakkında daha fazla bilgi edinin
- Olayları önceden yönetme ve gönderme hakkında bilgi edinmek veya bir zamanlama çalıştırmasını iptal etmek için bkz . bakım öncesi ve sonrası yapılandırma olayları.
- Otomasyon ile web kancası kullanarak etkinlik öncesi oluşturma ve gönderme hakkında daha fazla bilgi edinin.