Развертывание приложения-функции Azure с помощью PowerShell, но не через REST? - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время у меня есть сценарий bash, который использует dotnet для компиляции приложения-функции и интерфейс командной строки Azure для принудительного развертывания файла .zip.Сценарий по сути:

dotnet clean --configuration Release
dotnet build --configuration Release
cd bin/Release/netstandard2.0
zip -r ${functionappName}.zip *
az functionapp deployment source config-zip -g group -n functionapp --src ${functionappName}.zip

Перед этим az login выполняется с использованием субъекта-службы, у которого есть разрешения для развертывания в приложении Function.

Я хотел бы перевести этов PowerShell.Я могу выполнить компиляцию dotnet и создание zip-файла, но я пока не смог выяснить развертывание.Я пытался использовать:

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password )))
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"

... с username и password в качестве идентификатора и секрета участника службы, но это дает ошибку 401 - Unauthorized: Access is denied due to invalid credentials.

IsЕсть ли способ использовать PowerShell для zipdeploy в приложение-функцию с помощью субъекта службы?

1 Ответ

0 голосов
/ 21 ноября 2018

Если вы используете PowerShell, вы можете напрямую получить учетные данные для публикации во время развертывания.

Login-AzureRmAccount
Get-AzureRmSubscription | Select SubscriptionName, SubscriptionId
Select-AzureRmSubscription -SubscriptionName "My Subscription"
$resourceGroup = "MyResourceGroup"
$functionAppName = "MyFunctionApp"

Получение кредитов для развертывания

$creds = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroup -ResourceType Microsoft.Web/sites/config ` -ResourceName $functionAppName/publishingcredentials -Action list -ApiVersion 2015-08-01 -Force
$username = $creds.Properties.PublishingUserName
$password = $creds.Properties.PublishingPassword
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

Теперь перейдите к развертыванию

$apiUrl = "https://$functionAppName.scm.azurewebsites.net/api/zip/site/wwwroot"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method PUT -InFile $zipFilePath -ContentType "multipart/form-data"
...