azure - 获取 ARM 中函数应用程序的 Webhook url 以用于事件网格订阅
问题描述
我正在尝试自动部署我们的环境 vir ARM 模板。我可以部署事件网格和函数应用,但现在我需要在部署函数应用后将函数应用订阅到事件网格。有没有办法获取函数应用程序的 webhook url
- 通过 ARM
- 发布管道中的其他一些组件(Powershell)
一旦我们有了 webhook url,我们就可以通过 ARM 创建订阅 - 但是要访问正确的 url 似乎是我们落伍的地方。
请提供任何帮助
解决方案
在上面@Van 和@Barrie 的答案的帮助下,我设法完成了这项工作。
此脚本从 azure api 返回 masterkey 和 defaultkey,这使您能够从发布管道中的 functionApp/webApp 创建 eventgrid 订阅。
Van 的脚本(7 月 30 日)适用于 FA 版本 1,但不适用于 FunctionApps V2(api 中有所更改)。在 V2 中使用此脚本时,错误是:
运行时密钥存储在 blob 存储中。此 API 不支持此配置。请将环境变量 AzureWebJobsSecretStorageType 值更改为“文件”。
我修改了这个脚本,现在它适用于 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")
这个剧本和范的剧本只有很小的区别。主要区别在于此脚本将在 Azure CLI Functions V2 上运行。更多信息:https ://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid
推荐阅读
- javascript - 模块化算术和大幂幂
- file-format - C#.NET 中的 GEDCOM 兼容文件输出
- vba - 如何将文本框链接到 Excel 中特定工作表上的特定单元格?
- javascript - JavaScript 取消组合对象中的数据
- python - 将变量传递给 By.CSS_SELECTOR,得到 InvalidSelectorException Python
- python-3.x - 使用 Selenium 获取文本文件中的行内容
- spring - 如何在 Spring Boot 项目中集成测试数据库视图
- lua - Lua 中我不理解的变量声明
- node.js - 如何在 Node.js 中将 S3 URL 链接到 MongoDB?
- ubuntu - ros旋律解依赖