#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