Гид по технологиям

Развертывание и использование Azure Functions с PowerShell

6 min read Облачные функции Обновлено 01 Nov 2025
Azure Functions на PowerShell: развертывание и вызов
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”.

Логотип Digital Ocean

Click on

Заполните поля, подходящие для вашей среды. В демонстрации выбран рантайм PowerShell Core 7.0.

  • Function App name: lc-test-function
  • Publish: Code
  • Runtime stack: PowerShell Core
  • Version: 7.0
  • Region: East US

Enter in values

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

Create a new storage account to hold the function's output data

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

Create a new Application Insights configuration and enable the monitoring option

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

Verify everything is accurate, then click

Creating Azure Function Code

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

Under

Оставим значения имени функции и уровня авторизации по умолчанию. Уровни авторизации:

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

Create a new functi

Modifying Function Code

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

Click on the function HttpTrigger1, then click on the

В примере мы модифицируем стандартную функцию так, чтобы она принимала параметр 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"  
}

Click on

Вкладка Output покажет HTTP-ответ и тело, где вы увидите данные о погоде.

The correct output is shown the Output tab under the HTTP response content

Triggering the Function via External PowerShell

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

Click on the

В сессии PowerShell выполните запрос через Invoke-RestMethod, передав JSON с полем location — функция вернёт данные о погоде.

$Params = @{  
"URI"         = ''  
  "Method"      = 'POST'  
  "ContentType" = 'application/json'  
  "Body"        = (@{  
    "location" = "2379574"  
  } | ConvertTo-JSON)  
}  
  
Invoke-RestMethod @Params=

The weather data is returned

Практическое руководство: шаги кратко

  1. Создайте Function App в портале, выбрав PowerShell Core 7.0.
  2. Создайте новый Storage Account и включите Application Insights.
  3. Добавьте функцию с шаблоном HTTP trigger.
  4. Измените код в “Code + Test” и сохраните.
  5. Протестируйте в портале, затем вызовите функцию извне через 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"}'

Руководство по отладке и инцидентам

  1. Проверьте логи в Application Insights (трассы, исключения).
  2. В портале Functions используйте вкладку “Monitor” для истории вызовов.
  3. Если функция возвращает 5xx, проверьте лимиты Execution Time и зависимости внешних API.
  4. Воспроизведите проблему локально, используя func core tools и тот же runtime.
  5. При необходимости откатите на предыдущую версию через 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 план).
  • Поддержка контейнеров: да — можно деплоить контейнеризированные функции.

Мини-методология для внедрения функций в проект

  1. Идентифицируйте единицы работы, подходящие для serverless (краткие, отклик на событие).
  2. Спланируйте требования к мониторингу и логированию.
  3. Настройте CI/CD для автоматического развертывания функций.
  4. Покройте базовые тесты и сценарии отказа.
  5. Постепенно переводите дополнительные интеграции на функции, мониторя метрики стоимости и задержек.

Заключение

Azure Functions с PowerShell — удобный инструмент для быстрой интеграции и реализации API-эндапоинтов. Он экономит время при разработке и упрощает эксплуатацию, но требует внимательного подхода к мониторингу, безопасности и оценке сценариев использования.

Важно: выбирайте серверless там, где это экономически и технически оправдано; для тяжёлых длительных задач стоит рассмотреть контейнеры или виртуальные машины.


Краткое резюме:

  • Создайте Function App, выберите PowerShell 7.0 и настройте Storage и Application Insights.
  • Добавьте HTTP-trigger функцию, обновите код и протестируйте в портале.
  • Вызовите функцию извне через PowerShell или curl, следите за логами и метриками.

Важно: сохраняйте секреты в Key Vault и настраивайте уровни доступа.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он действует и как защититься
Кибербезопасность

Троян Herodotus: как он действует и как защититься

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Панель полей PivotTable в Excel — руководство
Excel

Панель полей PivotTable в Excel — руководство

Включить новый Пуск в Windows 11 — инструкция
Windows

Включить новый Пуск в Windows 11 — инструкция

Как убрать дубликаты Диспетчера задач Windows 11
Windows

Как убрать дубликаты Диспетчера задач Windows 11

Как просмотреть историю просмотров Reels в Instagram
Социальные сети

Как просмотреть историю просмотров Reels в Instagram