Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо: ✔️ виртуальные машины ✔️ ✔️ Linux под управлением Windows На локальных ✔️ ✔️ серверах azure Arc.
В этом руководстве объясняется, как создать события предварительного обслуживания и после обслуживания для запуска и остановки виртуальной машины в запланированном рабочем процессе исправления с помощью функций Azure.
В этом руководстве вы узнаете, как:
- Создайте приложение-функцию.
- Создайте функцию.
- Создайте подписку на события.
Prerequisites
Убедитесь, что вы используете руководство PowerShell Runbook 7.4.
Назначьте разрешения соответствующему управляемому удостоверению. Модуль Runbook может использовать назначаемое системой управляемое удостоверение учетной записи службы автоматизации или управляемое удостоверение, назначаемое пользователем.
В следующих примерах скриптов (запуск и остановка виртуальных машин) требуется роль участника виртуальной машины или пользовательская роль с этими конкретными разрешениями:
- Microsoft.Compute/virtualMachines/start/action
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/виртуальныеМашины/перезапуск/действие
- Microsoft.Compute/virtualMachines/powerOff/action
Вы можете использовать Azure портал или командлеты Azure PowerShell для назначения разрешений каждой учетной записи.
Чтобы назначить разрешения, выполните действия, описанные в статье "Назначение ролей Azure" с помощью портала Azure.
- Импортируйте модуль
Az.ResourceGraph. Убедитесь, что модуль обновлен до ThreadJob с помощью модуля версии 2.0.3.
Создание приложения-функции
Выполните действия, чтобы создать приложение-функцию.
Перейдите к ресурсу и загрузите зависимости, выполнив следующие действия.
Note
Необходимо загрузить зависимости только при первом запуске. Если зависимости PowerShell не загружаются, проверьте последние версии
AzиAz.ResourceGraph.Для Function App выберите файлы приложения.
В разделе host.json задайте ManagedDependency в значение True и выберите requirements.psd1.
В разделе requirements.psd1 вставьте следующий код:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }Нажмите кнопку "Сохранить".
Перезапустите приложение-функцию на вкладке "Обзор ", чтобы загрузить зависимости, упомянутые в файле requirements.psd1 .
Создание функции
После создания приложения-функции перейдите к ресурсу, перейдите к обзору и нажмите кнопку "Создать" на портале Azure.
На панели "Создание функции " сделайте следующее:
В области функций сетки событий выберите "Код+тест " в меню слева. Вставьте следующий код и нажмите кнопку "Сохранить".
# 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 } }В меню слева выберите "Интеграция". В поле "Триггер" введите значение имени параметра триггера события . Используйте то же имя параметра, указанное в окне Code+Test . В примере используется
eventGridEventпараметр.Нажмите кнопку "Сохранить".
Создание подписки на события
Войдите на портал Azure и перейдите в Диспетчер обновлений Azure.
В разделе "Управление" выберитеконфигурацию обслуживания>.
На панели "Конфигурация обслуживания" выберите конфигурацию.
В разделе "Параметры" выберите "События".
Выберите +Подписка на события событий , чтобы создать событие предварительного обслуживания или после обслуживания.
На панели "Создание подписки на события" в разделе "Сведения о подписке на события " укажите соответствующее имя. Сохраните схему как схему сетки событий.
В разделе "Типы событий " для фильтрации по типам событий выберите событие предварительного обслуживания или событие после обслуживания.
В разделе "Сведения о конечной точке" выберите конечную точку функции Azure и выберите пункт "Настройка конечной точки".
Укажите соответствующие сведения, например группу ресурсов и приложение-функцию для активации события.
Нажмите кнопку "Создать".
Вы также можете использовать учетные записи хранения Azure и концентратор событий для хранения, отправки и получения событий. Дополнительные сведения см. в кратких руководствах по созданию очереди в службе хранилища Azure и созданию концентратора событий с помощью портала Azure.
Связанный контент
- Ознакомьтесь с общими сведениями о событиях предварительного обслуживания и после обслуживания в Диспетчере обновлений Azure.
- Узнайте больше о создании событий предварительного обслуживания и после обслуживания.
- Узнайте , как управлять событиями до и после обслуживания или отменять запланированный запуск.
- Узнайте , как создавать события предобслуживания и послеобслуживания, используя вебхук с автоматизацией Runbook.