Открыть сервис

Привязка Azure Functions

Привязка Azure Functions — это механизм декларативного подключения внешних ресурсов (баз данных, хранилищ, очередей сообщений, HTTP-запросов и других сервисов) к коду функции без необходимости писать шаблонный код для подключения и аутентификации. Привязки являются частью платформы Azure Functions — серверного решения для выполнения событийно-ориентированного кода, предоставляемого корпорацией Microsoft (Microsoft — организация, зарегистрированная в США, осуществляющая деятельность на территории РФ в соответствии с законодательством РФ). Привязки позволяют разработчикам сосредоточиться на бизнес-логике, а не на инфраструктурных деталях.

Типы привязок

Привязки Azure Functions делятся на два основных типа: входные (input bindings) и выходные (output bindings).

Входные привязки

Входные привязки предоставляют функции данные из внешнего источника при её запуске. Например, функция, обрабатывающая HTTP-запрос, может автоматически получить данные из базы данных Azure Cosmos DB или из очереди Azure Queue Storage. Входные привязки не могут изменять состояние источника — они только читают данные.

Выходные привязки

Выходные привязки позволяют функции записывать данные во внешний ресурс после завершения выполнения. Например, функция может записать результат обработки в таблицу Azure Table Storage или отправить сообщение в очередь Azure Service Bus. Выходные привязки могут быть как обязательными (функция должна что-то записать), так и опциональными.

Триггеры

Триггер — это особая разновидность привязки, которая запускает выполнение функции. Каждая функция Azure должна иметь ровно один триггер. Триггер может быть входным (например, HTTP-запрос, сообщение из очереди, событие из Event Grid) или внутренним (например, таймер). Триггер определяет, когда и как функция начинает работу.

Поддерживаемые ресурсы

Azure Functions поддерживает привязки к широкому спектру сервисов Azure и сторонних систем. Основные из них:

  • Azure Blob Storage — для чтения и записи файлов (изображений, документов, логов).
  • Azure Queue Storage — для обработки сообщений в очередях.
  • Azure Table Storage — для работы с неструктурированными данными в таблицах.
  • Azure Cosmos DB — для работы с NoSQL-базами данных.
  • Azure Service Bus — для обмена сообщениями через очереди и топики.
  • Azure Event Hubs — для обработки потоков событий.
  • Azure Event Grid — для подписки на события от других сервисов Azure.
  • HTTP-запросы — для создания REST API.
  • Таймер — для запуска по расписанию.
  • SignalR — для работы с real-time сообщениями.
  • SendGrid — для отправки электронной почты.
  • Twilio — для отправки SMS.
  • Azure SQL Database — для работы с реляционными базами данных.
  • Azure Cache for Redis — для кэширования данных.

Конфигурация привязок

Привязки настраиваются декларативно в файле function.json (для функций на языках, не поддерживающих атрибуты, например, JavaScript, Python, PowerShell) или с помощью атрибутов в коде (для C# и Java). В файле function.json указываются:

  • name — имя параметра, через который данные передаются в функцию.
  • type — тип привязки (например, blob, queue, httpTrigger).
  • direction — направление: in (входная), out (выходная) или inout (двунаправленная, для триггеров).
  • connection — строка подключения к ресурсу (обычно хранится в настройках приложения).
  • Дополнительные параметры, специфичные для типа привязки (например, path для Blob Storage, queueName для Queue Storage).

Пример конфигурации для функции, читающей из очереди Azure Queue Storage и записывающей в Blob Storage:

``json { "bindings": [ { "name": "myQueueItem", "type": "queueTrigger", "direction": "in", "queueName": "myqueue", "connection": "AzureWebJobsStorage" }, { "name": "outputBlob", "type": "blob", "direction": "out", "path": "mycontainer/{rand-guid}", "connection": "AzureWebJobsStorage" } ] } ``

Принцип работы

Привязки Azure Functions работают на основе контрактов, определённых в файле function.json или атрибутах. Во время выполнения функции среда выполнения Azure Functions (Azure Functions Runtime) автоматически:

  1. Создаёт экземпляры ресурсов — подключается к указанным сервисам, используя строки подключения из настроек приложения.
  2. Передаёт данные в функцию — для входных привязок данные извлекаются из источника и передаются в функцию через параметр с именем, указанным в name.
  3. Принимает данные от функции — для выходных привязок данные, возвращаемые функцией или записываемые в специальный объект (например, ICollector<T> в C#), автоматически отправляются в целевой ресурс.
  4. Обрабатывает ошибки — если привязка не может быть выполнена (например, недоступен ресурс), функция завершается с ошибкой, и среда выполнения может повторить попытку (для триггеров с поддержкой повторных попыток).

Преимущества использования привязок

  • Снижение шаблонного кода — разработчику не нужно писать код для подключения к базам данных, очередям или хранилищам.
  • Упрощение аутентификации — строки подключения и ключи доступа хранятся в настройках приложения, а не в коде.
  • Автоматическое управление жизненным циклом — среда выполнения сама создаёт и закрывает соединения, управляет пулами.
  • Гибкость — привязки можно комбинировать, создавая сложные пайплайны обработки данных.
  • Масштабируемость — привязки работают в рамках серверной модели Azure Functions, автоматически масштабируясь под нагрузку.

Ограничения и особенности

  • Не все ресурсы поддерживаются — для некоторых сервисов (например, Azure Data Lake Storage Gen2) требуется написание собственного кода подключения.
  • Зависимость от строк подключения — привязки требуют наличия строк подключения в настройках приложения, что может быть неудобно при использовании управляемых удостоверений (Managed Identity) в некоторых сценариях.
  • Ограничения по размеру данных — для некоторых привязок (например, Blob Storage) есть ограничения на размер передаваемых данных (до 4 МБ для Blob Storage в некоторых конфигурациях).
  • Только для Azure Functions — механизм привязок не поддерживается в других серверных решениях, таких как AWS Lambda или Google Cloud Functions.

Примеры использования

HTTP-триггер с выходной привязкой к очереди

Функция принимает HTTP-запрос, обрабатывает данные и помещает результат в очередь Azure Queue Storage. Код на C#:

``csharp [FunctionName("HttpToQueue")] public static IActionResult Run( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req, [Queue("outputqueue")] ICollector<string> outputQueue, ILogger log) { string requestBody = new StreamReader(req.Body).ReadToEnd(); outputQueue.Add(requestBody); return new OkResult(); } ``

Таймер с входной привязкой к Blob Storage

Функция запускается по расписанию (каждый час), читает файл из Blob Storage и обрабатывает его содержимое. Код на Python:

```python import azure.functions as func import logging

def main(mytimer: func.TimerRequest, inputblob: func.InputStream) -> None: logging.info(f"Processing blob: {inputblob.name}") content = inputblob.read().decode('utf-8')

Логика обработки

```

Привязки в разных языках программирования

Azure Functions поддерживает несколько языков, и синтаксис привязок различается:

  • C# — используются атрибуты (например, [HttpTrigger], [Queue]).
  • Java — используются аннотации (например, @HttpTrigger, @QueueOutput).
  • JavaScript/TypeScript — конфигурация в function.json, данные передаются через параметры функции.
  • Python — конфигурация в function.json, данные передаются через параметры функции с типами из модуля azure.functions.
  • PowerShell — конфигурация в function.json, данные передаются через параметры функции.

Интересные факты

  • Привязки Azure Functions были впервые представлены в 2016 году вместе с запуском сервиса Azure Functions.
  • Механизм привязок основан на конвейерах данных (data pipelines), которые автоматически преобразуют данные из одного формата в другой (например, JSON в объект C#).
  • Для некоторых ресурсов (например, Azure Cosmos DB) привязки поддерживают автоматическое создание документов — если документ не существует, он будет создан при записи.
  • В Azure Functions версии 2.x и выше привязки стали более гибкими: появилась поддержка пользовательских привязок (custom bindings), которые разработчики могут создавать самостоятельно.

Источники

  • Документация Microsoft Azure: «Azure Functions triggers and bindings concepts».
  • Руководство по Azure Functions на портале Microsoft Learn.
  • Статья «Azure Functions Bindings: A Deep Dive» на сайте Microsoft Tech Community.
  • Официальный репозиторий Azure Functions на GitHub.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →