当函数设置为只读时如何创建 Azure 函数、函数键
How to create a Azure Function, Function Key when your functions are set to Readonly
总结: 我直接在 Visual Studio 中编写一个函数,其设计导致门户中的只读函数管理。我的问题是 easily 如何为所述 webhook 创建功能键?
上下文: 我正在尝试将通用 Webhook 连接到事件网格。这个过程让我走上了一条需要触发 SubscriptionValidationEvent 的道路,这反过来又要求我的 webhook 在 URL 上提供一个 "code",我假设这是一个功能键。
另外,在我投反对票之前,我非常清楚这个问题已经有多种变体在这里提出和回答。我已经尝试了所有这些方法,出于某种原因 none 涉及使用 Kudu 信用针对记录不完整的密钥 API 编写 PowerShell 的解决方案似乎对我有用。
我希望有人知道使用 CLI 或更简单的方法来解决此问题,即手动创建 functionName.json
文件并将其放入 secrets 目录中。
最后,尽管我很想使用预发布 EventGrid 绑定,但我目前无法在我的环境中推送预发布代码。
从 Powershell
:
找到这篇关于如何管理 azure 函数键的有趣文章
还有官方文档(很难找到这个 wiki):
这里是重点:
- 获取发布凭据
- 生成 Kudu API 授权令牌
- 调用 Kudu /api/functions/admin/token 获取可与函数键一起使用的 JWT API
- 那你就可以为所欲为了
这是我现有的脚本
Param(
[string] [Parameter(Mandatory=$true)] $resourceGroupName,
[string] [Parameter(Mandatory=$true)] $functionappName,
[string] [Parameter(Mandatory=$true)] $keyname,
[string] [Parameter()] $slot
)
if (![string]::IsNullOrWhiteSpace($slot)){
$apiBaseUrl = "https://$functionappName-$slot.scm.azurewebsites.net/api"
$siteBaseUrl = "https://$functionappName-$slot.azurewebsites.net"
$resourceType = "Microsoft.Web/sites/slots/config"
$resourceName = "$functionappName/$slot/publishingcredentials"
}
else {
$apiBaseUrl = "https://$functionappName.scm.azurewebsites.net/api"
$siteBaseUrl = "https://$functionappName.azurewebsites.net"
$resourceType = "Microsoft.Web/sites/config"
$resourceName = "$functionappName/publishingcredentials"
}
Write-Host "Get the publishing credentials"
$publishingCredentials = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName -ResourceType $resourceType -ResourceName $resourceName -Action list -ApiVersion 2015-08-01 -Force
Write-Host "Generate the Kudu API Authorisation Token"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $publishingCredentials.Properties.PublishingUserName, $publishingCredentials.Properties.PublishingPassword)))
Write-Host "Call Kudu /api/functions/admin/token to get a JWT that can be used with the Functions Key API"
$jwt = Invoke-RestMethod -Uri "$apiBaseUrl/functions/admin/token" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET
Write-Host "Creates or updates an host key at the specified resource with an auto generated key"
$mynewkey = (Invoke-RestMethod -Uri "$siteBaseUrl/admin/host/keys/$keyname" -Headers @{Authorization=("Bearer {0}" -f $jwt)} -Method Post).value
编辑
新创建的函数应用程序默认使用 TLS 1.2,因此您需要在 Powershell 脚本的顶部添加以下行:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
总结: 我直接在 Visual Studio 中编写一个函数,其设计导致门户中的只读函数管理。我的问题是 easily 如何为所述 webhook 创建功能键?
上下文: 我正在尝试将通用 Webhook 连接到事件网格。这个过程让我走上了一条需要触发 SubscriptionValidationEvent 的道路,这反过来又要求我的 webhook 在 URL 上提供一个 "code",我假设这是一个功能键。
另外,在我投反对票之前,我非常清楚这个问题已经有多种变体在这里提出和回答。我已经尝试了所有这些方法,出于某种原因 none 涉及使用 Kudu 信用针对记录不完整的密钥 API 编写 PowerShell 的解决方案似乎对我有用。
我希望有人知道使用 CLI 或更简单的方法来解决此问题,即手动创建 functionName.json
文件并将其放入 secrets 目录中。
最后,尽管我很想使用预发布 EventGrid 绑定,但我目前无法在我的环境中推送预发布代码。
从 Powershell
:
还有官方文档(很难找到这个 wiki):
这里是重点:
- 获取发布凭据
- 生成 Kudu API 授权令牌
- 调用 Kudu /api/functions/admin/token 获取可与函数键一起使用的 JWT API
- 那你就可以为所欲为了
这是我现有的脚本
Param(
[string] [Parameter(Mandatory=$true)] $resourceGroupName,
[string] [Parameter(Mandatory=$true)] $functionappName,
[string] [Parameter(Mandatory=$true)] $keyname,
[string] [Parameter()] $slot
)
if (![string]::IsNullOrWhiteSpace($slot)){
$apiBaseUrl = "https://$functionappName-$slot.scm.azurewebsites.net/api"
$siteBaseUrl = "https://$functionappName-$slot.azurewebsites.net"
$resourceType = "Microsoft.Web/sites/slots/config"
$resourceName = "$functionappName/$slot/publishingcredentials"
}
else {
$apiBaseUrl = "https://$functionappName.scm.azurewebsites.net/api"
$siteBaseUrl = "https://$functionappName.azurewebsites.net"
$resourceType = "Microsoft.Web/sites/config"
$resourceName = "$functionappName/publishingcredentials"
}
Write-Host "Get the publishing credentials"
$publishingCredentials = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName -ResourceType $resourceType -ResourceName $resourceName -Action list -ApiVersion 2015-08-01 -Force
Write-Host "Generate the Kudu API Authorisation Token"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $publishingCredentials.Properties.PublishingUserName, $publishingCredentials.Properties.PublishingPassword)))
Write-Host "Call Kudu /api/functions/admin/token to get a JWT that can be used with the Functions Key API"
$jwt = Invoke-RestMethod -Uri "$apiBaseUrl/functions/admin/token" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET
Write-Host "Creates or updates an host key at the specified resource with an auto generated key"
$mynewkey = (Invoke-RestMethod -Uri "$siteBaseUrl/admin/host/keys/$keyname" -Headers @{Authorization=("Bearer {0}" -f $jwt)} -Method Post).value
编辑
新创建的函数应用程序默认使用 TLS 1.2,因此您需要在 Powershell 脚本的顶部添加以下行:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12