Conectar funções a serviços de Azure usando associações

Quando você cria uma função, o código de gatilho específico da linguagem é adicionado ao seu projeto a partir de um conjunto de modelos de gatilho. Se você quiser conectar sua função a outros serviços usando associações de entrada ou saída, será necessário adicionar definições de associação específicas em sua função. Para saber mais sobre associações, consulte Azure Functions conceitos de gatilhos e associações.

Desenvolvimento local

Ao desenvolver funções localmente, você precisa atualizar o código da função para adicionar associações. Para idiomas que usam function.json, Visual Studio Code fornece ferramentas para adicionar associações a uma função.

Adicionar associações manualmente com base em exemplos

Ao adicionar uma associação a uma função existente, você precisa adicionar atributos específicos de associação à definição de função no código.

Ao adicionar uma associação a uma função existente, você precisa adicionar anotações específicas de associação à definição de função no código.

Ao adicionar uma associação a uma função existente, você precisa atualizar o código da função e adicionar uma definição ao arquivo de configuração function.json.

Ao adicionar uma associação a uma função existente, você precisa atualizar a definição de função, dependendo do modelo:

É necessário adicionar anotações específicas de encadeamento à definição da função no código.

No Go, você configura os gatilhos suportados usando a API fluente de registro na sua função main(). Cada tipo de gatilho tem um método de registro dedicado com opções funcionais para configuração. Nenhum arquivo de configuração de associação separado é necessário.

O exemplo a seguir mostra uma função disparada por HTTP. Se você precisar gravar no Armazenamento de Filas a partir de uma função Go, use diretamente o SDK do Azure para Go, porque as associações de saída do Armazenamento de Filas ainda não têm suporte no momento pelo worker do 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

O worker em Go atualmente oferece suporte apenas a gatilhos. As associações de entrada e saída, como associações de saída do Armazenamento de Filas, ainda não estão disponíveis. Use o SDK do Azure for Go para interagir com outros serviços Azure diretamente do código de função.

O worker em Go atualmente oferece suporte aos seguintes tipos de gatilho:

Tipo de gatilho Método de registro Exemplos
HTTP app.HTTP() exemplos de HTTP
Timer app.Timer() Exemplos de Timer
Azure Cosmos DB app.CosmosDB() Exemplos do Cosmos DB
Barramento de Serviço do Azure (Fila) app.ServiceBusQueue() Exemplos de filas do Barramento de Serviço
Barramento de Serviço do Azure (Tópico) app.ServiceBusTopic() Exemplos de tópicos do Barramento de Serviço
Hubs de Eventos app.EventHub() Exemplos de Hubs de Eventos
Grade de Eventos app.EventGrid() Exemplos do Event Grid
Armazenamento de Blobs app.Blob() Exemplos de Blob

Para obter mais informações, consulte a referência do desenvolvedor Go.

O exemplo a seguir mostra a definição de função depois de adicionar uma Associação de saída do Armazenamento de Filas a uma função disparada por HTTP:

Como uma função disparada por HTTP também retorna uma resposta HTTP, a função retorna um objeto MultiResponse, que representa a saída de HTTP e da fila.

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

Veja a seguir a definição do objeto MultiResponse que inclui a associação de saída:

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

Este exemplo usa ASP.NET Core integration. Se você não estiver usando ASP.NET Core integração, precisará alterar HttpRequest para HttpRequestData e IActionResult para HttpResponseData.

As mensagens são enviadas para a fila quando a função é concluída. A maneira como você define a associação de saída depende do seu modelo de processo. Para obter mais informações, incluindo links para o código de associação de exemplo ao qual você pode se referir, consulte Adicionar associações a uma função.

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

Para obter mais informações, incluindo links para o código de associação de exemplo ao qual você pode se referir, consulte Adicionar associações a uma função.

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' };
    }
  },
});

A maneira como você define a associação de saída depende da versão do modelo do Node.js. Para obter mais informações, incluindo links para o código de associação de exemplo ao qual você pode se referir, consulte Adicionar associações a uma função.

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

Para obter mais informações, incluindo links para o código de associação de exemplo ao qual você pode se referir, consulte Adicionar associações a uma função.

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

A maneira como você define a associação de saída depende da versão do modelo do Python. Para obter mais informações, incluindo links para o código de associação de exemplo ao qual você pode se referir, consulte Adicionar associações a uma função.

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,
});

A maneira como você define a associação de saída depende da versão do modelo do Node.js. Para obter mais informações, incluindo links para o código de associação de exemplo ao qual você pode se referir, consulte Adicionar associações a uma função.

Use a tabela a seguir para encontrar exemplos de tipos de associação específicos que você pode usar para orientá-lo na atualização de uma função existente. Primeiro, escolha a guia de idioma que corresponde ao seu projeto.

O código de associação para C# depende do modelo de processo específico.

Serviço Exemplos Exemplos
Armazenamento de Blobs Gatilho
Input
Output
Link
Azure Cosmos DB Gatilho
Input
Output
Link
Azure Data Explorer Input
Output
Link
SQL do Azure Gatilho
Input
Output
Link
Grade de Eventos Gatilho
Output
Link
Hubs de Eventos Gatilho
Output
Hub IoT Gatilho
Output
HTTP Gatilho Link
Armazenamento de Filas Gatilho
Output
Link
RabbitMQ Gatilho
Output
SendGrid Output
Barramento de Serviço Gatilho
Output
Link
Serviço do Azure SignalR Gatilho
Input
Output
Armazenamento de Tabelas Input
Output
Temporizador Gatilho Link
Twilio Output Link
Serviço Exemplos Exemplos
Armazenamento de Blobs Gatilho
Input
Output
Link
Azure Cosmos DB Gatilho
Input
Output
Link
Azure Data Explorer Input
Output
Link
SQL do Azure Gatilho
Input
Output
Grade de Eventos Gatilho
Output
Link
Hubs de Eventos Gatilho
Output
Hub IoT Gatilho
Output
HTTP Gatilho Link
Armazenamento de Filas Gatilho
Output
Link
RabbitMQ Gatilho
Output
SendGrid Output
Barramento de Serviço Gatilho
Output
Link
Serviço do Azure SignalR Gatilho
Input
Output
Armazenamento de Tabelas Input
Output
Temporizador Gatilho Link
Twilio Output
Serviço Exemplos Exemplos
Armazenamento de Blobs Gatilho
Input
Output
Link
Azure Cosmos DB Gatilho
Input
Output
Link
Azure Data Explorer Input
Output
SQL do Azure Gatilho
Input
Output
Link
Grade de Eventos Gatilho
Output
Hubs de Eventos Gatilho
Output
Hub IoT Gatilho
Output
HTTP Gatilho Link
Armazenamento de Filas Gatilho
Output
Link
RabbitMQ Gatilho
Output
SendGrid Output
Barramento de Serviço Gatilho
Output
Link
Serviço do Azure SignalR Gatilho
Input
Output
Armazenamento de Tabelas Input
Output
Temporizador Gatilho
Twilio Output
Serviço Exemplos Exemplos
Armazenamento de Blobs Gatilho
Input
Output
Azure Cosmos DB Gatilho
Input
Output
SQL do Azure Gatilho
Input
Output
Grade de Eventos Gatilho
Output
Hubs de Eventos Gatilho
Output
Hub IoT Gatilho
Output
HTTP Gatilho Link
Armazenamento de Filas Gatilho
Output
RabbitMQ Gatilho
Output
SendGrid Output
Barramento de Serviço Gatilho
Output
Serviço do Azure SignalR Gatilho
Input
Output
Armazenamento de Tabelas Input
Output
Temporizador Gatilho
Twilio Output

O código de ligação para Python depende da versão do modelo Python.

Serviço Exemplos Exemplos
Armazenamento de Blobs Gatilho
Input
Output
Link
Azure Cosmos DB Gatilho
Input
Output
Link
Azure Data Explorer Input
Output
SQL do Azure Gatilho
Input
Output
Link
Grade de Eventos Gatilho
Output
Hubs de Eventos Gatilho
Output
Hub IoT Gatilho
Output
HTTP Gatilho Link
Armazenamento de Filas Gatilho
Output
RabbitMQ Gatilho
Output
SendGrid Output
Barramento de Serviço Gatilho
Output
Link
Serviço do Azure SignalR Gatilho
Input
Output
Armazenamento de Tabelas Input
Output
Temporizador Gatilho
Twilio Output

Visual Studio Code

Quando você usa Visual Studio Code para desenvolver sua função e sua função usa um arquivo function.json, a extensão Azure Functions pode adicionar automaticamente uma associação a um arquivo function.json existente. Para saber mais, confira Adicionar associações de entrada e saída.

portal do Azure

Ao desenvolver suas funções no Azure portal, você adiciona associações de entrada e saída na guia Integrate para uma determinada função. As novas associações são adicionadas ao arquivo function.json ou aos atributos do método, dependendo do idioma. Os artigos a seguir mostram exemplos de como adicionar associações a uma função existente no portal:

Próximas etapas