Триггеры и привязки Azure Functions
Напишите функцию с запуском по HTTP, добавьте выходную привязку для записи в Azure Queue Storage и разберитесь с моделью автоматического масштабирования плана потребления.
«Триггеры и привязки Azure Functions» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Что такое Azure Functions?
Azure Functions — это бессерверная вычислительная служба, позволяющая запускать небольшие фрагменты кода (функции) в ответ на события без управления инфраструктурой. Вы платите только за время выполнения и используемую память во время работы функции — когда функция простаивает, плата не взимается. Functions подходят для задач, управляемых событиями, лёгких API, запланированных заданий и интеграции облачных служб без постоянного сервера.
Триггеры: что запускает функцию
Каждая Azure Function должна иметь ровно один триггер, определяющий событие, вызывающее её выполнение. К распространённым триггерам относятся HTTP (входящий HTTP-запрос), Timer (расписание CRON), Blob Storage (новый BLOB в контейнере), Queue Storage (новое сообщение в очереди), Event Hub (поток событий), Service Bus (сообщение очереди или раздела) и Cosmos DB (журнал изменений). Триггер получает данные события и передаёт их коду Вашей функции.
// HTTP trigger function (JavaScript/Node.js)
module.exports = async function (context, req) {
const name = req.query.name || (req.body && req.body.name);
const message = name ? 'Hello, ' + name : 'Pass a name in the query or body';
context.res = {
status: 200,
body: { message }
};
};Function.json: конфигурация триггеров и привязок
В некомпилируемых языках (JavaScript, Python) файл function.json в каталоге каждой функции объявляет её триггеры и привязки. Этот файл сопоставляет источники событий и выходные данные с именованными параметрами в коде функции. В C# и Java привязки объявляются непосредственно в коде с помощью атрибутов и аннотаций. Среда выполнения Functions считывает конфигурацию и автоматически настраивает подключения к службам Azure.
// function.json — HTTP trigger + Queue output binding
{
'bindings': [
{
'authLevel': 'function',
'type': 'httpTrigger',
'direction': 'in',
'name': 'req',
'methods': ['post']
},
{
'type': 'http',
'direction': 'out',
'name': 'res'
},
{
'type': 'queue',
'direction': 'out',
'name': 'outputQueue',
'queueName': 'processing-queue',
'connection': 'AzureWebJobsStorage'
}
]
}Выходные привязки: запись в службы
Выходные привязки позволяют функции записывать данные в службы Azure (Blob Storage, Queue Storage, Cosmos DB, Event Hub и другие) без управления SDK или строками подключения. Достаточно присвоить значение параметру выходной привязки, а среда выполнения Functions выполнит запись. Это значительно сокращает шаблонный код и отделяет функцию от деталей реализации конкретной службы Azure.
// HTTP trigger with Queue output binding (Node.js)
module.exports = async function (context, req) {
const orderData = req.body;
// Write to queue via output binding -- no SDK needed!
context.bindings.outputQueue = JSON.stringify({
orderId: orderData.id,
timestamp: new Date().toISOString()
});
context.res = { status: 202, body: 'Order queued' };
};Триггер Timer с выражениями CRON
Триггер Timer запускает функцию по расписанию, заданному выражением CRON. Azure Functions использует CRON из 6 частей: {seconds} {minutes} {hours} {day} {month} {day-of-week}. Используйте 0 0 * * * * для запуска каждый час, 0 0 0 * * * для ежедневного запуска в полночь или 0 0 9-17 * * 1-5 для запуска каждый час в рабочее время по будням. Функции Timer полезны для задач очистки, создания отчётов и проверок состояния.
// Timer trigger — runs every day at 02:00 UTC
// function.json binding:
// {
// 'type': 'timerTrigger',
// 'schedule': '0 0 2 * * *',
// 'name': 'myTimer'
// }
module.exports = async function (context, myTimer) {
const now = new Date().toISOString();
context.log('Daily cleanup started at', now);
// ... perform cleanup logic ...
context.log('Cleanup completed');
};План Consumption: бессерверное масштабирование
В плане Consumption Azure Functions автоматически масштабируется от нуля до сотен экземпляров в зависимости от частоты событий триггера. Вы платите только за количество выполнений и потреблённые гигабайт-секунды памяти — первые 1 миллион выполнений в месяц предоставляются бесплатно. Хост Functions может масштабировать HTTP-триггер максимум до 200 экземпляров, а триггер очереди — до количества сообщений очереди, обрабатываемых одновременно. Холодный запуск (первое выполнение после простоя) добавляет небольшую задержку, которую уменьшают предварительно прогретые экземпляры плана Premium.
# View billing details for a function app
az functionapp show \
--name myFunctionApp \
--resource-group MyRG \
--query '{name:name, plan:serverFarmId, state:state}'
# Create a Function App on Consumption plan
az functionapp create \
--name myFunctionApp \
--resource-group MyRG \
--consumption-plan-location eastus \
--runtime node \
--runtime-version 18 \
--storage-account mystorageaccountПланы Premium и Dedicated
План Premium устраняет холодные запуски благодаря предварительно прогретым экземплярам, добавляет интеграцию с VNet и допускает более длительные тайм-ауты выполнения (до 60 минут). План Dedicated (App Service) запускает функции в том же плане App Service, что и веб-приложения; он полезен, когда необходимы предсказуемые расходы или уже имеются вычислительные ресурсы App Service. Выбирайте Consumption для настоящей экономичности бессерверной модели, а Premium — для функций, чувствительных к производительности или подключённых к VNet.
# Create a Function App on Premium plan (EP1)
az functionapp plan create \
--name MyPremiumPlan \
--resource-group MyRG \
--location eastus \
--sku EP1 \
--is-linux
az functionapp create \
--name myFunctionAppPremium \
--resource-group MyRG \
--plan MyPremiumPlan \
--runtime python \
--runtime-version 3.11 \
--storage-account mystorageaccountРазвёртывание Azure Functions
Развёртывайте Azure Functions с помощью Azure Functions Core Tools (func azure functionapp publish), расширения VS Code, развёртывания ZIP через Azure CLI или конвейера CI/CD в Azure Pipelines или GitHub Actions. В рабочей среде всегда выполняйте развёртывание из конвейера, а не с компьютера разработчика, чтобы в рабочую среду попадали протестированные версии с тегами. Среда выполнения Functions также поддерживает развёртывание контейнера Docker для полного контроля среды выполнения.
# Local development: install Core Tools
npm install -g azure-functions-core-tools@4
# Start locally (triggers work against real Azure services)
func start
# Deploy to Azure
func azure functionapp publish myFunctionApp
# Or deploy via Azure CLI (ZIP deploy)
zip -r function.zip . --exclude '.git/*'
az functionapp deployment source config-zip \
--name myFunctionApp \
--resource-group MyRG \
--src function.zipПараметры приложения и ссылки на Key Vault
Приложения Function хранят конфигурацию в параметрах приложения — в коде функции они отображаются как переменные среды. Храните строки подключения, ключи API и секреты в параметрах приложения. В рабочей среде используйте ссылки на Key Vault, чтобы значение хранилось в Key Vault, а в параметре приложения указывалось только его имя. Это позволяет не включать секреты в портал и артефакты развёртывания. Включите управляемое удостоверение в приложении функции, чтобы проходить аутентификацию в Key Vault без учётных данных.
# Set application settings
az functionapp config appsettings set \
--name myFunctionApp \
--resource-group MyRG \
--settings \
STORAGE_CONNECTION='@Microsoft.KeyVault(SecretUri=https://mykv.vault.azure.net/secrets/storage-conn/)' \
COSMOS_DB_URI='https://mycosmosdb.documents.azure.com'
# In function code, read as normal env var
# const storageConn = process.env['STORAGE_CONNECTION'];Мониторинг Functions с помощью Application Insights
Azure Functions автоматически интегрируется с Application Insights, если Вы укажете ключ инструментирования или строку подключения. Каждое выполнение функции отслеживается как запрос, включая длительность, успешность или сбой и пользовательские свойства. Используйте Live Metrics Application Insights для наблюдения за выполнениями в реальном времени во время тестирования, а область Failures — для диагностики ошибок с полными трассировками исключений и вызовами зависимостей.
# Connect Application Insights to a Function App
az functionapp config appsettings set \
--name myFunctionApp \
--resource-group MyRG \
--settings \
APPLICATIONINSIGHTS_CONNECTION_STRING='InstrumentationKey=xxxxxxxx;...'
# Custom telemetry in function code (Node.js)
const appInsights = require('applicationinsights');
appInsights.setup().start();
const client = appInsights.defaultClient;
client.trackEvent({ name: 'OrderProcessed', properties: { orderId: '123' } });Поведение при параллелизме и масштабировании
Для функций с триггером очереди хост Functions обрабатывает несколько сообщений параллельно. Настройте batchSize в host.json, чтобы управлять количеством сообщений, одновременно обрабатываемых одним экземпляром. Для HTTP-триггеров горизонтальное масштабирование автоматически добавляет новые экземпляры. Используйте maxConcurrentCalls (триггеры Service Bus) или maxPollingInterval (триггеры очереди), чтобы настроить пропускную способность и не перегрузить зависимые службы, например базы данных, во время масштабирования.
// host.json — tune queue trigger concurrency
{
'version': '2.0',
'extensions': {
'queues': {
'batchSize': 16, // messages per instance
'newBatchThreshold': 8, // fetch more when < 8 remain
'maxPollingInterval': '00:00:02',
'visibilityTimeout': '00:05:00'
}
},
'functionTimeout': '00:10:00'
}Быстрая проверка
Проверьте своё понимание концепций Microsoft Azure Fundamentals (AZ-900), рассмотренных в этом уроке.
Повторение урока
В этом уроке Вы узнали, что триггеры определяют событие, запускающее функцию (HTTP, таймер, очередь, Blob и т. д.), выходные привязки позволяют функциям записывать данные в службы Azure без кода SDK, а план Consumption обеспечивает настоящее бессерверное масштабирование с оплатой за выполнение — от нуля. Далее мы рассмотрим Durable-функции для рабочих процессов с сохранением состояния.
Часто задаваемые вопросы
Урок «Триггеры и привязки Azure Functions» бесплатный?
Да — полный текст урока «Триггеры и привязки Azure Functions» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «Триггеры и привязки Azure Functions»?
Напишите функцию с запуском по HTTP, добавьте выходную привязку для записи в Azure Queue Storage и разберитесь с моделью автоматического масштабирования плана потребления. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Триггеры и привязки Azure Functions»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Триггеры и привязки Azure Functions
- Durable Functions для рабочих процессов с состоянием
- Azure Logic Apps
- Event Grid и событийная архитектура