Запустите команды Powershell для функции Azure с шаблоном az

Я хотел бы написать сценарий, который перетаскивает базу данных SQL Azure в Azure SQL Elastic Pool. Но это должно быть запущено из Azure Function

Но получил эту ошибку: ОШИБКА: указанный модуль 'AzureRM.Compute' не был загружен, так как ни в одном каталоге модулей не было найдено допустимого файла модуля.

Когда я включил Azure RM, я получаю новую ошибку, поскольку не могу использовать команды AzureRM и Az.

Могу ли я использовать только команды AZ для подключения к желаемой подписке?

Ниже приведен код, который я пытаюсь:

$resourceGroupName = "<VALUE>"
$location = "<VALUE>"
$PoolName = "<VALUE>"
$adminSqlLogin = "<VALUE>"
$password = "<VALUE>"
$serverName = "<VALUE>.database.windows.net,1433"
$DatabaseName = "<VALUE>"

Set-ExecutionPolicy Unrestricted -Scope CurrentUser


Import-Module Az.Sql

$azureAccountName ="<VALUE>"
$azurePassword = "<VALUE>" | ConvertTo-SecureString -AsPlainText -Force

$psCred = New-Object System.Management.Automation.PSCredential($azureAccountName, $azurePassword)

Login-AzureRmAccount -Credential $psCred -SubscriptionId $subscriptionId

Set-AzSqlDatabase -ResourceGroupName $resourceGroupName `
    -ServerName $serverName `
    -DatabaseName $DatabaseName `
    -ElasticPoolName $PoolName

Но в Azure Function появляется следующая ошибка:

Login-AzureRmAccount : Method 'get_SerializationSettings' in type 'Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient' from assembly 'Microsoft.Azure.Commands.ResourceManager.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' does not have an implementation.

1 ответ

Решение

Не следует смешивать командлеты AZ и ARM. Я бы порекомендовал вам использовать только новые командлеты AZ. Если вы используете управляемую идентификацию в своей функции Azure, вам даже не нужно вручную подключаться к своей учетной записи Azure, поскольку это уже сделано для вас в файле profile.ps1:

if ($env:MSI_SECRET -and (Get-Module -ListAvailable Az.Accounts)) {
    Connect-AzAccount -Identity
}

Просто убедитесь, что вы добавили Az в файл require.psd1:

@{
    Az = '1.*'
}
Другие вопросы по тегам