Zelfstudie: pre- en postgebeurtenissen maken met Azure Functions
Van toepassing op: ✔️ Windows-VM's linux-VM's ✔️ ✔️ on-premises azure-VM's ✔️ ✔️ met Azure Arc-servers.
In deze zelfstudie wordt uitgelegd hoe u gebeurtenissen vooraf maakt en post om een VIRTUELE machine te starten en te stoppen in een werkstroom voor een planningspatch met behulp van Azure Functions.
In deze zelfstudie leert u het volgende:
- Vereisten
- Een functie-app maken
- Een functie maken
- Een gebeurtenisabonnement maken
Vereisten
Zorg ervoor dat u powerShell 7.2-runbook gebruikt.
Machtiging toewijzen aan beheerde identiteiten: u kunt machtigingen toewijzen aan de juiste beheerde identiteit. Het runbook kan de door het Automation-account toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit gebruiken.
U kunt portal- of PowerShell-cmdlets gebruiken om machtigingen toe te wijzen aan elke identiteit:
Volg de stappen in Azure-rollen toewijzen met behulp van Azure Portal om machtigingen toe te wijzen
- Importeer de
Az.ResourceGraph
module en zorg ervoor dat de module wordt bijgewerkt naar ThreadJob met moduleversie 2.0.3.
Een functie-app maken
Volg de stappen om een functie-app te maken.
Nadat u de functie-app hebt gemaakt, gaat u naar de resource en zorgt u ervoor dat u de afhankelijkheden laadt door de volgende stappen uit te voeren:
Notitie
U moet de afhankelijkheden alleen voor de eerste keer laden. Als de PowerShell-afhankelijkheden niet worden geladen. Controleer de nieuwste versies van AZ en AZ. ResourceGraph.
Selecteer app-bestanden in de functie-app.
Schakel onder de host.json ManagedDependecy in op True en selecteer requirements.psd1.
Plak onder de requirements.psd1 de volgende code:
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }
Selecteer Opslaan.
Start de functie-app opnieuw op het tabblad Overzicht om de afhankelijkheden te laden die worden vermeld in het bestand requirements.psd1 .
Een functie maken
Nadat u de functie-app hebt gemaakt, gaat u naar Resource en selecteert u Maken in Azure Portal in Overzicht.
Maak in het venster Functie maken de volgende selecties:
Selecteer in de functie Event Grid Code+Test in het linkermenu, plak de volgende code en selecteer Opslaan.
# 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 } }
Selecteer Integratie in het linkermenu en bewerk de parameternaam van de gebeurtenistrigger onder Trigger. Gebruik dezelfde parameternaam in het venster Code+Test . In het voorbeeld is de parameter eventGridEvent.
Selecteer Opslaan
Een gebeurtenisabonnement maken
- Meld u aan bij Azure Portal en ga naar Azure Update Manager.
- Selecteer onder Beheren de optie Machines, Onderhoudsconfiguratie.
- Selecteer de configuratie op de pagina Onderhoudsconfiguratie .
- Selecteer onder Instellingen de optie Gebeurtenissen.
- Selecteer +Gebeurtenisabonnement om een pre-/postonderhoudsgebeurtenis te maken.
- Voer op de pagina Gebeurtenisabonnement maken de volgende gegevens in:
- Geef in de sectie Details van gebeurtenisabonnement een geschikte naam op.
- Behoud het schema als Event Grid-schema.
- Filter op gebeurtenistypen in de sectie Gebeurtenistypen.
- Selecteer Pre-onderhoudsgebeurtenis voor een pregebeurtenis.
- Selecteer in de sectie Eindpuntdetails het Azure Function-eindpunt en selecteer Configureren en Eindpunt.
- Geef de juiste details op, zoals resourcegroepen, functie-app om de gebeurtenis te activeren.
- Selecteer Gebeurtenis na onderhoud voor een postgebeurtenis.
- In de sectie Eindpuntdetails selecteert u het Eindpunt van de Azure-functie en selecteert u Configureren en Eindpunt.
- Geef de juiste details op, zoals resourcegroep, functie-app om de gebeurtenis te activeren.
- Selecteer Pre-onderhoudsgebeurtenis voor een pregebeurtenis.
- Selecteer Maken.
U kunt ook Azure Storage-accounts en Event Hub gebruiken om gebeurtenissen op te slaan, te verzenden en te ontvangen. Meer informatie over het maken van Event Hub - en Storage-wachtrijen.
Volgende stappen
- Meer informatie over het overzicht van pre- en postgebeurtenissen in Azure Update Manager.
- Meer informatie over het maken van pre- en postgebeurtenissen
- Voor meer informatie over het beheren van pre- en postgebeurtenissen of het annuleren van een planningsuitvoering, raadpleegt u pre- en post-onderhoudsconfiguratiegebeurtenissen.
- Meer informatie over Vooraf maken en gebeurtenissen posten met behulp van een webhook met Automation.