Avviare un runbook di Automazione di Azure con un webhookStarting an Azure Automation runbook with a webhook

Un webhook consente di avviare un Runbook specifico in Automazione di Azure tramite una singola richiesta HTTP.A webhook allows you to start a particular runbook in Azure Automation through a single HTTP request. In questo modo, i servizi esterni come Visual Studio Team Services, GitHub, Log Analytics di Azure o le applicazioni personalizzate possono avviare i runbook senza implementare una soluzione completa usando l'API di Automazione di Azure.This allows external services such as Visual Studio Team Services, GitHub, Azure Log Analytics, or custom applications to start runbooks without implementing a full solution using the Azure Automation API.
Panoramica dei webhookWebhooksOverview

È possibile confrontare i webhook con altre modalità di avvio di un Runbook nell'articolo relativo all' avvio di un Runbook in Automazione di AzureYou can compare webhooks to other methods of starting a runbook in Starting a runbook in Azure Automation

Informazioni dettagliate sui webhookDetails of a webhook

La tabella seguente descrive le proprietà che devono essere configurate per un webhook.The following table describes the properties that you must configure for a webhook.

ProprietàProperty DESCRIZIONEDescription
NOMEName È possibile specificare un nome qualsiasi per un webhook dal momento che non viene esposto al client.You can provide any name you want for a webhook since this is not exposed to the client. Viene usato solo per consentire all'utente di identificare il Runbook in Automazione di Azure.It is only used for you to identify the runbook in Azure Automation.
Come procedura consigliata, è opportuno assegnare al webhook un nome correlato al client in cui verrà usato.As a best practice, you should give the webhook a name related to the client that will use it.
URLURL L'URL del webhook è l'indirizzo univoco che viene chiamato da un client con HTTP POST per avviare il Runbook collegato al 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. Viene generato automaticamente al momento della creazione del webhook.It is automatically generated when you create the webhook. Non è possibile specificare un URL personalizzato.You cannot specify a custom URL.

L'URL contiene un token di sicurezza che consente al Runbook di essere richiamato da un sistema di terze parti senza un'autenticazione aggiuntiva.The URL contains a security token that allows the runbook to be invoked by a third party system with no further authentication. Per questo motivo, deve essere considerato come una password.For this reason, it should be treated like a password. Per motivi di sicurezza, è possibile visualizzare l'URL solo nel portale di Azure al momento della creazione del webhook.For security reasons, you can only view the URL in the Azure portal at the time the webhook is created. È consigliabile prendere nota dell'URL e conservarlo in un luogo sicuro per usi futuri.You should note the URL in a secure location for future use.
Expiration dateExpiration date Analogamente a un certificato, un webhook ha una data di scadenza oltre la quale non può più essere usato.Like a certificate, each webhook has an expiration date at which time it can no longer be used. La data di scadenza può essere modificata dopo la creazione del webhook.This expiration date can be modified after the webhook is created.
AttivatoEnabled Un webhook viene abilitato per impostazione predefinita nel momento in cui viene creato.A webhook is enabled by default when it is created. Se viene impostato su Disabled, nessun client sarà in grado di usarlo.If you set it to Disabled, then no client will be able to use it. È possibile impostare la proprietà Enabled quando si crea il webhook o in qualsiasi momento successivo.You can set the Enabled property when you create the webhook or anytime once it is created.

ParametriParameters

Un webhook può definire valori per parametri di Runbook usati quando il Runbook viene avviato dal webhook.A webhook can define values for runbook parameters that are used when the runbook is started by that webhook. Il webhook deve includere valori per tutti i parametri obbligatori del Runbook e può includere valori per i parametri facoltativi.The webhook must include values for any mandatory parameters of the runbook and may include values for optional parameters. Un valore di parametro configurato per un webhook può essere modificato anche dopo aver creato il webhook.A parameter value configured to a webhook can be modified even after creating the webhook. Se esistono più webhook collegati a un singolo Runbook, ognuno di essi potrà usare valori di parametri diversi.Multiple webhooks linked to a single runbook can each use different parameter values.

Quando avvia un Runbook con un webhook, un client non può eseguire l'override dei valori di parametri definiti nel webhook.When a client starts a runbook using a webhook, it cannot override the parameter values defined in the webhook. Per ricevere dati dal client, il Runbook può accettare un singolo parametro denominato $WebhookData di tipo [object] che conterrà i dati inclusi dal client nella richiesta 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.

Proprietà Webhookdata

L'oggetto $WebhookData disporrà delle proprietà seguenti:The $WebhookData object will have the following properties:

ProprietàProperty DESCRIZIONEDescription
WebhookNameWebhookName Nome del webhook.The name of the webhook.
RequestHeaderRequestHeader Tabella hash contenente le intestazioni della richiesta POST in ingresso.Hash table containing the headers of the incoming POST request.
RequestBodyRequestBody Corpo della richiesta POST in ingresso.The body of the incoming POST request. Manterrà tutta la formattazione, ad esempio stringa, JSON, XML o dati codificati in un form.This will retain any formatting such as string, JSON, XML, or form encoded data. Il Runbook deve essere scritto in modo che funzioni con il formato di dati previsto.The runbook must be written to work with the data format that is expected.

Non è richiesta alcuna configurazione del webhook per supportare il parametro $WebhookData e il Runbook non deve necessariamente accettarlo.There is no configuration of the webhook required to support the $WebhookData parameter, and the runbook is not required to accept it. Se il Runbook non definisce il parametro, gli eventuali dettagli della richiesta inviata dal client verranno ignorati.If the runbook does not define the parameter, then any details of the request sent from the client is ignored.

Se si specifica un valore per $WebhookData quando si crea il webhook, viene eseguito l'override di tale valore quando il webhook avvia il runbook con i dati della richiesta POST del client, anche se il client non include dati nel corpo della richiesta.If you specify a value for $WebhookData when you create the webhook, that value will be overridden 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. Se si avvia un Runbook con l'oggetto $WebhookData che usa un metodo diverso da un webhook, è possibile specificare un valore per $Webhookdata che verrà riconosciuto dal 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. Questo valore deve essere un oggetto con le stesse proprietà di $Webhookdata in modo che il Runbook possa usarlo correttamente come se stesse usando con il WebhookData effettivo passato da 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.

Ad esempio, se si inizia il seguente runbook dal portale di Azure e si desidera passare alcuni esempi WebhookData per testarli, poiché WebhookData è un oggetto, deve essere passato come JSON nell'interfaccia utente.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.

Parametro WebhookData dall'interfaccia utente

Per il runbook riportato sopra, se si hanno le seguenti proprietà per il parametro 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”]

Passare quindi il seguente valore JSON nell'interfaccia utente per il parametro 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"]"}

Parametro WebhookData Start dall'interfaccia utente

Nota

I valori di tutti i parametri di input vengono registrati con il processo di Runbook.The values of all input parameters are logged with the runbook job. Qualsiasi input fornito dal client nella richiesta del webhook verrà quindi registrato e sarà disponibile per chiunque abbia accesso al processo di automazione.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. Per questo motivo è consigliabile procedere con cautela quando si includono dati sensibili nelle chiamate di webhook.For this reason, you should be cautious about including sensitive information in webhook calls.

SicurezzaSecurity

La sicurezza di un webhook si basa sulla privacy dell'URL che contiene un token di sicurezza che consente di richiamarlo.The security of a webhook relies on the privacy of its URL which contains a security token that allows it to be invoked. Automazione di Azure non esegue alcuna autenticazione per la richiesta, purché venga inviata all'URL corretto.Azure Automation does not perform any authentication on the request as long as it is made to the correct URL. Per questo motivo, non è consigliabile usare i webhook per i Runbook che eseguono funzioni sensibili senza usare una modalità alternativa di convalida della richiesta.For this reason, webhooks should not be used for runbooks that perform highly sensitive functions without using an alternate means of validating the request.

È possibile includere nel Runbook la logica per determinare che è stato chiamato da un webhook selezionando la proprietà WebhookName del parametro $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. Il runbook può eseguire altre convalide cercando informazioni specifiche nella proprietà RequestHeader o RequestBody.The runbook could perform further validation by looking for particular information in the RequestHeader or RequestBody properties.

Un'altra strategia consiste nel fare in modo che il Runbook esegua la convalida di una condizione esterna quando riceve una richiesta da un webhook.Another strategy is to have the runbook perform some validation of an external condition when it received a webhook request. Si consideri ad esempio un Runbook chiamato da GitHub ogni volta che si verifica un nuovo commit in un repository di GitHub.For example, consider a runbook that is called by GitHub whenever there is a new commit to a GitHub repository. Il Runbook può connettersi a GitHub per convalidare che si sia effettivamente verificato un nuovo commit prima di continuare.The runbook might connect to GitHub to validate that a new commit had actually just occurred before continuing.

Creazione di un webhookCreating a webhook

Seguire questa procedura per creare un nuovo webhook collegato a un Runbook nel portale di Azure.Use the following procedure to create a new webhook linked to a runbook in the Azure portal.

  1. Nella pagina Runbook nel portale di Azure fare clic sul runbook che verrà avviato dal webhook per visualizzare la pagina dei dettagli.From the Runbooks page in the Azure portal, click the runbook that the webhook will start to view its detail page.
  2. Fare clic su Webhook nella parte superiore della pagina per aprire la pagina Aggiungi webhook.Click Webhook at the top of the page to open the Add Webhook page.
    Pulsante WebhooksWebhooks button
  3. Fare clic su Creare un nuovo webhook per aprire la pagina Crea webhook.Click Create new webhook to open the Create webhook page.
  4. Specificare un valore per Nome e Data scadenza per il webhook e indicare se deve essere abilitato.Specify a Name, Expiration Date for the webhook and whether it should be enabled. Per altre informazioni su queste proprietà, vedere Informazioni dettagliate sui webhook .See Details of a webhook for more information these properties.
  5. Fare clic sull'icona di copia e premere CTRL+C per copiare l'URL del webhook.Click the copy icon and press Ctrl+C to copy the URL of the webhook. Annotarlo in un luogo sicuro.Then record it in a safe place. Dopo aver creato il webhook, non è possibile recuperare di nuovo l'URL.Once you create the webhook, you cannot retrieve the URL again.
    URL di webhookWebhook URL
  6. Fare clic su Parameters per specificare i valori per i parametri del Runbook.Click Parameters to provide values for the runbook parameters. Se il Runbook ha parametri obbligatori, non sarà possibile creare il webhook a meno che non vengano messi a disposizione i valori.If the runbook has mandatory parameters, then you will not be able to create the webhook unless values are provided.
  7. Fare clic su Create per creare il webhook.Click Create to create the webhook.

Uso di un webhookUsing a webhook

Per usare un webhook dopo averlo creato, l'applicazione client deve inviare una richiesta HTTP POST con l'URL del 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 sintassi del webhook sarà nel formato seguente.The syntax of the webhook will be in the following format.

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

Il client riceverà uno dei codici restituiti seguenti dalla richiesta POST.The client will receive one of the following return codes from the POST request.

CodiceCode TestoText DESCRIZIONEDescription
202202 AcceptedAccepted La richiesta è stata accettata e il Runbook è stato accodato.The request was accepted, and the runbook was successfully queued.
400400 Bad RequestBad Request La richiesta non è stata accettata per uno dei motivi seguenti.The request was not accepted for one of the following reasons.
  • Il webhook è scaduto.The webhook has expired.
  • Il webhook è disabilitato.The webhook is disabled.
  • Il token nell'URL non è valido.The token in the URL is invalid.
404404 Non trovatoNot Found La richiesta non è stata accettata per uno dei motivi seguenti.The request was not accepted for one of the following reasons.
  • Il webhook non è stato trovato.The webhook was not found.
  • Il runbook non è stato trovato.The runbook was not found.
  • L'account non è stato trovato.The account was not found.
500500 Internal Server ErrorInternal Server Error L'URL è valido, ma si è verificato un errore.The URL was valid, but an error occurred. Inviare di nuovo la richiesta.Please resubmit the request.

Presupponendo che la richiesta riesca, la risposta del webhook conterrà l'ID processo in formato JSON come indicato di seguito.Assuming the request is successful, the webhook response contains the job id in JSON format as follows. Conterrà un singolo ID processo, ma il formato JSON consente potenziali miglioramenti futuri.It will contain a single job id, but the JSON format allows for potential future enhancements.

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

Il client non è in grado di determinare quando viene completato il processo del Runbook o lo stato di avanzamento dal webhook.The client cannot determine when the runbook job completes or its completion status from the webhook. Può determinare queste informazioni usando l'ID processo con un altro metodo, ad esempio Windows PowerShell o l'API di Automazione di Azure.It can determine this information using the job id with another method such as Windows PowerShell or the Azure Automation API.

EsempioExample

L'esempio seguente usa Windows PowerShell per avviare un Runbook con un webhook.The following example uses Windows PowerShell to start a runbook with a webhook. Si noti che qualsiasi linguaggio in grado di creare una richiesta HTTP può usare un webhook. Windows PowerShell viene usato qui solo come esempio.Note that any language that can make an HTTP request can use a webhook; Windows PowerShell is just used here as an example.

Il Runbook prevede un elenco di macchine virtuali in formato JSON nel corpo della richiesta.The runbook is expecting a list of virtual machines formatted in JSON in the body of the request. Nell'intestazione della richiesta vengono incluse anche informazioni sull'utente che avvia il Runbook e la data e l'ora di avvio.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'immagine seguente illustra le informazioni di intestazione (usando una traccia di Fiddler ) dalla richiesta.The following image shows the header information (using a Fiddler trace) from this request. Sono incluse le intestazioni standard di una richiesta HTTP, oltre alla data personalizzata e le intestazioni DA aggiunte.This includes standard headers of an HTTP request in addition to the custom Date and From headers that we added. Ognuno di questi valori è disponibile per il runbook nella proprietà RequestHeaders di WebhookData.Each of these values is available to the runbook in the RequestHeaders property of WebhookData.

Pulsante Webhooks

L'immagine seguente mostra il corpo della richiesta (usando una traccia di Fiddler) disponibile per il runbook nella proprietà RequestBody di 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. Viene formattata come JSON perché questo era il formato incluso nel corpo della richiesta.This is formatted as JSON because that was the format that was included in the body of the request.

Pulsante Webhooks

L'immagine seguente mostra la richiesta inviata da Windows PowerShell e la risposta risultante.The following image shows the request being sent from Windows PowerShell and the resulting response. L'ID processo viene estratto dalla risposta e convertito in una stringa.The job id is extracted from the response and converted to a string.

Pulsante Webhooks

Il Runbook di esempio seguente accetta la richiesta di esempio precedente e avvia le macchine virtuali specificate nel corpo della richiesta.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."
    }
}

Avvio di runbook in risposta agli avvisi di AzureStarting runbooks in response to Azure alerts

I runbook abilitati per i webhook possono essere usati in risposta agli avvisi di Azure.Webhook-enabled runbooks can be used to react to Azure alerts. È possibile monitorare le risorse in Azure grazie alla raccolta di statistiche relative, ad esempio, a prestazioni, disponibilità e uso con l'aiuto degli avvisi di Azure.Resources in Azure can be monitored by collecting the statistics like performance, availability and usage with the help of Azure alerts. È possibile ricevere avvisi basati su metriche o eventi di monitoraggio per i servizi di Azure, attualmente gli account di automazione supportano solo le metriche.You can receive an alert based on monitoring metrics or events for your Azure resources, currently Automation Accounts support only metrics. Quando il valore di una metrica specifica supera la soglia assegnata o se l'evento configurato viene attivato quando una notifica viene inviata all'amministratore o ai coamministratori del servizio per risolvere l'avviso, per altre informazioni sulle metriche e sugli eventi, vedere gli avvisi di 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.

Oltre a usare gli avvisi di Azure come sistema di notifica, è anche possibile avviare i runbook in risposta agli avvisi.Besides using Azure alerts as a notification system, you can also kick off runbooks in response to alerts. Automazione di Azure offre la possibilità di eseguire runbook abilitati per i webhook con gli avvisi di Azure.Azure Automation provides the capability to run webhook-enabled runbooks with Azure alerts. Quando una metrica supera il valore di soglia configurato, la regola dell'avviso viene abilitata e attiva il webhook di automazione che a sua volta esegue il 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.

Webhook

Contesto dell'avvisoAlert context

Se si considera una risorsa di Azure, ad esempio una macchina virtuale, l'uso della CPU del computer rappresenta una delle metriche fondamentali relative alle prestazioni.Consider an Azure resource such as a virtual machine, CPU utilization of this machine is one of the key performance metric. Se l'uso della CPU è pari al 100% o più di una certa quantità per un lungo periodo di tempo, si potrebbe voler riavviare la macchina virtuale per risolvere il problema.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. Questo problema può essere risolto tramite la configurazione di una regola di avviso per la macchina virtuale. Tale regola userà la percentuale di CPU come metrica.This can be solved by configuring an alert rule to the virtual machine and this rule takes CPU percentage as its metric. La percentuale di CPU viene usata solo come esempio. È tuttavia possibile configurare numerose altre metriche per le risorse di Azure e riavviare la macchina virtuale per risolvere il problema. È comunque possibile configurare il runbook per eseguire altre operazioni.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.

Quando la regola di avviso viene abilitata e attiva il runbook abilitato per i webhook, la regola invia il contesto dell'avviso al runbook.When this the alert rule becomes active and triggers the webhook-enabled runbook, it sends the alert context to the runbook. Il contesto dell'avviso contiene dettagli, tra cui i valori di SubscriptionID, ResourceGroupName, ResourceName, ResourceType, ResourceId e Timestamp richiesti dal runbook per identificare la risorsa in cui verrà eseguita l'azione.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. Il contesto dell'avviso è incorporato nel corpo del contesto dell'oggetto WebhookData inviato al runbook, a cui è possibile accedere con la proprietà Webhook.RequestBody.Alert context is embedded in the body part of the WebhookData object sent to the runbook and it can be accessed with Webhook.RequestBody property

EsempioExample

Creare una macchina virtuale di Azure nella sottoscrizione corrente e associare un avviso per monitorare la metrica relativa alla percentuale della CPU.Create an Azure virtual machine in your subscription and associate an alert to monitor CPU percentage metric. Durante la creazione dell'avviso assicurarsi di popolare il campo del webhook con l'URL del webhook generato durante la creazione del webhook stesso.While creating the alert make sure you populate the webhook field with the URL of the webhook which was generated while creating the webhook.

Il seguente runbook di esempio viene attivato quando la regola dell'avviso diventa attiva e raccoglie i parametri del contesto dell'avviso. Tali parametri consentono al runbook di identificare la risorsa in cui verrà eseguita l'azione.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."  
    }  
}

Passaggi successiviNext steps