In Azure Automation, you can create a webhook for a runbook and target it to a Hybrid Worker group (as opposed to run on Azure). In the Azure portal, it is pretty easy to configure this ‘RunOn’ property when you are creating the webhook.
However, at the time of writing this blog post, it is STILL not possible to specify where the webhook should target when creating it using the Azure Automation PowerShell module AzureRM.Automation (version 3.1.0 at the time of writing). The cmdlet New-AzureRMAutomationWebhook does not provide a parameter where you can specify the webhook “RunOn” target:
there are several issues already logged by the community to the Azure PowerShell GitHub repo for this limitation:
I needed to create webhooks targeting Hybrid Worker groups in a PowerShell script last week, so I looked into using alternative methods. Other than the AzureRM.Automation PowerShell module, we can also create webhooks using the Azure Resource Manager (ARM) REST API and the ARM deployment templates. According to the documentations, both the REST API and template support the “RunOn” parameter. so this limitation is only related to the AzureRM.Automation PowerShell module. The REST API and ARM template documentations are located here:
- REST API: https://docs.microsoft.com/en-us/rest/api/automation/webhook#Webhook_CreateOrUpdate
- ARM Template: https://docs.microsoft.com/en-us/azure/templates/microsoft.automation/automationaccounts/webhooks
I ended up using the REST API in my solution and managed to create webhooks targeting Hybrid Worker Groups. Based on my experience, the documentation for the webhook Create / Update operation in the REST API is not very clear. As you can see below, The sample request body does not contain some important parameters: the ‘RunOn’ parameter for specifying where the webhook should target and the ‘parameters’ parameter for specifying the input parameters of the runbook:
In this post, I will share the code block I used to create the webhook. For demonstration purposes, I have created a very simple Hello World runbook that takes a single input parameter call “Name”:
[CmdletBinding()] PARAM ( [Parameter(Mandatory = $true)][String]$Name ) Write-output "Hello $Name"
Sample code for creating the webhook on Hybrid Worker groups:
Note: this sample script uses a function called Get-AADToken, which was discussed in my previous blog post: https://blog.tyang.org/2017/06/12/powershell-function-to-get-azure-ad-token/
After I executed this block of code, a webhook is successfully created targeting my hybrid worker group with a validity period of 10 years: