Как развернуть функцию app из удаленного zip-файла с помощью powershell - PullRequest
1 голос
/ 06 июля 2019

Я хочу развернуть functionApp в Azure, используя zip-файл, который находится в другом хранилище BLOB-объектов Azure, используя powershell. Я пробовал, как следующий метод

#PowerShell
$username = "<deployment_user>"
$password = "<deployment_password>"
$filePath = "https://xxxxx.blob.core.windows.net/container/zzzz.zip"
$apiUrl = "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f 
$username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath - ContentType "multipart/form-data"

Но я получил следующее сообщение об ошибке, например

Invoke-RestMethod: не удается найти диск. Диск с именем «https» не существует.

Как мне выполнить развертывание из файла удаленного URL?

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Поскольку Invoke-RestMethod InFile принимает содержимое из файла, сначала необходимо явно загрузить содержимое BLOB-объекта.

Опция 1

$fileUrl = "https://xxxxx.blob.core.windows.net/container/zzzz.zip"
$token = 'sp=r&st=2019-07-06T21:41:45Z&se=2019-07-07T05:41:45Z&spr=https&sv=2018-03-28&sig=9ud%2FiJ6GBccxZfyrKsZtP69lwuralu1D0QiiESa%2FXgo%3D&sr=b'
$filePath = [System.IO.Path]::GetFileName($fileUrl)
Invoke-WebRequest ('{0}?{1}' -f $fileUrl, $token) -OutFile $filePath  

Предварительное условие

Вместо URL ресурса, SAS (SharedПодпись доступа) Необходимо указать URI , который включает токен SAS для выполнения аутентифицированного запроса

Опция 2

Через Командлеты хранилища Azure :

$StorageAccountName = 'yourstorageaccount'
$StorageAccountKey = Get-AzureStorageKey -StorageAccountName $StorageAccountName
$StorageContext = New-AzureStorageContext $StorageAccountName -StorageAccountKey $StorageAccountKey.Primary
$FileName = 'zzzz.zip'
$OutputPath = 'C:\Temp'
$ContainerName  = 'yourcontainer'
Get-AzureStorageBlobContent -Blob $FilebName -Container $ContainerName -Destination $OutputPath -Context $StorageContext
0 голосов
/ 06 июля 2019
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath - ContentType "multipart/form-data"

-InFile $ filePath

параметр ожидает локальный путь к файлу.

Проверьте документацию: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-6

Используйте что-то вроде:

  1. Сначала загрузите большой двоичный объект из хранилища Azure.
  2. Преобразование в поток байтов.
  3. Укажите как часть вашего запроса (Тело).

Пример кода для справки:

$base64Image = [convert]::ToBase64String((get-content $path -encoding byte))

Invoke-WebRequest -uri $uri -Method Post -Body $base64Image -ContentType "application/base64"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...