I am trying to automate the deployment of our environment vir ARM templates. I can deploy Event Grid and Function Apps but now I need to subscribe the function app to the Event Grid after the function app is deployed. Is there a way to get the webhook url for the function app
We are able to create the subscription via ARM once we have the webhook url - but to get to the correct url seems to be where we are falling of the boat.
Any help please
On the function page, select Code + Test from the left menu. Select Get function URL from the top menu and copy the URL.
Azure Functions may be invoked via HTTP requests to build serverless APIs and respond to webhooks.
I managed to get this working with the help of the answers from @Van and @Barrie above.
This script returns the masterkey and defaultkey from the azure api, which enables you to create an eventgrid subscription from a functionApp/webApp in your release pipeline.
Van's script (30 Jul) worked with FA version 1 but it did not work for FunctionApps V2 (something was changed in the api). When using this script in V2 the error was:
Runtime keys are stored on blob storage. This API doesn't support this configuration. Please change Environment variable AzureWebJobsSecretStorageType value to 'Files'.
I amended this script and now it works with V2:
#DEBUG: when debugging (running in powershell on local pc) you need to comment out the next line by starting the line with #
param($resourceGroupName, $webAppname)
function Get-PublishingProfileCredentials($resourceGroupName, $webAppName){
$resourceType = "Microsoft.Web/sites/config"
$resourceName = "$webAppName/publishingcredentials"
$publishingCredentials = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName -ResourceType $resourceType -ResourceName $resourceName -Action list -ApiVersion 2015-08-01 -Force
return $publishingCredentials
}
function Get-KuduApiAuthorisationHeaderValue($resourceGroupName, $webAppName){
$publishingCredentials = Get-PublishingProfileCredentials $resourceGroupName $webAppName
return ("Basic {0}" -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $publishingCredentials.Properties.PublishingUserName, $publishingCredentials.Properties.PublishingPassword))))
}
function Get-MasterAPIKey($kuduApiAuthorisationToken, $webAppName ){
$bearerToken = Invoke-RestMethod -Uri https://$webAppName.scm.azurewebsites.net/api/functions/admin/token -Headers @{"Authorization"=$kuduApiAuthorisationToken;"If-Match"="*"}
$masterkeyResponse = Invoke-RestMethod -Method GET -Headers @{Authorization=("Bearer {0}" -f $bearerToken)} -Uri "https://$webAppName.azurewebsites.net/admin/host/systemkeys/_master"
$masterKeyValue = $masterkeyResponse.value
return $masterKeyValue
}
function Get-HostAPIKeys($kuduApiAuthorisationToken, $webAppName, $masterKey ){
$apiUrl = "https://$webAppName.azurewebsites.net/admin/host/keys?code=$masterKey"
$result = Invoke-WebRequest $apiUrl
return $result
}
#DEBUG: when debugging this in powershell on my local pc I use this to authenticate (remove # to uncomment the next line):
#Login-AzureRmAccount -SubscriptionName "Insert_Subscription_Name_Here"
#DEBUG: when debugging you need to set these parameters:
# $resourceGroupName = "Insert_ResourceGroup_Name_Here"
# $webAppname = "Insert_FunctionApp_Name_Here"
#Auth Header
$kuduToken = Get-KuduApiAuthorisationHeaderValue $resourceGroupName $webAppName
#MasterKey
$masterKey = Get-MasterAPIKey $kuduToken $webAppName
Write-Host "masterKey = " $masterKey
#Default Key
$result = Get-HostAPIKeys $kuduToken $webAppName $masterkey
$keysCode = $result.Content | ConvertFrom-Json
Write-Host "default Key = " $keysCode.Keys[0].Value
#Set Return Values:
$faMasterKey = $masterkey
$faDefaultKey = $keysCode.Keys[0].Value
Write-Output ("##vso[task.setvariable variable=fa_MasterKey;]$faMasterKey")
Write-Output ("##vso[task.setvariable variable=fa_DefaultKey;]$faDefaultKey")
There is only a small difference between this script and Van's script. The major difference is that this script will work on Azure CLI Functions V2. More info: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With