Как вызвать команды модуля Azure PowerShell в Azure Functions 3.x PowerShell 7?

#azure-functions

#azure-функции

Вопрос:

Мне нужно запустить команды модуля Azure PowerShell (https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-5.2.0 ) скрипты в функциях Azure 3.

Я предпочитаю не запускать Install-Module при каждом вызове функции. Я ожидаю, что есть лучший способ сделать это. Модуль Azure PowerShell довольно большой.

Я просматриваю следующую документацию и не могу найти никаких ссылок на то, как вызывать команды модуля Azure PowerShell. https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-powershell?tabs=portal

Как вызвать команды модуля Azure PowerShell в Azure Functions 3.x PowerShell 7?

Ответ №1:

Install-Module В этом случае нет необходимости использовать, в настоящее время, когда вы создаете функцию powershell на портале, она установит Az для вас модуль по умолчанию с помощью функции управления зависимостями.

Вы можете проверить App files блейд на портале, чтобы убедиться, что ваше функциональное приложение настроено правильно, если нет, измените их, как показано ниже.

host.json

 {
  "version": "2.0",
  "managedDependency": {
    "Enabled": true
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  }
}
 

requirements.psd1

 @{
    # For latest supported version, go to 'https://www.powershellgallery.com/packages/Az'. 
    'Az' = '5.*'
}
 

profile.ps1

 if ($env:MSI_SECRET) {
    Disable-AzContextAutosave -Scope Process | Out-Null
    Connect-AzAccount -Identity
}
 

С приведенными выше настройками функциональное приложение автоматически установит Az для вас модуль и Az модуль входа в систему с помощью MSI (managed identity) вашего функционального приложения (команда в profile.ps1 did it), это удобно.

Чтобы использовать Az команды в функции, вам просто нужно включить MSI для вашего функционального приложения и назначить роль RBAC для вашего MSI (зависит от конкретного случая, например, если вы хотите перечислить все веб-приложения в вашей группе подписки / ресурсов, вам нужно указать роль, подобную Reader вашей MSI, в концеобласть действия подписки / группы ресурсов).

введите описание изображения здесь

Затем в коде вашей функции просто используйте Az команду напрямую, без чего-либо еще.

Пример:

 $a = Get-AzWebApp -ResourceGroupName joyRG
Write-Host $a.Name
 

введите описание изображения здесь

Ответ №2:

В вашей рабочей области Azure Functions у вас есть requirements.psd1 список зависимостей, единственным импортируемым модулем по умолчанию является модуль Az.

Поскольку это доступно при запуске хоста, вы должны просто иметь возможность использовать автоматическую загрузку, используя команды Az в вашей функции run.ps1.

Если вам нужно только подмножество модулей Az, вы можете быть более конкретными в файле requirements.psd1.

 'Az.Accounts' = '1.9.5'
'Az.Resources' = '2.*'
 

Это указано в документации здесь: Справочник разработчика Azure Functions