Основные понятия. Триггеры и привязки в функциях Azure
В этой статье вы узнаете о высокоуровневых понятиях, связанных с триггерами и привязками функций.
Триггеры — это причина запуска функции. Триггер определяет способ вызова функции, при этом функция должна иметь только один триггер. Триггеры также могут передавать данные в функцию, как и вызовы методов.
Привязка к функции — это способ декларативного подключения функций к другим ресурсам; привязки либо передают данные в функцию (входную привязку), либо позволяют записывать данные из функции (выходная привязка) с помощью параметров привязки. Триггер функции по сути является особым типом входной привязки.
Вы можете смешивать и сопоставлять различные привязки, чтобы соответствовать конкретному сценарию функции. Привязки необязательны, а у функции может быть одна или несколько входных и выходных привязок.
Триггеры и привязки позволяют избежать жестко запрограммированного доступа к другим службам. Функция получает нужные данные (например, содержимое сообщения из очереди) в виде параметров. Вы отправляете данные (например, для создания в очереди сообщения) с использованием возвращаемого значения функции.
Рассмотрим следующие примеры реализации различных функций.
Пример сценария | Триггер | Входные привязки | Выходные привязки |
---|---|---|---|
Поступает новое сообщение очереди, которое запускает функцию для записи в другую очередь. | Очередь* | Не допускается | Очередь* |
Запланированное задание считывает содержимое хранилища BLOB-объектов и создает новый документ Azure Cosmos DB. | Таймер | Хранилище BLOB-объектов | Azure Cosmos DB |
Сетка событий используется для чтения изображения из хранилища BLOB-объектов и документа из Azure Cosmos DB для отправки сообщения электронной почты. | Сетка событий | Хранилище BLOB-объектов и Azure Cosmos DB | SendGrid |
* Представляет разные очереди
Эти примеры не являются исчерпывающими, но позволяют показать, как можно использовать триггеры и привязки вместе. Более полный набор сценариев см. в Функции Azure сценариях.
Совет
Функции не требуют использования входных и выходных привязок для подключения к службам Azure. Вы всегда можете создать клиент Azure SDK в коде и использовать его вместо передачи данных. Дополнительные сведения см. в разделе "Подключение к службам".
Определения триггеров и привязок
Функция имеет один триггер и одну или несколько привязок. Тип привязки — входные или выходные данные. Не все службы поддерживают входные и выходные привязки. Ознакомьтесь с конкретным расширением привязки для конкретных примеров кода привязок.
Триггеры и привязки определяются по-разному в зависимости от языка разработки. Выберите язык в верхней части статьи.
В этом примере показана функция с триггером HTTP с выходной привязкой, которая записывает сообщение в очередь служба хранилища Azure.
Для функций библиотеки классов C# триггеры и привязки настраиваются путем декорирования методов и параметров атрибутами C#, где конкретный атрибут, примененный, может зависеть от модели среды выполнения C#:
Триггер HTTP (HttpTrigger
) определен в методе Run
для функции с именем HttpExample
, возвращающей MultiResponse
объект:
[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
В этом примере показано MultiResponse
определение объекта, которое возвращает http-запрос HttpResponse
, а также записывает сообщение в очередь хранилища с помощью привязки QueueOutput
:
public class MultiResponse
{
[QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
Дополнительные сведения см. в руководстве по изолированной рабочей модели C#.
Устаревшие функции скрипта C# используют файл определения function.json. Дополнительные сведения см. в справочнике разработчика по скрипту C# Функции Azure (CSX).
Для функций Java триггеры и привязки настраиваются путем аннотирования определенных методов и параметров. Этот триггер HTTP определяется@HttpTrigger
методом run
для функции с именем HttpTriggerQueueOutput
, которая записывается в очередь хранилища, определенную @QueueOutput
заметкой параметра message
:
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@QueueOutput(name = "msg", queueName = "outqueue",
connection = "AzureWebJobsStorage") OutputBinding<String> msg,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
Дополнительные сведения см. в руководстве разработчика Java.
Способ определения триггеров и привязки для функций Node.js зависит от конкретной версии Node.js для функций:
Этот пример представляет собой функцию, активированную HTTP, которая создает элемент очереди для каждого полученного HTTP-запроса.
Метод http
экспортированного app
объекта определяет триггер HTTP, а storageQueue
метод output
определяет выходную привязку для этого триггера.
const { app, output } = require('@azure/functions');
const queueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
});
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [queueOutput],
handler: async (request, context) => {
const body = await request.text();
context.extraOutputs.set(queueOutput, body);
return { body: 'Created queue item.' };
},
});
Метод http
экспортированного app
объекта определяет триггер HTTP, а storageQueue
метод output
определяет выходную привязку для этого триггера.
import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';
const queueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const body = await request.text();
context.extraOutputs.set(queueOutput, body);
return { body: 'Created queue item.' };
}
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [queueOutput],
handler: httpTrigger1,
});
Этот пример function.json
файла определяет функцию:
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"type": "queue",
"direction": "out",
"name": "msg",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
]
}
Дополнительные сведения см. в руководстве разработчика PowerShell.
Способ определения функции зависит от версии Python для функций:
В Python for Functions версии 2 вы определяете функцию непосредственно в коде с помощью декораторов.
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
Добавление привязок к функции
Функцию можно подключить к другим службам, добавив входные и выходные привязки. Добавьте привязку, включив в функцию соответствующие ей определения. Инструкции приведены в разделе Добавление привязок к существующей функции в Функциях Azure.
Функции Azure поддерживает несколько привязок, которые должны быть правильно настроены. Например, функция может считывать данные из очереди (входная привязка) и записывать данные в базу данных (выходную привязку).
Поддерживаемые привязки
В этой таблице показаны привязки, которые поддерживаются в двух основных версиях среды выполнения Функций Azure.
Тип | 1.x1 | 2.x и выше2 | Триггер | Входные данные | Выходные данные |
---|---|---|---|---|---|
Хранилище BLOB-объектов | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
Обозреватель данных Azure | ✔ | ✔ | ✔ | ||
Azure SQL | ✔ | ✔ | ✔ | ✔ | |
Dapr4 | ✔ | ✔ | ✔ | ✔ | |
Сетка событий | ✔ | ✔ | ✔ | ✔ | |
Центры событий | ✔ | ✔ | ✔ | ✔ | |
HTTP и веб-перехватчики | ✔ | ✔ | ✔ | ✔ | |
Центр IoT | ✔ | ✔ | ✔ | ||
Kafka3 | ✔ | ✔ | ✔ | ||
Мобильные приложения | ✔ | ✔ | ✔ | ||
Центры уведомлений | ✔ | ✔ | |||
Хранилище очередей | ✔ | ✔ | ✔ | ✔ | |
Redis | ✔ | ✔ | |||
RabbitMQ3 | ✔ | ✔ | ✔ | ||
SendGrid | ✔ | ✔ | ✔ | ||
Служебная шина | ✔ | ✔ | ✔ | ✔ | |
SignalR | ✔ | ✔ | ✔ | ✔ | |
Хранилище таблиц | ✔ | ✔ | ✔ | ✔ | |
Таймер | ✔ | ✔ | ✔ | ||
Twilio | ✔ | ✔ | ✔ |
Примечания:
- Поддержка будет завершена для среды выполнения Функции Azure версии 1.x 14 сентября 2026 г. Настоятельно рекомендуется перенести приложения в версию 4.x для полной поддержки.
- Начиная с среды выполнения версии 2.x все привязки, кроме ПРОТОКОЛА HTTP и Таймера, должны быть зарегистрированы. Ознакомьтесь с разделом Регистрация расширений привязки.
- Триггеры не поддерживаются в плане потребления. Требуются триггеры, управляемые средой выполнения.
- Поддерживается только в Kubernetes, IoT Edge и других автономных режимах.
Сведения о том, какие привязки доступны в предварительной версии или утверждены для использования в рабочей среде, см. в статье Поддерживаемые языки в решении "Функции Azure".
Конкретные версии расширения привязки поддерживаются только в то время как поддерживается базовый пакет SDK службы. Изменения в поддержке в базовой версии пакета SDK службы влияют на поддержку используемого расширения.
Примеры кода привязок
В следующей таблице приведены дополнительные примеры конкретных типов привязки, которые показывают, как работать с привязками в функциях. Сначала выберите вкладку языка, соответствующего проекту.
Код привязки для C# зависит от конкретной модели процесса.
Service | Примеры | Примеры |
---|---|---|
Хранилище BLOB-объектов | Триггер Входные данные Выходные данные |
Ссылка |
Azure Cosmos DB | Триггер Входные данные Выходные данные |
Ссылка |
Azure Data Explorer | Входные данные Выходные данные |
Ссылка |
Azure SQL | Триггер Входные данные Выходные данные |
Ссылка |
Сетка событий | Триггер Выходные данные |
Ссылка |
Event Hubs | Триггер Выходные данные |
|
Центр Интернета вещей | Триггер Выходные данные |
|
HTTP | Триггер | Ссылка |
Хранилище очередей | Триггер Выходные данные |
Ссылка |
RabbitMQ | Триггер Выходные данные |
|
SendGrid | Выходные данные | |
Cлужебная шина | Триггер Выходные данные |
Ссылка |
SignalR | Триггер Входные данные Выходные данные |
|
Хранилище таблиц | Входные данные Выходные данные |
|
Таймер | Триггер | Ссылка |
Twilio | Выходные данные | Ссылка |
Service | Примеры | Примеры |
---|---|---|
Хранилище BLOB-объектов | Триггер Входные данные Выходные данные |
Ссылка |
Azure Cosmos DB | Триггер Входные данные Выходные данные |
Ссылка |
Azure Data Explorer | Входные данные Выходные данные |
Ссылка |
Azure SQL | Триггер Входные данные Выходные данные |
|
Сетка событий | Триггер Выходные данные |
Ссылка |
Event Hubs | Триггер Выходные данные |
|
Центр Интернета вещей | Триггер Выходные данные |
|
HTTP | Триггер | Ссылка |
Хранилище очередей | Триггер Выходные данные |
Ссылка |
RabbitMQ | Триггер Выходные данные |
|
SendGrid | Выходные данные | |
Cлужебная шина | Триггер Выходные данные |
Ссылка |
SignalR | Триггер Входные данные Выходные данные |
|
Хранилище таблиц | Входные данные Выходные данные |
|
Таймер | Триггер | Ссылка |
Twilio | Выходные данные | Ссылка |
Service | Примеры | Примеры |
---|---|---|
Хранилище BLOB-объектов | Триггер Входные данные Выходные данные |
Ссылка |
Azure Cosmos DB | Триггер Входные данные Выходные данные |
Ссылка |
Azure Data Explorer | Входные данные Выходные данные |
|
Azure SQL | Триггер Входные данные Выходные данные |
Ссылка |
Сетка событий | Триггер Выходные данные |
Ссылка |
Event Hubs | Триггер Выходные данные |
|
Центр Интернета вещей | Триггер Выходные данные |
|
HTTP | Триггер | Ссылка |
Хранилище очередей | Триггер Выходные данные |
Ссылка |
RabbitMQ | Триггер Выходные данные |
|
SendGrid | Выходные данные | |
Cлужебная шина | Триггер Выходные данные |
Ссылка |
SignalR | Триггер Входные данные Выходные данные |
|
Хранилище таблиц | Входные данные Выходные данные |
|
Таймер | Триггер | Ссылка |
Twilio | Выходные данные | Ссылка |
Service | Примеры | Примеры |
---|---|---|
Хранилище BLOB-объектов | Триггер Входные данные Выходные данные |
Ссылка |
Azure Cosmos DB | Триггер Входные данные Выходные данные |
Ссылка |
Azure SQL | Триггер Входные данные Выходные данные |
|
Сетка событий | Триггер Выходные данные |
Ссылка |
Event Hubs | Триггер Выходные данные |
|
Центр Интернета вещей | Триггер Выходные данные |
|
HTTP | Триггер | Ссылка |
Хранилище очередей | Триггер Выходные данные |
Ссылка |
RabbitMQ | Триггер Выходные данные |
|
SendGrid | Выходные данные | |
Cлужебная шина | Триггер Выходные данные |
Ссылка |
SignalR | Триггер Входные данные Выходные данные |
|
Хранилище таблиц | Входные данные Выходные данные |
|
Таймер | Триггер | Ссылка |
Twilio | Выходные данные | Ссылка |
Код привязки для Python зависит от версии модели Python.
Service | Примеры | Примеры |
---|---|---|
Хранилище BLOB-объектов | Триггер Входные данные Выходные данные |
Ссылка |
Azure Cosmos DB | Триггер Входные данные Выходные данные |
Ссылка |
Azure Data Explorer | Входные данные Выходные данные |
|
Azure SQL | Триггер Входные данные Выходные данные |
Ссылка |
Сетка событий | Триггер Выходные данные |
Ссылка |
Event Hubs | Триггер Выходные данные |
|
Центр Интернета вещей | Триггер Выходные данные |
|
HTTP | Триггер | Ссылка |
Хранилище очередей | Триггер Выходные данные |
Ссылка |
RabbitMQ | Триггер Выходные данные |
|
SendGrid | Выходные данные | |
Cлужебная шина | Триггер Выходные данные |
Ссылка |
SignalR | Триггер Входные данные Выходные данные |
|
Хранилище таблиц | Входные данные Выходные данные |
|
Таймер | Триггер | Ссылка |
Twilio | Выходные данные | Ссылка |
Настраиваемые привязки
Вы можете создавать входные и выходные привязки. Привязки должны создаваться в .NET, но их можно использовать на любом поддерживаемом языке. Подробнее о создании настраиваемых привязок см. в разделе Создание настраиваемых входных и выходных привязок.