Приложение "Функции Azure" и настраиваемые модули PowerShell

Функции Azure — это служба, которая позволяет разработчикам писать код, не беспокоясь об инфраструктуре приложений. Есть два основных преимущества использования приложения "Функции Azure":
- Поскольку базовая инфраструктура предоставляется корпорацией Майкрософт как часть службы приложений Функций Azure, разработчикам нужно просто спроектировать код без необходимости явно выделять базовую инфраструктуру или управлять ею.
- Вы можете запустить свой код как сценарий PowerShell и развернуть его в запланированных задачах, но у вас все равно будет зависимость от виртуальной машины или места, где будет выполняться запланированная задача.
Помимо запуска C#, Java и других поддерживаемых языков, служба приложений Функций Azure также поддерживает запуск командлетов PowerShell. Вы можете создать свой сценарий PowerShell и запустить его как часть приложения "Функции Azure". Однако перед разработчиками стоит одна задача — запустить желаемый код. Например, если вы разработали сценарий PowerShell, в котором используются настраиваемые модули, разработанные собственными силами, приложение "Функции Azure" не сможет автоматически импортировать настраиваемые модули и установить их для вас.
При использовании приложения "Функции Azure" для PowerShell необходимо учитывать несколько моментов.
Сценарий PowerShell функций по умолчанию
Когда вы создаете приложение «Функции Azure», оно создает сценарий PowerShell по умолчанию с именем «Run.PS1» и файл JSON с именем «Файл Function.JSON». «Run.PS1» — это место, где находится ваш код, и он выполняется при срабатывании триггера или когда кто-то вызывает REST API с помощью вызовов REST API или командлета PowerShell «Invoke-RestMethod». По умолчанию «Run.PS1» находится в рабочем каталоге D:HomeSitewwwroot{FunctionName}.
Каталог по умолчанию для функций
Вы можете работать только с той директорией, на которую у вас есть права. При создании Функций Azure с помощью службы приложений Функций Azure процесс создает каталог в папке D:HomeSitewwwroot{FunctionName}. Как вы можете видеть на снимке экрана ниже, я создал функцию с именем HttpTriggerPowerShell, а приложение "Функции Azure" создало для меня папку для работы.
Все ваши файлы, такие как файлы Run.PS1 и Function.JSON, находятся в каталоге {имя_функции}, как показано на снимке экрана ниже. Вы также можете создавать собственные файлы, если вам нужно. Как вы можете видеть на скриншоте ниже, я создал файл с именем «ss.txt» с помощью команды «Echo Test > SS.txt».
Помимо каталога D:HomeSitewwwroot{Functionname}, у вас также есть доступ к каталогу D:LocalTemp. Этот каталог используется приложением "Функции Azure" для хранения временных файлов в процессе выполнения.
Модули PowerShell по умолчанию
По умолчанию приложение «Функции Azure» поставляется с модулями PowerShell по умолчанию для служб Azure, включая модули Azure Resource Manager, Azure Site Recovery и веб-сайты Azure, а также модулями Windows PowerShell по умолчанию, такими как App Locker, Appx и BitsTransfer. Если вам нужно просмотреть модули PowerShell, поставляемые с приложением «Функции Azure», просто выполните команду «PowerShell.exe Get-Module -ListAvailable» на вкладке «Консоль», как показано на снимке экрана ниже:
Нет консоли PowerShell
Обратите внимание, что приложение "Функции Azure" не предоставляет окно консоли PowerShell, которое можно использовать для выполнения команд PowerShell напрямую, как на настольном компьютере. «Run.PS1» всегда выполняется PowerShell.exe, который доступен как часть функции. Если вам нужно выполнить команду PowerShell, вам нужно использовать PowerShell.exe. Например, чтобы выполнить команду PowerShell для получения списка модулей PowerShell, вы должны выполнить PowerShell.exe Get-Module -ListAvailable. Точно так же, если вы хотите выполнить любую другую команду PowerShell, которая уже загружена как часть модулей по умолчанию, вы должны использовать «PowerShell.exe» перед командой.
Невозможно установить модули PowerShell с помощью install-module
Обратите внимание, что с помощью «Install-Module» вы не можете устанавливать модули PowerShell, как на настольном компьютере. Например, если вы попытаетесь установить модуль PowerShell, который недоступен в списке модулей PowerShell по умолчанию, вы получите следующее сообщение об ошибке:
Как видно на снимке экрана выше, я пытаюсь установить модули PowerShell для Azure Windows Virtual Desktop, но команда возвращает сообщение об ошибке « Для установки модулей требуются права администратора ». Это связано с тем, что по умолчанию Install-Module выбирает каталог среды PowerShell для установки модулей, и, как указано выше, у вас нет доступа к каталогу среды PowerShell, кроме D:Homesitewwwroot{имя_функции} и D:Local Временные каталоги. Даже если вы попытаетесь установить модули PowerShell или сохранить пакеты как часть «Run.PS1», вы получите сообщение, похожее на то, что показано на скриншоте выше.
Добавление пользовательских модулей в приложение "Функции Azure"
Если вы хотите добавить пользовательские модули PowerShell, которые ваш сценарий использует для выполнения различных проверок, вам потребуется загрузить модули с FTP. Не существует другого способа загрузить пользовательские модули, кроме загрузки модулей с помощью FTP-доступа к приложению «Функции». Чтобы загрузить пользовательские модули в функцию Azure, вам потребуется настроить учетную запись службы, которую можно использовать для доступа к FTP-службе функций Azure, а затем загрузить модули в папку D:HomeSitewwwroot{Functionname}.
Поскольку приложение "Функции Azure" создано с использованием службы веб-приложений Azure, доступны все параметры, в том числе параметры развертывания. Например, вы можете настроить учетные данные для развертывания, которые, в свою очередь, можно использовать для загрузки модулей на FTP-сервер приложения «Функции».
Чтобы настроить учетные данные для развертывания, нажмите «Настройки функций», как показано в красном квадрате на снимке экрана ниже:
Затем перейдите к параметрам службы приложений, чтобы настроить учетные данные для развертывания. В диалоговом окне имени пользователя и пароля FTP введите имя пользователя и пароль FTP и сохраните настройки. После сохранения настроек FTP вы можете подключиться к FTP приложения «Функции» и загрузить свои модули PowerShell.
Обязательно загрузите модули PowerShell в каталог D:HomeSitewwwroot{Functionname}. Когда я тестировал загрузку модулей PowerShell в приложение «Функции», я создал папку под {Functionname} с именем «RDSModules», а затем загрузил модули RDS через FTP. Я загрузил модули RDS PowerShell в папку D:HomeSitewwwrootHttpTriggerFunctionRDSModules.
Загрузка пользовательских модулей из приложения "Функции Azure"
После загрузки модулей PowerShell в D:HomeSitewwwroot{functionname} путем доступа к FTP приложения «Функции» перейдите на портал Azure > разверните функцию и введите следующие команды в файл Run.PS1:
Import-Module D:HomeSitewwwrootHttpTriggerFunction{RDSModules}
Вам нужно заменить каталог «RDSModules» на имя папки вашего каталога модулей в приведенной выше команде.
Вы должны иметь возможность импортировать модули с помощью приведенной выше команды и командлетов PowerShell, поставляемых с модулями RDS.