Подключение функций к службам Azure с помощью привязок

При создании функции код триггера для конкретного языка добавляется в project из набора шаблонов триггеров. Если вы хотите подключить функцию к другим службам с помощью входных или выходных привязок, необходимо добавить в функцию определенные определения привязки. Дополнительные сведения о привязках см. в разделе концепции триггеров и привязок в Функции Azure.

Локальная разработка

При локальной разработке функций необходимо обновить код функции, чтобы добавить привязки. Для языков, использующих function.json, Visual Studio Code предоставляет средства для добавления привязок в функцию.

Добавление привязок вручную на основе примеров

При добавлении привязки к существующей функции необходимо добавить атрибуты, относящиеся к привязке, в определение функции в коде.

При добавлении привязки к существующей функции необходимо добавить заметки, относящиеся к привязке, в определение функции в коде.

При добавлении привязки к существующей функции необходимо обновить код функции и добавить определение в файл конфигурации function.json.

При добавлении привязки к существующей функции необходимо обновить определение функции в зависимости от модели:

Необходимо добавить заметки, относящиеся к привязке, в определение функции в коде.

В Go вы настраиваете поддерживаемые триггеры с помощью API простой регистрации в функции main() . Каждый тип триггера имеет выделенный метод регистрации с функциональными параметрами конфигурации. Отдельный файл конфигурации привязки не требуется.

В следующем примере показана триггерная функция HTTP. Если вам нужно записывать данные в хранилище очередей из функции Go, напрямую используйте Azure SDK для Go, поскольку выходные привязки для хранилища очередей в настоящее время не поддерживаются обработчиком Go:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"

    "github.com/azure/azure-functions-golang-worker/sdk"
    "github.com/azure/azure-functions-golang-worker/worker"
)

func main() {
    app := sdk.FunctionApp()
    app.HTTP("HttpExample", httpHandler,
        sdk.WithMethods("GET", "POST"),
        sdk.WithAuth("anonymous"),
    )
    worker.Start(app)
}

func httpHandler(w http.ResponseWriter, r *http.Request) {
    name := r.URL.Query().Get("name")
    if name == "" {
        var body struct{ Name string }
        json.NewDecoder(r.Body).Decode(&body)
        name = body.Name
    }
    if name == "" {
        w.WriteHeader(http.StatusBadRequest)
        fmt.Fprint(w, "Please pass a name on the query string or in the request body.")
        return
    }
    // Queue output bindings are not yet supported in the Go worker.
    // Use the Azure SDK for Go to write to Queue Storage directly.
    fmt.Fprintf(w, "Hello, %s!", name)
}

Note

В настоящее время обработчик Go поддерживает только триггеры. Входные и выходные привязки, такие как выходные привязки Queue Storage, пока недоступны. Используйте Azure SDK для Go для взаимодействия с другими службами Azure непосредственно из кода вашей функции.

В настоящее время Go-воркер поддерживает следующие типы триггеров:

Тип триггера Метод регистрации Примеры
HTTP app.HTTP() примеры HTTP
Таймер app.Timer() Примеры таймера
Azure Cosmos DB app.CosmosDB() Примеры Cosmos DB
Служебная шина Azure (очередь) app.ServiceBusQueue() Примеры очередей служебная шина
Служебная шина Azure (тема) app.ServiceBusTopic() примеры раздела служебная шина
Центры событий app.EventHub() Примеры центров событий
Сетка событий app.EventGrid() Примеры Event Grid
Хранилище BLOB-объектов app.Blob() примеры Blob

Дополнительные сведения см. в справочнике разработчика Go.

В следующем примере показано определение функции после добавления выходной привязки Queue Storage к функции с HTTP-триггером:

Так как функция, активировавшая HTTP, также возвращает http-ответ, функция возвращает MultiResponse объект, представляющий выходные данные HTTP и очереди.

[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)

В этом примере приведено определение MultiResponse объекта, включающего выходную привязку:

public class MultiResponse
{
    [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public IActionResult HttpResponse { get; set; }
}

В этом примере используется интеграция ASP.NET Core. Если вы не используете интеграцию ASP.NET Core, необходимо изменить HttpRequest на HttpRequestData и IActionResult на HttpResponseData.

Сообщения отправляются в очередь по завершении выполнения функции. Способ определения выходной привязки зависит от модели процесса. Дополнительные сведения, включая ссылки на пример кода привязки, к которому можно обратиться, см. в разделе "Добавление привязок к функции".

@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) {

Дополнительные сведения, включая ссылки на пример кода привязки, к которому можно обратиться, см. в разделе "Добавление привязок к функции".

const { app, output } = require('@azure/functions');

const sendToQueue = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  extraOutputs: [sendToQueue],
  handler: async (request, context) => {
    try {
      context.log(`Http function processed request for url "${request.url}"`);

      const name = request.query.get('name') || (await request.text());
      context.log(`Name: ${name}`);

      if (name) {
        const msg = `Name passed to the function ${name}`;
        context.extraOutputs.set(sendToQueue, [msg]);
        return { body: msg };
      } else {
        context.log('Missing required data');
        return { status: 404, body: 'Missing required data' };
      }
    } catch (error) {
      context.log(`Error: ${error}`);
      return { status: 500, body: 'Internal Server Error' };
    }
  },
});

Способ определения выходной привязки зависит от версии модели Node.js. Дополнительные сведения, включая ссылки на пример кода привязки, к которому можно обратиться, см. в разделе "Добавление привязок к функции".

$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg

Дополнительные сведения, включая ссылки на пример кода привязки, к которому можно обратиться, см. в разделе "Добавление привязок к функции".

@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.')

Способ определения выходной привязки зависит от версии модели Python. Дополнительные сведения, включая ссылки на пример кода привязки, к которому можно обратиться, см. в разделе "Добавление привязок к функции".

import {
  app,
  output,
  HttpRequest,
  HttpResponseInit,
  InvocationContext,
  StorageQueueOutput,
} from '@azure/functions';

const sendToQueue: StorageQueueOutput = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

export async function HttpExample(
  request: HttpRequest,
  context: InvocationContext,
): Promise<HttpResponseInit> {
  try {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || (await request.text());
    context.log(`Name: ${name}`);

    if (name) {
      const msg = `Name passed to the function ${name}`;
      context.extraOutputs.set(sendToQueue, [msg]);
      return { body: msg };
    } else {
      context.log('Missing required data');
      return { status: 404, body: 'Missing required data' };
    }
  } catch (error) {
    context.log(`Error: ${error}`);
    return { status: 500, body: 'Internal Server Error' };
  }
}

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  handler: HttpExample,
});

Способ определения выходной привязки зависит от версии модели Node.js. Дополнительные сведения, включая ссылки на пример кода привязки, к которому можно обратиться, см. в разделе "Добавление привязок к функции".

В следующей таблице приведены примеры конкретных типов привязки, которые можно использовать для обновления существующей функции. Сначала выберите языковую вкладку, соответствующую вашему проекту.

Код привязки для C# зависит от конкретной модели процесса.

Услуга Примеры Образцы
Blob-хранилище (Хранилище BLOB-объектов) Триггер
Input
Output
Link
Azure Cosmos DB Триггер
Input
Output
Link
Azure Data Explorer Input
Output
Link
Azure SQL Триггер
Input
Output
Link
Сетка событий Триггер
Output
Link
Центры событий Триггер
Output
Центр Интернета вещей Триггер
Output
HTTP Триггер Link
Хранилище очередей Триггер
Output
Link
RabbitMQ Триггер
Output
SendGrid Output
служебная шина Триггер
Output
Link
Служба Azure SignalR Триггер
Input
Output
Хранилище таблиц Input
Output
Таймер Триггер Link
Twilio Output Link
Услуга Примеры Образцы
Blob-хранилище (Хранилище BLOB-объектов) Триггер
Input
Output
Link
Azure Cosmos DB Триггер
Input
Output
Link
Azure Data Explorer Input
Output
Link
Azure SQL Триггер
Input
Output
Сетка событий Триггер
Output
Link
Центры событий Триггер
Output
Центр Интернета вещей Триггер
Output
HTTP Триггер Link
Хранилище очередей Триггер
Output
Link
RabbitMQ Триггер
Output
SendGrid Output
служебная шина Триггер
Output
Link
Служба Azure SignalR Триггер
Input
Output
Хранилище таблиц Input
Output
Таймер Триггер Link
Twilio Output
Услуга Примеры Образцы
Blob-хранилище (Хранилище BLOB-объектов) Триггер
Input
Output
Link
Azure Cosmos DB Триггер
Input
Output
Link
Azure Data Explorer Input
Output
Azure SQL Триггер
Input
Output
Link
Сетка событий Триггер
Output
Центры событий Триггер
Output
Центр Интернета вещей Триггер
Output
HTTP Триггер Link
Хранилище очередей Триггер
Output
Link
RabbitMQ Триггер
Output
SendGrid Output
служебная шина Триггер
Output
Link
Служба Azure SignalR Триггер
Input
Output
Хранилище таблиц Input
Output
Таймер Триггер
Twilio Output
Услуга Примеры Образцы
Blob-хранилище (Хранилище BLOB-объектов) Триггер
Input
Output
Azure Cosmos DB Триггер
Input
Output
Azure SQL Триггер
Input
Output
Сетка событий Триггер
Output
Центры событий Триггер
Output
Центр Интернета вещей Триггер
Output
HTTP Триггер Link
Хранилище очередей Триггер
Output
RabbitMQ Триггер
Output
SendGrid Output
служебная шина Триггер
Output
Служба Azure SignalR Триггер
Input
Output
Хранилище таблиц Input
Output
Таймер Триггер
Twilio Output

Код привязки для Python зависит от версии модели Python.

Услуга Примеры Образцы
Blob-хранилище (Хранилище BLOB-объектов) Триггер
Input
Output
Link
Azure Cosmos DB Триггер
Input
Output
Link
Azure Data Explorer Input
Output
Azure SQL Триггер
Input
Output
Link
Сетка событий Триггер
Output
Центры событий Триггер
Output
Центр Интернета вещей Триггер
Output
HTTP Триггер Link
Хранилище очередей Триггер
Output
RabbitMQ Триггер
Output
SendGrid Output
служебная шина Триггер
Output
Link
Служба Azure SignalR Триггер
Input
Output
Хранилище таблиц Input
Output
Таймер Триггер
Twilio Output

код Visual Studio

При использовании кода Visual Studio для разработки функции и функции используется файл function.json, расширение Функции Azure может автоматически добавлять привязку к существующему файлу function.json. Дополнительные сведения см. в разделе "Добавление входных и выходных привязок".

Azure portal

При разработке функций в Azure portal вы добавляете входные и выходные привязки в вкладку Integrate для данной функции. Новые привязки добавляются в файл function.json или в атрибуты метода в зависимости от языка. В следующих статьях показаны примеры добавления привязок к существующей функции на портале:

Дальнейшие шаги