Gatilhos e ligações do Funções do Azure

Neste artigo, você aprenderá os conceitos de alto nível em torno de gatilhos e ligações para funções.

Os gatilhos fazem com que uma função seja executada. Um gatilho define como uma função é invocada, e uma função deve ter exatamente um gatilho. Os gatilhos também podem passar dados para sua função, como você faria com chamadas de método.

A vinculação a uma função é uma maneira de conectar declarativamente suas funções a outros recursos. As ligações passam dados para sua função (uma ligação de entrada) ou permitem que você grave dados de sua função (uma ligação de saída) usando parâmetros de vinculação. Seu gatilho de função é essencialmente um tipo especial de ligação de entrada.

Você pode misturar e combinar ligações para se adequar ao cenário específico da sua função. As ligações são opcionais e uma função pode ter uma ou várias ligações de entrada e/ou saída.

Gatilhos e associações permitem evitar a necessidade de codificar diretamente o acesso a outros serviços. A sua função recebe dados (por exemplo, os conteúdos de uma mensagem de fila) em parâmetros de função. Pode enviar dados (por exemplo, para criar uma mensagem de fila) através do valor de retorno da função.

Considere os seguintes exemplos de como você pode implementar funções:

Cenário de exemplo Acionador Vinculação de entrada Vinculação de saída
Chega uma nova mensagem de fila, que executa uma função para gravar em outra fila. Fila* Nenhum Fila*
Um trabalho agendado lê o conteúdo do Armazenamento de Blobs do Azure e cria um novo documento do Azure Cosmos DB. Temporizador Armazenamento de Blobs Azure Cosmos DB
O Azure Event Grid é usado para ler uma imagem do Armazenamento de Blobs e um documento do Azure Cosmos DB para enviar um email. Event Grid Armazenamento de Blobs e Azure Cosmos DB SendGrid

* Representa filas diferentes.

Esses exemplos não devem ser exaustivos, mas ilustram como você pode usar gatilhos e ligações juntos. Para um conjunto mais abrangente de cenários, consulte Cenários do Funções do Azure.

Sugestão

O Funções do Azure não exige que uses bindings de entrada e saída para te ligares aos serviços do Azure. Podes sempre criar um cliente SDK do Azure no teu código e usá-lo para as transferências de dados. Para obter mais informações, consulte Conectar-se a serviços.

Definições de gatilho e associação

O exemplo seguinte mostra uma função ativada por HTTP com uma ligação de saída que escreve uma mensagem numa fila do Armazenamento do Azure.

Para funções de biblioteca de classes C#, você configura gatilhos e associações decorando métodos e parâmetros com atributos C#. O atributo específico que você aplica pode depender do modelo de tempo de execução do C#:

Defines o gatilho HTTP (HttpTrigger) no Run método para uma função chamada HttpExample que devolve um MultiResponse objeto:

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

Este exemplo mostra a definição de MultiResponse objeto. A definição de objeto retorna HttpResponse para a solicitação HTTP e grava uma mensagem em uma fila de armazenamento usando uma QueueOutput vinculação:

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

Para obter mais informações, consulte o guia C# para modelos de trabalho isolados.

As funções de script C# herdadas usam um ficheiro de definição function.json. Para mais informações, consulte a referência para desenvolvedores Funções do Azure script C# (.csx).

Para funções Java, configuras triggers e bindings anotando métodos e parâmetros específicos. Define-se este gatilho HTTP (@HttpTrigger) no run método para uma função chamada HttpExample. A função escreve numa fila de armazenamento chamada outqueue, definida pela anotação @QueueOutput no parâmetro msg.

@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.");

Para mais informações, consulte o guia para desenvolvedores Java .

A maneira como defines disparadores e bindings para funções Node.js depende da versão específica de Node.js para Funções do Azure.

No Node.js para Funções do Azure versão 4, configuras triggers e bindings usando objetos exportados do módulo @azure/functions. Para obter mais informações, consulte o Node.js guia do desenvolvedor.

O método do http objeto exportado app define um gatilho HTTP. O storageQueue método em output define uma ligação de saída neste gatilho.

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

O método do http objeto exportado app define um gatilho HTTP. O storageQueue método em output define uma ligação de saída neste gatilho.

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

Este arquivo de exemplo function.json define a função:

    {
      "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"
    }
  ]
}

Para obter mais informações, consulte o guia do desenvolvedor do PowerShell.

A forma como defines a função depende da versão do Python for Funções do Azure:

No Python for Funções do Azure versão 2, defines a função diretamente em código usando decoradores:

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)

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

Considerações vinculativas

  • Nem todos os serviços suportam ligações de entrada e saída. Consulte sua extensão de vinculação específica para obter exemplos de código específicos para associações.

  • Gatilhos e ligações são definidos de forma diferente dependendo da linguagem de desenvolvimento. Certifique-se de selecionar seu idioma na parte superior deste artigo.

  • Os nomes de gatilho e ligação são limitados a caracteres alfanuméricos e _, o sublinhado.

Tarefa para adicionar ligações a uma função

Você pode conectar sua função a outros serviços usando ligações de entrada ou saída. Adicione uma associação adicionando suas definições específicas à sua função. Para saber como, veja Add bindings a uma função existente em Funções do Azure.

O Funções do Azure suporta múltiplos bindings, que deve configurar corretamente. Por exemplo, uma função pode ler dados de uma fila (ligação de entrada) e escrever dados numa base de dados (ligação de saída) ao mesmo tempo.

Vinculações suportadas

Esta tabela mostra os gatilhos e ligações disponíveis no Funções do Azure:1

Tipo Acionador Entrada Resultado
Armazenamento de Blobs ✔ ✔ ✔
Azure Cosmos DB ✔ ✔ ✔
Azure Data Explorer ✔ ✔
SQL do Azure ✔ ✔ ✔
Dapr3 ✔ ✔ ✔
Grelha de Eventos ✔ ✔
Hubs de Eventos ✔ ✔
HTTP e webhooks ✔ ✔
Hub IoT ✔
Kafka2 ✔ ✔
Protocolo de contexto do modelo ✔
Armazenamento em Fila ✔ ✔
Redis ✔ ✔ ✔
RabbitMQ2 ✔ ✔
SendGrid ✔
Autocarro de serviço ✔ ✔
Serviço Azure SignalR ✔ ✔ ✔
Armazenamento de Tabelas ✔ ✔
Temporizador ✔
Twilio ✔
Conector gerenciado ✔
  1. Registe todas as ligações exceto HTTP e temporizador. Veja Registar as extensões de ligação do Funções do Azure.
  2. Os gatilhos não são suportados no plano de Consumo. Este tipo de vinculação requer triggers acionados por tempo de execução.
  3. Este tipo de binding é suportado apenas no Kubernetes, Azure IoT Edge e outros modos auto-hospedados.

Para obter informações sobre quais vinculações estão em visualização ou são aprovadas para uso em produção, consulte Idiomas Suportados.

Versões específicas de extensões de vinculação são suportadas somente enquanto o SDK de serviço subjacente é suportado. As alterações no suporte na versão do SDK do serviço subjacente afetam o suporte para a extensão consumidora.

Conectores gerenciados

Os conectores geridos no Azure Connector Namespace estendem os serviços disponíveis através de bindings suportados. Pode usar gatilhos de conector e ações do SDK para integrar serviços como o Microsoft 365, o Teams e o SharePoint, ao passo que o namespace do conector gere webhooks, autenticação e novas tentativas. Para saber mais, consulte Utilizar conectores geridos no Funções do Azure.

Tipos de SDK

As extensões de binding do Funções do Azure usam SDKs de serviço do Azure para se ligar aos serviços do Azure. Os tipos específicos de SDK usados pelas associações podem influenciar a maneira como lida com os dados nas suas funções. Alguns bindings suportam tipos específicos de SDK que proporcionam funcionalidades mais ricas e melhor integração com o serviço, enquanto outros usam tipos mais genéricos como strings ou arrays de bytes. Quando disponível, usar tipos específicos de SDK pode proporcionar benefícios como melhor segurança de tipos, manipulação de dados mais fácil e acesso a funcionalidades específicas do serviço.

Esta tabela indica extensões de ligação que atualmente suportam tipos de SDK:

Extension Types Nível de suporte
Armazenamento de Blobs do Azure BlobClient
BlobContainerClient
BlockBlobClient
PageBlobClient
AppendBlobClient
Gatilho: GA
Entrada: GA
Azure Cosmos DB CosmosClient
Database
Container
Entrada: GA
Azure Event Grid CloudEvent
EventGridEvent
Gatilho: GA
Hubs de Eventos do Azure EventData
EventHubProducerClient
Gatilho: GA
Armazenamento de Filas do Azure QueueClient
QueueMessage
Gatilho: GA
Azure Service Bus ServiceBusClient
ServiceBusReceiver
ServiceBusSender
ServiceBusMessage
Gatilho: GA
Armazenamento de Tabelas do Azure TableClient
TableEntity
Entrada: GA

Considerações para os tipos de SDK:

  • Ao usar expressões de associação que dependem de dados de gatilho, os tipos de SDK para o gatilho em si não podem ser usados.
  • Para cenários de saída onde podes usar um tipo de SDK, cria e trabalha diretamente com clientes SDK em vez de usar uma ligação de saída.
  • O gatilho Azure Cosmos DB usa o feed de alteração Azure Cosmos DB e expõe os itens do feed de alteração como tipos serializáveis em JSON. Como resultado, os tipos de SDK não são suportados para este trigger.

Para mais informações, consulte os tipos de SDK no guia para programadores de C#.

Extension Types Nível de suporte Exemplos
Armazenamento de Blobs do Azure BlobClient
ContainerClient
StorageStreamDownloader
Gatilho: GA
Entrada: GA
Quickstart
BlobClient
ContainerClient
StorageStreamDownloader
Azure Cosmos DB CosmosClient
DatabaseProxy
ContainerProxy
Entrada: pré-visualização Quickstart
ContainerProxy
CosmosClient
DatabaseProxy
Hubs de Eventos do Azure EventData Gatilho: prévia Quickstart
EventData
Azure Service Bus ServiceBusReceivedMessage Gatilho: prévia Quickstart
ServiceBusReceivedMessage

Considerações para os tipos de SDK:

  • Para cenários de saída onde podes usar um tipo de SDK, cria e trabalha diretamente com clientes SDK em vez de usar uma ligação de saída.
  • O gatilho Azure Cosmos DB usa o feed de alteração Azure Cosmos DB e expõe os itens do feed de alteração como tipos serializáveis em JSON. Como resultado, os tipos de SDK não são suportados para este trigger.

Os tipos de SDK são suportados apenas quando se utiliza o modelo de programação Python v2. Para mais informações, consulte SDK type bindings no guia para desenvolvedores Python.

Extension Types Nível de suporte
Armazenamento de Blobs do Azure BlobClient
ContainerClient
ReadableStream
Preview
Azure Service Bus ServiceBusClient
ServiceBusReceiver
ServiceBusSender
ServiceBusMessage
Preview

Os tipos de SDK são suportados apenas quando se utiliza o modelo de programação Node v4. Para mais informações, consulte os tipos de SDK no guia de programação Node.js.

Extension Types Nível de suporte
Armazenamento de Blobs do Azure BlobClient
BlobContainerClient
Preview

Para mais informações, veja c0 no guia para programadores Java.

Importante

Os tipos de SDK não são atualmente suportados para aplicações PowerShell.

O Go suporta a injeção de clientes SDK para accionadores que fornecem clientes do SDK do Azure. Durante a pré-visualização pública, os acionadores do Armazenamento de Blobs podem receber diretamente no processador um SDK do Azure *blob.Client autenticado.

Extension Types Nível de suporte
Armazenamento de Blobs do Azure *blob.Client Preview

Para mais informações, consulte Acionadores de extensão na referência do programador de Go.

Encadernações de agente

Importante

As associações de agentes para aplicações de funções em Python encontram-se atualmente em pré-visualização. Funcionalidades, nomes de pacotes e configuração podem mudar antes da disponibilidade geral.

As ligações de agentes permitem injetar um Agent objeto numa função Python, mantendo os triggers, bindings e lógica de aplicação padrão do Funções do Azure. Use vinculações de agentes quando parte do fluxo de trabalho de uma função beneficiar do raciocínio agente, mas o seu código de função deve continuar a controlar a execução.

As associações de agente também suportam as orquestrações do Durable Functions. A context.call_agent() API segura para repetição executa operações do agente numa atividade para que a repetição da orquestração permaneça determinística.

Existem ligações de agentes disponíveis para o modelo de programação Python v2. Para mais informações, veja Ligações de agentes para aplicações de funções Python.

Exemplos de código para ligações

Use a tabela a seguir para encontrar mais exemplos de tipos de vinculação específicos que mostram como trabalhar com associações em suas funções. Primeiro, escolha a guia de idioma que corresponde ao seu projeto.

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

Serviço Exemplos Exemplos
Armazenamento de Blobs Trigger
Entrada
Output
Link
Azure Cosmos DB Trigger
Entrada
Output
Link
Azure Data Explorer Entrada
Output
Link
SQL do Azure Trigger
Entrada
Output
Link
Event Grid Trigger
Output
Link
Hubs de Eventos Trigger
Output
Hub IoT Trigger
Output
HTTP Trigger Link
Protocolo de contexto do modelo Acionador de ferramenta
Acionador de recurso
Gatilho de Prompt
Link
Armazenamento de Filas Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Barramento de Serviço Trigger
Output
Link
Azure SignalR Service Trigger
Entrada
Output
Armazenamento de Tabelas Entrada
Output
Temporizador Trigger Link
Twilio Output Link
Conectores gerenciados Trigger Link
Serviço Exemplos Exemplos
Armazenamento de Blobs Trigger
Entrada
Output
Link
Azure Cosmos DB Trigger
Entrada
Output
Link
Azure Data Explorer Entrada
Output
Link
SQL do Azure Trigger
Entrada
Output
Event Grid Trigger
Output
Link
Hubs de Eventos Trigger
Output
Hub IoT Trigger
Output
HTTP Trigger Link
Protocolo de contexto do modelo Acionador de ferramenta
Acionador de recurso
Gatilho de Prompt
Link
Armazenamento de Filas Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Barramento de Serviço Trigger
Output
Link
Azure SignalR Service Trigger
Entrada
Output
Armazenamento de Tabelas Entrada
Output
Temporizador Trigger Link
Twilio Output
Serviço Exemplos Exemplos
Armazenamento de Blobs Trigger
Entrada
Output
Link
Azure Cosmos DB Trigger
Entrada
Output
Link
Azure Data Explorer Entrada
Output
SQL do Azure Trigger
Entrada
Output
Link
Event Grid Trigger
Output
Hubs de Eventos Trigger
Output
Hub IoT Trigger
Output
HTTP Trigger Link
Protocolo de contexto do modelo Acionador de ferramenta
Acionador de recurso
Gatilho de Prompt
Link
Armazenamento de Filas Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Barramento de Serviço Trigger
Output
Link
Azure SignalR Service Trigger
Entrada
Output
Armazenamento de Tabelas Entrada
Output
Temporizador Trigger
Twilio Output
Conectores gerenciados Trigger Link
Serviço Exemplos Exemplos
Armazenamento de Blobs Trigger
Entrada
Output
Azure Cosmos DB Trigger
Entrada
Output
SQL do Azure Trigger
Entrada
Output
Event Grid Trigger
Output
Hubs de Eventos Trigger
Output
Hub IoT Trigger
Output
HTTP Trigger Link
Armazenamento de Filas Trigger
Output
RabbitMQ Trigger
Output
SendGrid Output
Barramento de Serviço Trigger
Output
Azure SignalR Service Trigger
Entrada
Output
Armazenamento de Tabelas Entrada
Output
Temporizador Trigger
Twilio Output

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

Serviço Exemplos Exemplos
Armazenamento de Blobs Trigger
Entrada
Output
Link
Azure Cosmos DB Trigger
Entrada
Output
Link
Azure Data Explorer Entrada
Output
SQL do Azure Trigger
Entrada
Output
Link
Event Grid Trigger
Output
Hubs de Eventos Trigger
Output
Hub IoT Trigger
Output
HTTP Trigger Link
Protocolo de contexto do modelo Acionador de ferramenta
Acionador de recurso
Gatilho de Prompt
Link
Armazenamento de Filas Trigger
Output
RabbitMQ Trigger
Output
SendGrid Output
Barramento de Serviço Trigger
Output
Link
Azure SignalR Service Trigger
Entrada
Output
Armazenamento de Tabelas Entrada
Output
Temporizador Trigger
Twilio Output
Conectores gerenciados Trigger Link

Ligações personalizadas

Você pode criar ligações de entrada e saída personalizadas. Deve criar ligações em .NET, mas pode consumi-las de qualquer linguagem suportada. Para mais informações sobre a criação de bindings personalizados, veja Criação de bindings personalizados de entrada e saída.