Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : ✔️ Machines virtuelles Windows ✔️ Machines virtuelles Linux ✔️ Environnement local ✔️ Machines virtuelles Azure ✔️ Serveurs compatibles avec Azure Arc.
Ce tutoriel explique comment créer des événements de pré-maintenance et de post-maintenance pour démarrer et arrêter une machine virtuelle dans un workflow de correctif planifié à l’aide d’Azure Functions.
Dans ce tutoriel, vous allez apprendre à :
- Créez une application de fonction.
- Créez une fonction.
- Créez un abonnement aux événements.
Prérequis
Assurez-vous que vous utilisez un runbook PowerShell 7.4.
Affectez des autorisations à l’identité managée appropriée. Le runbook peut utiliser l’identité managée attribuée par le système du compte Automation ou une identité managée attribuée par l’utilisateur.
Les exemples de script suivants (démarrage et arrêt de machines virtuelles) nécessitent le rôle Contributeur de machine virtuelle ou un rôle personnalisé avec ces autorisations spécifiques :
- Microsoft.Compute/virtualMachines/start/action
- Microsoft.Compute/virtualMachines/deallocate/action
- Microsoft.Compute/virtualMachines/restart/action
- Microsoft.Compute/virtualMachines/powerOff/action
Vous pouvez utiliser le portail Azure ou les applets de commande Azure PowerShell pour attribuer des autorisations à chaque identité :
Pour attribuer des autorisations, suivez les étapes décrites dans Affecter des rôles Azure à l’aide du portail Azure.
- Importez le
Az.ResourceGraphmodule. Vérifiez que le module est mis à jour vers ThreadJob avec le module version 2.0.3.
Créer une application de fonction
Suivez les étapes pour créer une application de fonction.
Accédez à la ressource et chargez les dépendances en procédant comme suit.
Remarque
Vous devez charger les dépendances uniquement la première fois. Si les dépendances PowerShell ne sont pas chargées, vérifiez les dernières versions de
AzetAz.ResourceGraph.Pour l’application de fonction, sélectionnez Fichiers d’application.
Sous host.json, définissez ManagedDependecy sur True et sélectionnez requirements.psd1.
Sous requirements.psd1, collez le code suivant :
@{ 'Az'='12.*' 'Az.ResourceGraph'='1.0.0' 'Az.Resources'='6.*' 'ThreadJob' = '2.*' }Cliquez sur Enregistrer.
Redémarrez l’application de fonction à partir de l’onglet Vue d’ensemble pour charger les dépendances mentionnées dans le fichier requirements.psd1.
Créer une fonction
Après avoir créé l’application de fonction, accédez à la ressource, accédez à Vue d’ensemble, puis sélectionnez Créer dans le portail Azure.
Dans le volet Créer une fonction , effectuez les sélections suivantes :
Dans le volet de fonction Event Grid , sélectionnez Code+Test dans le menu de gauche. Collez le code suivant, puis sélectionnez Enregistrer.
# 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 } }Dans le menu de gauche, sélectionnez Intégration. Pour Déclencheur, entrez la valeur du nom du paramètre de déclenchement d'événement. Utilisez le même nom de paramètre donné dans la fenêtre Code + Test. Dans l’exemple, le paramètre est
eventGridEvent.Cliquez sur Enregistrer.
Créer un abonnement d’événement
Connectez-vous au Portail Microsoft Azure et accédez à Azure Update Manager.
Sous Gérer, sélectionnezConfiguration de maintenance>.
Dans le volet Configuration de maintenance, sélectionnez la configuration.
Sous Paramètres, sélectionnez Événements.
Sélectionnez +Abonnement aux événements pour créer un événement de pré-maintenance ou de post-maintenance.
Dans le volet Créer un abonnement aux événements, dans la section Détails de l’abonnement aux événements, indiquez un nom approprié. Conservez Schéma Event Grid comme schéma.
Dans la section Types d’événements, pour filtrer les types d’événements, sélectionnez Événement de pré maintenance ou après maintenance.
Dans la section Détails du point de terminaison , sélectionnez le point de terminaison de fonction Azure , puis configurez un point de terminaison.
Fournissez les détails appropriés, tels que le groupe de ressources et l’application de fonction pour déclencher l’événement.
Sélectionnez Créer.
Vous pouvez également utiliser des comptes stockage Azure et un hub d’événements pour stocker, envoyer et recevoir des événements. Pour plus d’informations, consultez les guides de démarrage rapide sur la création d’une file d’attente dans stockage Azure et la création d’un hub d’événements à l’aide du portail Azure.
Contenu connexe
- Obtenez une vue d’ensemble des événements de pré-maintenance et de post-maintenance dans Azure Update Manager.
- Apprenez-en davantage sur la création d’événements de pré-maintenance et de post-maintenance.
- Découvrez comment gérer les événements de pré-maintenance et de post-maintenance ou annuler une exécution planifiée.
- Découvrez comment créer des événements de pré-maintenance et de post-maintenance à l’aide d’un webhook avec des runbooks Automation.