Как создать функцию Azure, функциональную клавишу, когда для ваших функций установлено значение «Только чтение» - PullRequest
0 голосов
/ 09 мая 2018

Резюме: Я создаю функцию непосредственно в Visual Studio, что в результате приводит к управлению функциями только для чтения на портале. Мой вопрос: как можно легко создать функциональную клавишу для указанного веб-крюка?

Контекст: Я пытаюсь подключить общий веб-крючок к Event Grid. Этот процесс привел меня к необходимости запуска SubscriptionValidationEvent, который, в свою очередь, требует, чтобы мой webhook предоставил «код» в URL, который, я полагаю, является функциональной клавишей.

Также, прежде чем я проголосую, я очень хорошо знаю, что есть несколько вариантов этого вопроса, которые уже были заданы и даны ответы здесь. Я попробовал их все, и по тем или иным причинам ни одно из решений, включающих в себя написание PowerShell для плохо документированного API ключей с использованием кредитов Kudu, похоже, не работает для меня.

Я надеюсь, что кто-то знает, как решить эту проблему с помощью CLI или даже проще, создав файл functionName.json вручную и поместив его в каталог секретов.

И, наконец, настолько заманчиво, насколько я могу использовать предварительную привязку EventGrid, в настоящее время я не могу отправить предварительный код в мою среду.

1 Ответ

0 голосов
/ 10 мая 2018

Нашел интересную статью о том, как управлять клавишами функций Azure с Powershell:

Также официальная документация (было трудно найти эту вики):

Вот ключевые моменты:

  1. Получить учетные данные для публикации
  2. Создание токена авторизации API Kudu
  3. Вызовите Kudu / api / functions / admin / token, чтобы получить JWT, который можно использовать с API-интерфейсом функций
  4. Тогда вы можете делать все, что хотите

Вот мой существующий скрипт

    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
...