0Pricing
Cloud & IT Cert Prep · Урок

Триггеры и привязки 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 — локальная установка не требуется.

Все уроки этого курса

  1. Триггеры и привязки Azure Functions
  2. Durable Functions для рабочих процессов с состоянием
  3. Azure Logic Apps
  4. Event Grid и событийная архитектура
← Назад к Cloud & IT Cert Prep