Tutorial: Criar pré-eventos e pós-eventos com as Funções do Azure
Aplica-se a: ✔️ VMs ✔️ do Windows VMs ✔️ Linux Ambiente local ✔️ VMs do Azure VMs ✔️ Servidores habilitados para Azure Arc.
Este tutorial explica como criar eventos pré e pós para iniciar e parar uma VM em um fluxo de trabalho de patch de agendamento usando o Azure Functions.
Neste tutorial, irá aprender a:
- Pré-requisitos
- Criar uma aplicação de funções
- Criar uma função
- Criar uma subscrição de evento
Pré-requisitos
Verifique se você está usando o runbook do PowerShell 7.2 .
Atribuir permissão a identidades gerenciadas - Você pode atribuir permissões à identidade gerenciada apropriada. O runbook pode usar a identidade gerenciada atribuída pelo sistema de conta de automação ou uma identidade gerenciada atribuída pelo usuário.
Você pode usar cmdlets do portal ou do PowerShell para atribuir permissões a cada identidade:
Siga as etapas em Atribuir funções do Azure usando o portal do Azure para atribuir permissões
- Importe o
Az.ResourceGraph
módulo, certifique-se de que o módulo está atualizado para ThreadJob com o módulo versão 2.0.3.
Criar uma aplicação de funções
Siga as etapas para Criar um aplicativo de função.
Depois de criar o aplicativo de função, Vá para recurso, certifique-se de carregar as dependências seguindo estas etapas:
Nota
Você tem que carregar as dependências apenas pela primeira vez. Se as dependências do PowerShell não estiverem carregando. Verifique as versões mais recentes do AZ e do AZ. ResourceGraph.
No Aplicativo de função, selecione Arquivos de aplicativo.
Na host.json, habilite ManagedDependecy para True e selecione requirements.psd1.
Em requirements.psd1, cole o seguinte código:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }
Selecione Guardar.
Reinicie o aplicativo de função na guia Visão geral para carregar as dependências mencionadas no arquivo requirements.psd1 .
Criar uma função
Depois de criar o aplicativo de função, vá para Recurso e, em Visão geral, selecione Criar no portal do Azure.
Na janela Criar função, faça as seguintes seleções:
Na função Grade de eventos, selecione Código+Teste no menu à esquerda, cole o código a seguir e selecione Salvar.
# 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 } }
Selecione Integração no menu esquerdo e edite o nome do parâmetro Event Trigger em Trigger. Use o mesmo nome de parâmetro fornecido na janela Code+Test . No exemplo, o parâmetro é eventGridEvent.
Selecione Guardar
Criar uma subscrição de evento
- Entre no portal do Azure e vá para o Azure Update Manager.
- Em Gerir, selecione Máquinas, Configuração de manutenção.
- Na página Configuração de Manutenção, selecione a configuração.
- Em Configurações, selecione Eventos.
- Selecione +Subscrição de Eventos para criar um evento de pré/pós-manutenção.
- Na página Criar Subscrição de Eventos , introduza os seguintes detalhes:
- Na seção Detalhes da Assinatura do Evento, forneça um nome apropriado.
- Mantenha o esquema como Esquema de Grade de Eventos.
- Na seção Tipos de Evento , Filtre para Tipos de Evento.
- Selecione Pré-evento de manutenção para um pré-evento.
- Na seção Detalhes do ponto de extremidade, selecione o ponto de extremidade da Função do Azure e selecione Configurar e ponto de extremidade.
- Forneça os detalhes apropriados, como Grupos de recursos, aplicativo de função para disparar o evento.
- Selecione Pós-evento de manutenção para um pós-evento.
- Na seção Detalhes do ponto de extremidade, o ponto de extremidade do Azure Function e selecione Configurar e ponto de extremidade.
- Forneça os detalhes apropriados, como Grupo de recursos, Aplicativo de função para disparar o evento.
- Selecione Pré-evento de manutenção para um pré-evento.
- Selecione Criar.
Você também pode usar contas de Armazenamento do Azure e hub de eventos para armazenar, enviar e receber eventos. Saiba mais sobre como criar filas de armazenamento e hub de eventos.
Próximos passos
- Saiba mais sobre a visão geral de eventos pré e pós no Azure Update Manager.
- Saiba mais sobre como criar pré e pós eventos
- Para saber como gerenciar pré e pós eventos ou cancelar uma execução de agenda, consulte Eventos de configuração pré e pós-manutenção.
- Saiba mais sobre Criar eventos pré e pós usando um webhook com automação.