Развертывание и использование Azure Functions с PowerShell
Кратко: В этой статье показано, как создать Azure Function App с runtime PowerShell 7.0, написать HTTP-триггерную функцию, протестировать её в портале и вызвать извне через PowerShell. Приведены советы по отладке, проверочные списки для ролей, альтернативные подходы и рекомендации по безопасности.
Быстрые ссылки
- Provisioning Azure Function App
- Creating Azure Function Code
- Modifying Function Code
- Triggering the Function via External PowerShell
- Заключение
Serverless-подходы скрывают детали управления инфраструктурой и позволяют сконцентрироваться на коде и логике. Azure Functions поддерживает несколько рантаймов, контейнеры и языков, включая PowerShell 7, и отлично подходит для задач интеграции, API-агрегаторов и триггерных задач.
Provisioning Azure Function App
Первым делом откройте в Azure Portal раздел “Function App” и нажмите кнопку “Create Function App”.


Заполните поля, подходящие для вашей среды. В демонстрации выбран рантайм PowerShell Core 7.0.
- Function App name:
lc-test-function - Publish: Code
- Runtime stack: PowerShell Core
- Version: 7.0
- Region: East US

На вкладке Hosting создайте новый storage account для хранения артефактов функции. Для PowerShell в портале функции выполняются на Windows-платформе (портал располагает поддержкой PowerShell 7 в окружении Functions). Для демонстрации используем Consumption план.

На вкладке Monitoring создайте конфигурацию Application Insights и включите мониторинг — это поможет собирать логи и метрики вызовов функции.

Пропустите теги при необходимости и перейдите в Review & Create. Проверьте настройки и нажмите “Create”.

Creating Azure Function Code
Мы будем использовать HTTP-триггерную функцию. В панели Function App откройте раздел “Functions”, нажмите “Add” и выберите шаблон HTTP trigger.

Оставим значения имени функции и уровня авторизации по умолчанию. Уровни авторизации:
- Function: использует ключ конкретной функции
- Admin: использует мастер-ключ для окружения
- Anonymous: не требует авторизации, но ограничивает возможности

Modifying Function Code
Откройте созданную функцию HttpTrigger1 и раздел “Code + Test”. Встроенный редактор позволяет тестировать код прямо в портале.

В примере мы модифицируем стандартную функцию так, чтобы она принимала параметр location и отправляла запрос к API metaweather.com, затем возвращала отформатированный текст с погодой.
Изменения кода в двух словах:
- Заменим
$nameна$location - Добавим
Invoke-RestMethodк API metaweather.com - Сформируем тело ответа в виде строки
Содержимое файла функции (оставлено как в портале):
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$location = $Request.Query.Location
if (-not $location ) {
$location = $Request.Body.Location
}
$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
if ($location ) {
$Params = @{
"URI" = " "
"Method" = 'GET'
}
$Result = Invoke-RestMethod @Params
$Body = $Result.consolidated_weather | Select-Object applicable_date, weather_state_name, the_temp, humidity
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = ($Body | Out-String)
})
Нажмите “Save” и затем “Test/Run” для проверки. В окне тестирования введите пример тела запроса:
{
"location": "2379574"
}
Вкладка Output покажет HTTP-ответ и тело, где вы увидите данные о погоде.

Triggering the Function via External PowerShell
Нажмите кнопку “Get Function URL” в портале, чтобы получить адрес вызова вашей функции.

В сессии PowerShell выполните запрос через Invoke-RestMethod, передав JSON с полем location — функция вернёт данные о погоде.
$Params = @{
"URI" = ''
"Method" = 'POST'
"ContentType" = 'application/json'
"Body" = (@{
"location" = "2379574"
} | ConvertTo-JSON)
}
Invoke-RestMethod @Params= 
Практическое руководство: шаги кратко
- Создайте Function App в портале, выбрав PowerShell Core 7.0.
- Создайте новый Storage Account и включите Application Insights.
- Добавьте функцию с шаблоном HTTP trigger.
- Измените код в “Code + Test” и сохраните.
- Протестируйте в портале, затем вызовите функцию извне через PowerShell или curl.
Когда Azure Functions не подходит
- Длительные фоновые задачи с непрерывной нагрузкой (может быть экономичнее VM или контейнер).
- Нужен строгий контроль окружения и устаревшие библиотеки, которые нельзя упаковать в Function App.
- Тяжёлые вычисления, требующие GPU или большого локального диска — лучше контейнеры или виртуальные машины.
Альтернативные подходы
- Azure App Service — если нужен постоянный веб‑хостинг с поддержкой состояния.
- Azure Container Instances / Kubernetes — для контейнеризированных, более контролируемых окружений.
- Azure Logic Apps — визуальная автоматизация и интеграция без кода.
Ролевые проверочные списки
Важно распределить ответственность между ролями — примерные чеклисты.
Разработчик:
- Написать функцию с понятными входами/выходами.
- Обрабатывать ошибки и возвращать HTTP-коды.
- Добавить логирование через Write-Host или Application Insights.
Операции (DevOps):
- Настроить storage account и план (Consumption/Plan).
- Настроить мониторинг и алерты в Application Insights.
- Подготовить CI/CD (GitHub Actions/Azure DevOps).
Инженер безопасности:
- Проверить уровни доступа и managed identities.
- Обеспечить безопасность ключей и не хранить секреты в коде.
- Включить HTTPS и ограничить публичный доступ при необходимости.
Критерии приёмки
- Функция возвращает 200 OK и ожидаемую структуру данных для корректного location ID.
- Обработка некорректных входных данных приводит к понятному коду ошибки (400/422).
- Логи вызова доступны в Application Insights и содержат основные шаги исполнения.
- CI/CD развёртывание проходит без ручного вмешательства.
Тесты и примеры приёмки
Позитивный тест:
- Вызвать функцию с корректным ID location и ожидать, что в теле ответа присутствуют поля applicable_date, weather_state_name, the_temp, humidity.
Негативный тест:
- Вызвать без поля location и проверить, что возвращается сообщение об ошибке или 200 с подсказкой об ожидании параметра.
Пример вызова через curl:
curl -X POST 'https://lc-test-function.azurewebsites.net/api/HttpTrigger1?code=' -H 'Content-Type: application/json' -d '{"location":"2379574"}' Руководство по отладке и инцидентам
- Проверьте логи в Application Insights (трассы, исключения).
- В портале Functions используйте вкладку “Monitor” для истории вызовов.
- Если функция возвращает 5xx, проверьте лимиты Execution Time и зависимости внешних API.
- Воспроизведите проблему локально, используя func core tools и тот же runtime.
- При необходимости откатите на предыдущую версию через CI/CD pipeline.
Краткий план аварийного отката:
- Отключить новый триггер (если он использует топик/очередь) или переключить DNS/URL на предыдущую версию.
- Развернуть стабильный артефакт из предыдущего релиза.
- Оповестить заинтересованные стороны и создать инцидент в трекере.
Соображения безопасности и соответствия GDPR
- Никогда не сохраняйте личные данные без шифрования и необходимых договоров обработки.
- Секреты (ключи, токены) храните в Azure Key Vault и используйте Managed Identity для доступа.
- Ограничьте Scope ключей и используйте уровня авторизации Function/Admin по потребности.
- Логи могут содержать чувствительную информацию — настраивайте фильтрацию и политики хранения.
Фактбокс
- Поддерживаемые рантаймы: PowerShell 7.x, Node.js, Python, .NET и другие.
- Модели тарификации: Consumption, Premium, Dedicated (App Service план).
- Поддержка контейнеров: да — можно деплоить контейнеризированные функции.
Мини-методология для внедрения функций в проект
- Идентифицируйте единицы работы, подходящие для serverless (краткие, отклик на событие).
- Спланируйте требования к мониторингу и логированию.
- Настройте CI/CD для автоматического развертывания функций.
- Покройте базовые тесты и сценарии отказа.
- Постепенно переводите дополнительные интеграции на функции, мониторя метрики стоимости и задержек.
Заключение
Azure Functions с PowerShell — удобный инструмент для быстрой интеграции и реализации API-эндапоинтов. Он экономит время при разработке и упрощает эксплуатацию, но требует внимательного подхода к мониторингу, безопасности и оценке сценариев использования.
Важно: выбирайте серверless там, где это экономически и технически оправдано; для тяжёлых длительных задач стоит рассмотреть контейнеры или виртуальные машины.
Краткое резюме:
- Создайте Function App, выберите PowerShell 7.0 и настройте Storage и Application Insights.
- Добавьте HTTP-trigger функцию, обновите код и протестируйте в портале.
- Вызовите функцию извне через PowerShell или curl, следите за логами и метриками.
Важно: сохраняйте секреты в Key Vault и настраивайте уровни доступа.
Похожие материалы
Троян Herodotus: как он действует и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей PivotTable в Excel — руководство
Включить новый Пуск в Windows 11 — инструкция
Как убрать дубликаты Диспетчера задач Windows 11