Démarrage d’un runbook Azure Automation avec un webhookStarting an Azure Automation runbook with a webhook

Un webhook vous permet de démarrer un Runbook dans Azure Automation via une simple requête HTTP.A webhook allows you to start a particular runbook in Azure Automation through a single HTTP request. Les services externes, tels que Visual Studio Team Services, GitHub, Microsoft Operations Management Suite Log Analytics ou les applications personnalisées peuvent ainsi démarrer les runbooks sans avoir à implémenter une solution complète à l’aide de l’API Azure Automation.This allows external services such as Visual Studio Team Services, GitHub, Microsoft Operations Management Suite Log Analytics, or custom applications to start runbooks without implementing a full solution using the Azure Automation API.
WebhooksOverviewWebhooksOverview

Vous pouvez comparer les webhooks à d'autres méthodes de démarrage d'un Runbook dans Démarrage d'un Runbook dans Azure AutomationYou can compare webhooks to other methods of starting a runbook in Starting a runbook in Azure Automation

Détails d'un webhookDetails of a webhook

Le tableau suivant décrit les propriétés que vous devez configurer pour un webhook.The following table describes the properties that you must configure for a webhook.

PropriétéProperty DescriptionDescription
NomName Vous pouvez attribuer le nom de votre choix à un webhook, car il n'apparaît pas au client.You can provide any name you want for a webhook since this is not exposed to the client. Il est uniquement utilisé pour que vous puissiez identifier le Runbook dans Azure Automation.It is only used for you to identify the runbook in Azure Automation.
À titre de meilleure pratique, nommez le webhook d'après le client qui l'utilise.As a best practice, you should give the webhook a name related to the client that will use it.
URLURL L'URL du webhook est l'adresse unique qu'un client appelle avec une méthode HTTP POST pour démarrer le Runbook lié au webhook.The URL of the webhook is the unique address that a client calls with an HTTP POST to start the runbook linked to the webhook. Elle est générée automatiquement lorsque vous créez le webhook.It is automatically generated when you create the webhook. Vous ne pouvez pas spécifier d'URL personnalisée.You cannot specify a custom URL.

L'URL contient un jeton de sécurité qui permet que le Runbook soit appelé par un système tiers sans authentification supplémentaire.The URL contains a security token that allows the runbook to be invoked by a third party system with no further authentication. Pour cette raison, elle doit être traitée comme un mot de passe.For this reason, it should be treated like a password. Pour des raisons de sécurité, vous pouvez uniquement afficher l’URL dans le portail Azure au moment de la création du webhook.For security reasons, you can only view the URL in the Azure portal at the time the webhook is created. Notez l'URL dans un emplacement sécurisé en vue d'une utilisation ultérieure.You should note the URL in a secure location for future use.
Date d'expirationExpiration date Comme un certificat, chaque webhook possède une date d'expiration à partir de laquelle il ne peut plus être utilisé.Like a certificate, each webhook has an expiration date at which time it can no longer be used. Cette date d’expiration peut être modifiée après la création du webhook.This expiration date can be modified after the webhook is created.
ActivéEnabled Un webhook est activé par défaut lorsqu'il est créé.A webhook is enabled by default when it is created. Si vous le définissez sur Disabled, aucun client ne sera en mesure de l'utiliser.If you set it to Disabled, then no client will be able to use it. Vous pouvez définir la propriété Enabled lorsque vous créez le webhook ou à tout moment après qu'il a été créé.You can set the Enabled property when you create the webhook or anytime once it is created.

ParamètresParameters

Un webhook peut définir les valeurs des paramètres du Runbook qui sont utilisées lorsque le Runbook est démarré par ce webhook.A webhook can define values for runbook parameters that are used when the runbook is started by that webhook. Le webhook doit inclure les valeurs de tous les paramètres obligatoires du Runbook et peut inclure les valeurs des paramètres optionnels.The webhook must include values for any mandatory parameters of the runbook and may include values for optional parameters. Une valeur de paramètre configurée pour un webhook peut être modifiée même après la création du webhook.A parameter value configured to a webhook can be modified even after creating the webhoook. Plusieurs webhooks liés à un même Runbook peuvent utiliser différentes valeurs de paramètres.Multiple webhooks linked to a single runbook can each use different parameter values.

Lorsqu'un client démarre un Runbook à l'aide d'un webhook, il ne peut pas remplacer les valeurs de paramètres définies dans le webhook.When a client starts a runbook using a webhook, it cannot override the parameter values defined in the webhook. Pour recevoir les données du client, le Runbook peut accepter un paramètre unique appelé $WebhookData de type [object] qui contient les données que le client inclut dans la requête POST.To receive data from the client, the runbook can accept a single parameter called $WebhookData of type [object] that will contain data that the client includes in the POST request.

Propriétés Webhookdata

L'objet $WebhookData possède les propriétés suivantes :The $WebhookData object will have the following properties:

PropriétéProperty DescriptionDescription
WebhookNameWebhookName Nom du webhook.The name of the webhook.
RequestHeaderRequestHeader Table de hachage contenant les en-têtes de la requête POST entrante.Hash table containing the headers of the incoming POST request.
RequestBodyRequestBody Corps de la requête POST entrante.The body of the incoming POST request. Ceci conserve les mises en forme telles que les chaînes, JSON, XML ou les données de formulaire codées.This will retain any formatting such as string, JSON, XML, or form encoded data. Le Runbook doit être écrit pour fonctionner avec le format de données qui est attendu.The runbook must be written to work with the data format that is expected.

Il n'existe aucune configuration du webhook requise pour prendre en charge le paramètre $WebhookData et le Runbook n'est pas obligé de l'accepter.There is no configuration of the webhook required to support the $WebhookData parameter, and the runbook is not required to accept it. Si le Runbook ne définit pas le paramètre, tous les détails de la demande envoyée depuis le client sont ignorés.If the runbook does not define the parameter, then any details of the request sent from the client is ignored.

Si vous spécifiez une valeur pour $WebhookData lorsque vous créez le webhook, cette valeur est remplacée lorsque le webhook démarre le Runbook avec les données de la demande POST du client, même si le client n'inclut pas toutes les données dans le corps de la demande.If you specify a value for $WebhookData when you create the webhook, that value will be overriden when the webhook starts the runbook with the data from the client POST request, even if the client does not include any data in the request body. Si vous démarrez un Runbook ayant $WebhookData à l'aide d'une méthode autre qu'un webhook, vous pouvez fournir une valeur pour $Webhookdata qui sera reconnue par le Runbook.If you start a runbook that has $WebhookData using a method other than a webhook, you can provide a value for $Webhookdata that will be recognized by the runbook. Cette valeur doit être un objet avec les mêmes propriétés que $Webhookdata afin que le Runbook puisse l'utiliser correctement comme s’il s’agissait d’une valeur WebhookData réelle transmise par un webhook.This value should be an object with the same properties as $Webhookdata so that the runbook can properly work with it as if it was working with actual WebhookData passed by a webhook.

Par exemple, si vous démarrez le runbook suivant à partir du portail Azure et que vous souhaitez passer certains exemples WebhookData à des fins de test, étant donné que WebhookData est un objet, ils doivent être transmis en tant que valeur JSON dans l'interface utilisateur.For example, if you are starting the following runbook from the Azure Portal and want to pass some sample WebhookData for testing, since WebhookData is an object, it should be passed as JSON in the UI.

Paramètre WebhookData à partir de l'interface utilisateur

Pour le runbook ci-dessus, si vous avez les propriétés suivantes pour le paramètre WebhookData :For the above runbook, if you have the following properties for the WebhookData parameter:

  1. WebhookName: MyWebhookWebhookName: MyWebhook
  2. RequestHeader: From=Test UserRequestHeader: From=Test User
  3. RequestBody: [“VM1”, “VM2”]RequestBody: [“VM1”, “VM2”]

Vous pouvez alors transmettre la valeur JSON suivante dans l'interface utilisateur pour le paramètre WebhookData :Then you would pass the following JSON value in the UI for the WebhookData parameter:

  • {"WebhookName":"MyWebhook", "RequestHeader":{"From":"Test User"}, "RequestBody":"["VM1","VM2"]"}{"WebhookName":"MyWebhook", "RequestHeader":{"From":"Test User"}, "RequestBody":"["VM1","VM2"]"}

Démarrage du paramètre WebhookData à partir de l'interface utilisateur

Note

Les valeurs de tous les paramètres d'entrée sont enregistrés avec la tâche du Runbook.The values of all input parameters are logged with the runbook job. Cela signifie qu'une entrée fournie par le client dans la requête webhook sera enregistrée et accessible à toute personne ayant accès à la tâche Automation.This means that any input provided by the client in the webhook request will be logged and available to anyone with access to the automation job. Pour cette raison, soyez prudent lorsque vous incluez des informations sensibles dans les appels du webhook.For this reason, you should be cautious about including sensitive information in webhook calls.

SécuritéSecurity

La sécurité d'un webhook s'appuie sur la confidentialité de son URL, laquelle contient un jeton de sécurité lui permettant d'être appelée.The security of a webhook relies on the privacy of its URL which contains a security token that allows it to be invoked. Azure Automation n'effectue pas d'authentification de la demande tant qu'elle est adressée à la bonne URL.Azure Automation does not perform any authentication on the request as long as it is made to the correct URL. Pour cette raison, les webhooks ne doivent pas être utilisés pour les Runbooks qui exécutent des fonctions très sensibles sans recourir à un autre moyen de validation de la demande.For this reason, webhooks should not be used for runbooks that perform highly sensitive functions without using an alternate means of validating the request.

Vous pouvez inclure une logique dans le Runbook pour déterminer qu'il a été appelé par un webhook en vérifiant la propriété WebhookName du paramètre $WebhookData.You can include logic within the runbook to determine that it was called by a webhook by checking the WebhookName property of the $WebhookData parameter. Le Runbook peut effectuer une validation supplémentaire en recherchant des informations spécifiques dans les propriétés RequestHeader ou RequestBody.The runbook could perform further validation by looking for particular information in the RequestHeader or RequestBody properties.

Une autre stratégie consiste à ce que le Runbook effectue la validation d'une condition externe lorsqu'il reçoit une demande du webhook.Another strategy is to have the runbook perform some validation of an external condition when it received a webhook request. Par exemple, envisagez un Runbook appelé par GitHub chaque fois qu'il est procédé à une nouvelle validation d'un référentiel GitHub.For example, consider a runbook that is called by GitHub whenever there is a new commit to a GitHub repository. Le Runbook peut se connecter à GitHub pour s'assurer qu'une nouvelle validation vient juste de se produire avant de continuer.The runbook might connect to GitHub to validate that a new commit had actually just occurred before continuing.

Création d'un webhookCreating a webhook

Utilisez la procédure suivante pour créer un webhook lié à un Runbook dans le portail Azure.Use the following procedure to create a new webhook linked to a runbook in the Azure portal.

  1. À partir du panneau Runbooks du portail Azure, cliquez sur le Runbook que le webhook démarrera pour afficher son panneau Détails.From the Runbooks blade in the Azure portal, click the runbook that the webhook will start to view its detail blade.
  2. Cliquez sur Webhook en haut du panneau pour ouvrir le panneau Ajouter un webhook.Click Webhook at the top of the blade to open the Add Webhook blade.
    Bouton Webhooks Webhooks button
  3. Cliquez sur Créer un nouveau webhook pour ouvrir le panneau Créer un webhook.Click Create new webhook to open the Create webhook blade.
  4. Spécifiez un Nom et une Date d’expiration pour le webhook, ainsi que s’il doit être activé.Specify a Name, Expiration Date for the webhook and whether it should be enabled. Pour plus d'informations sur ces propriétés, consultez Détails d'un webhook .See Details of a webhook for more information these properties.
  5. Cliquez sur l'icône de copie et appuyez sur Ctrl + C pour copier l'URL du webhook.Click the copy icon and press Ctrl+C to copy the URL of the webhook. Puis enregistrez-la dans un endroit sûr.Then record it in a safe place. Une fois que vous avez créé le webhook,vous ne pouvez pas récupérer l’URL à nouveau.Once you create the webhook, you cannot retrieve the URL again.
    URL du webhook Webhook URL
  6. Cliquez sur Paramètres pour fournir les valeurs des paramètres du Runbook.Click Parameters to provide values for the runbook parameters. Si le Runbook possède des paramètres obligatoires, vous ne pourrez pas créer le webhook, sauf si des valeurs sont fournies.If the runbook has mandatory parameters, then you will not be able to create the webhook unless values are provided.
  7. Cliquez sur Créer pour créer le webhook.Click Create to create the webhook.

Utilisation d'un webhookUsing a webhook

Pour utiliser un webhook après sa création, votre application cliente doit émettre une requête HTTP POST avec l'URL du webhook.To use a webhook after it has been created, your client application must issue an HTTP POST with the URL for the webhook. La syntaxe du webhook sera au format suivant.The syntax of the webhook will be in the following format.

http://<Webhook Server>/token?=<Token Value>

Le client reçoit l'un des codes de réponse suivants à la requête POST.The client will receive one of the following return codes from the POST request.

CodeCode TexteText DescriptionDescription
202202 AcceptéeAccepted La requête a été acceptée et le Runbook a été mis en file d'attente avec succès.The request was accepted, and the runbook was successfully queued.
400400 Demande incorrecteBad Request La demande a été refusée pour l'une des raisons suivantes.The request was not accepted for one of the following reasons.
  • Le webhook a expiré.The webhook has expired.
  • Le webhook est désactivé.The webhook is disabled.
  • Le jeton de l’URL n’est pas valide.The token in the URL is invalid.
404404 IntrouvableNot Found La demande a été refusée pour l'une des raisons suivantes.The request was not accepted for one of the following reasons.
  • Le webhook est introuvable.The webhook was not found.
  • Le Runbook est introuvable.The runbook was not found.
  • Le compte est introuvable.The account was not found.
500500 Erreur interne du serveurInternal Server Error L'URL est valide, mais une erreur s'est produite.The URL was valid, but an error occurred. Soumettez à nouveau la demande.Please resubmit the request.

En supposant que la requête aboutisse, la réponse webhook contient l'ID de travail au format JSON comme suit.Assuming the request is successful, the webhook response contains the job id in JSON format as follows. Elle contient un ID de tâche unique, mais le format JSON permet des améliorations ultérieures potentielles.It will contain a single job id, but the JSON format allows for potential future enhancements.

{"JobIds":["<JobId>"]}  

Le client ne peut pas déterminer l'issue du travail du Runbook ou de son état d'achèvement à partir du webhook.The client cannot determine when the runbook job completes or its completion status from the webhook. Il peut déterminer ces informations à l’aide de l’ID de travail avec une autre méthode telle que Windows PowerShell ou API d’Azure Automation.It can determine this information using the job id with another method such as Windows PowerShell or the Azure Automation API.

ExempleExample

L'exemple suivant utilise Windows PowerShell pour démarrer un Runbook avec un webhook.The following example uses Windows PowerShell to start a runbook with a webhook. Notez que n'importe quel langage qui peut effectuer une requête HTTP peut utiliser un webhook ; Windows PowerShell est uniquement utilisé ici à titre d'exemple.Note that any language that can make an HTTP request can use a webhook; Windows PowerShell is just used here as an example.

Le Runbook s'attend à une liste de machines virtuelles au format JSON dans le corps de la requête.The runbook is expecting a list of virtual machines formatted in JSON in the body of the request. Nous allons également inclure des informations sur qui démarre le Runbook, ainsi que la date et l'heure de son démarrage dans l'en-tête de la requête.We also are including information about who is starting the runbook and the date and time it is being started in the header of the request.

$uri = "https://s1events.azure-automation.net/webhooks?token=8ud0dSrSo%2fvHWpYbklW%3c8s0GrOKJZ9Nr7zqcS%2bIQr4c%3d"
$headers = @{"From"="user@contoso.com";"Date"="05/28/2015 15:47:00"}

$vms  = @(
            @{ Name="vm01";ServiceName="vm01"},
            @{ Name="vm02";ServiceName="vm02"}
        )
$body = ConvertTo-Json -InputObject $vms

$response = Invoke-RestMethod -Method Post -Uri $uri -Headers $headers -Body $body
$jobid = ConvertFrom-Json $response

L'illustration suivante montre les informations d'en-tête (à l'aide d'un suivi Fiddler ) à partir de cette requête.The following image shows the header information (using a Fiddler trace) from this request. Cela inclut les en-têtes standard d'une requête HTTP en plus des en-têtes Date et De personnalisés que nous avons ajoutés.This includes standard headers of an HTTP request in addition to the custom Date and From headers that we added. Chacune de ces valeurs est disponible pour le Runbook dans la propriété RequestHeaders de WebhookData.Each of these values is available to the runbook in the RequestHeaders property of WebhookData.

Bouton Webhooks

L’illustration suivante montre le corps de la requête (à l’aide d’un suivi Fiddler) qui est disponible pour le Runbook dans la propriété RequestBody de WebhookData.The following image shows the body of the request (using a Fiddler trace) that is available to the runbook in the RequestBody property of WebhookData. Il est au format JSON car il s'agit du format qui a été inclus dans le corps de la requête.This is formatted as JSON because that was the format that was included in the body of the request.

Bouton Webhooks

L'illustration suivante montre la requête envoyée à partir de Windows PowerShell et sa réponse.The following image shows the request being sent from Windows PowerShell and the resulting response. L'ID de travail est extrait de la réponse et converti en une chaîne.The job id is extracted from the response and converted to a string.

Bouton Webhooks

L’exemple suivant de runbook accepte la requête de l’exemple précédent et démarre les machines virtuelles spécifiées dans le corps de la requête.The following sample runbook accepts the previous example request and starts the virtual machines specified in the request body.

workflow Test-StartVirtualMachinesFromWebhook
{
    param (
        [object]$WebhookData
    )

    # If runbook was called from Webhook, WebhookData will not be null.
    if ($WebhookData -ne $null) {

        # Collect properties of WebhookData
        $WebhookName     =     $WebhookData.WebhookName
        $WebhookHeaders =     $WebhookData.RequestHeader
        $WebhookBody     =     $WebhookData.RequestBody

        # Collect individual headers. VMList converted from JSON.
        $From = $WebhookHeaders.From
        $VMList = ConvertFrom-Json -InputObject $WebhookBody
        Write-Output "Runbook started from webhook $WebhookName by $From."

        # Authenticate to Azure resources
        $Cred = Get-AutomationPSCredential -Name 'MyAzureCredential'
        Add-AzureAccount -Credential $Cred

        # Start each virtual machine
        foreach ($VM in $VMList)
        {
            $VMName = $VM.Name
            Write-Output "Starting $VMName"
            Start-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName
        }
    }
    else {
        Write-Error "Runbook mean to be started only from webhook."
    }
}

Démarrage de runbooks en réponse aux alertes AzureStarting runbooks in response to Azure alerts

Les runbooks webhook peuvent être utilisés pour réagir aux alertes Azure.Webhook-enabled runbooks can be used to react to Azure alerts. Les ressources dans Azure peuvent être surveillées en collectant, au moyen d’alertes Azure, des statistiques telles que les performances, la disponibilité et l’utilisation.Resources in Azure can be monitored by collecting the statistics like performance, availability and usage with the help of Azure alerts. Vous pouvez recevoir une alerte basée sur des métriques ou événements de surveillance pour vos ressources Azure ; actuellement les comptes Automation prennent uniquement en charge les métriques.You can receive an alert based on monitoring metrics or events for your Azure resources, currently Automation Accounts support only metrics. Quand la valeur d’une métrique spécifiée dépasse le seuil attribué ou si l’événement configuré est déclenché, une notification est envoyée à l’administrateur ou aux co-administrateurs du service pour résoudre l’alerte. Pour plus d’informations sur les métriques et les événements, reportez-vous aux alertes Azure.When the value of a specified metric exceeds the threshold assigned or if the configured event is triggered then a notification is sent to the service admin or co-admins to resolve the alert, for more information on metrics and events please refer to Azure alerts.

Outre l’utilisation des alertes Azure comme système de notification, vous pouvez aussi lancer des runbooks en réponse aux alertes.Besides using Azure alerts as a notification system, you can also kick off runbooks in response to alerts. Azure Automation vous permet d’exécuter des runbooks webhook compatibles avec les alertes Azure.Azure Automation provides the capability to run webhook-enabled runbooks with Azure alerts. Quand une métrique dépasse la valeur configurée du seuil, la règle d’alerte devient active et déclenche le webhook Automation qui, à son tour, exécute le runbook.When a metric exceeds the configured threshold value then the alert rule becomes active and triggers the automation webhook which in turn executes the runbook.

Webhooks

Contexte de l’alerteAlert context

Prenons une ressource Azure, par exemple, une machine virtuelle. L’utilisation du processeur de cette machine est l’une des principales métriques de performance.Consider an Azure resource such as a virtual machine, CPU utilization of this machine is one of the key performance metric. Si l’utilisation du processeur est de 100 % ou qu’elle est supérieure à une certaine quantité pendant une longue période de temps, vous voudrez probablement redémarrer la machine virtuelle pour résoudre le problème.If the CPU utilization is 100% or more than a certain amount for long period of time, you might want to restart the virtual machine to fix the problem. Pour ce faire, vous pouvez configurer une règle d’alerte sur la machine virtuelle avec le pourcentage UC en guise de métrique.This can be solved by configuring an alert rule to the virtual machine and this rule takes CPU percentage as its metric. Dans ce scénario, le pourcentage UC est choisi à titre d’exemple, mais vous pouvez configurer beaucoup d’autres métriques pour vos ressources Azure. De même, le redémarrage de la machine virtuelle est l’action choisie pour résoudre ce problème, mais vous pouvez configurer le runbook pour exécuter d’autres actions.CPU percentage here is just taken as an example but there are many other metrics that you can configure to your Azure resources and restarting the virtual machine is an action that is taken to fix this issue, you can configure the runbook to take other actions.

Quand cette règle d’alerte devient active et déclenche le runbook webhook, elle envoie le contexte de l’alerte au runbook.When this the alert rule becomes active and triggers the webhook-enabled runbook, it sends the alert context to the runbook. Le contexte de l’alerte contient des informations, notamment SubscriptionID, ResourceGroupName, ResourceName, ResourceType, ResourceId et Timestamp, qui sont utilisées par le Runbook pour identifier la ressource sur laquelle il doit exécuter une action.Alert context contains details including SubscriptionID, ResourceGroupName, ResourceName, ResourceType, ResourceId and Timestamp which are required for the runbook to identify the resource on which it will be taking action. Le contexte de l’alerte est incorporé dans le corps de l’objet WebhookData envoyé au runbook, et il est accessible avec la propriété Webhook.RequestBodyAlert context is embedded in the body part of the WebhookData object sent to the runbook and it can be accessed with Webhook.RequestBody property

ExempleExample

Créez une machine virtuelle Azure dans votre abonnement, puis associez une alerte pour surveiller la métrique du pourcentage UC.Create an Azure virtual machine in your subscription and associate an alert to monitor CPU percentage metric. Quand vous créez l’alerte, veillez à remplir le champ webhook par l’URL du webhook qui a été générée pendant la création de celui-ci.While creating the alert make sure you populate the webhook field with the URL of the webhook which was generated while creating the webhook.

L’exemple de runbook suivant est déclenché quand la règle d’alerte devient active et collecte les paramètres de contexte de l’alerte qui servent au runbook pour identifier la ressource sur laquelle il devra exécuter une action.The following sample runbook is triggered when the alert rule becomes active and it collects the Alert context parameters which are required for the runbook to identify the resource on which it will be taking action.

workflow Invoke-RunbookUsingAlerts
{
    param (      
        [object]$WebhookData
    )

    # If runbook was called from Webhook, WebhookData will not be null.
    if ($WebhookData -ne $null) {   
        # Collect properties of WebhookData.
        $WebhookName    =   $WebhookData.WebhookName
        $WebhookBody    =   $WebhookData.RequestBody
        $WebhookHeaders =   $WebhookData.RequestHeader

        # Outputs information on the webhook name that called This
        Write-Output "This runbook was started from webhook $WebhookName."


        # Obtain the WebhookBody containing the AlertContext
        $WebhookBody = (ConvertFrom-Json -InputObject $WebhookBody)
        Write-Output "`nWEBHOOK BODY"
        Write-Output "============="
        Write-Output $WebhookBody

        # Obtain the AlertContext     
        $AlertContext = [object]$WebhookBody.context

        # Some selected AlertContext information
        Write-Output "`nALERT CONTEXT DATA"
        Write-Output "==================="
        Write-Output $AlertContext.name
        Write-Output $AlertContext.subscriptionId
        Write-Output $AlertContext.resourceGroupName
        Write-Output $AlertContext.resourceName
        Write-Output $AlertContext.resourceType
        Write-Output $AlertContext.resourceId
        Write-Output $AlertContext.timestamp

        # Act on the AlertContext data, in our case restarting the VM.
        # Authenticate to your Azure subscription using Organization ID to be able to restart that Virtual Machine.
        $cred = Get-AutomationPSCredential -Name "MyAzureCredential"
        Add-AzureAccount -Credential $cred
        Select-AzureSubscription -subscriptionName "Visual Studio Ultimate with MSDN"

        #Check the status property of the VM
        Write-Output "Status of VM before taking action"
        Get-AzureVM -Name $AlertContext.resourceName -ServiceName $AlertContext.resourceName
        Write-Output "Restarting VM"

        # Restart the VM by passing VM name and Service name which are same in this case
        Restart-AzureVM -ServiceName $AlertContext.resourceName -Name $AlertContext.resourceName
        Write-Output "Status of VM after alert is active and takes action"
        Get-AzureVM -Name $AlertContext.resourceName -ServiceName $AlertContext.resourceName
    }
    else  
    {
        Write-Error "This runbook is meant to only be started from a webhook."  
    }  
}

Étapes suivantesNext steps