Azure Functions triggers en bindingen

In dit artikel leert u de concepten op hoog niveau rondom triggers en bindingen voor functies.

Triggers zorgen ervoor dat een functie wordt uitgevoerd. Een trigger definieert hoe een functie wordt aangeroepen en een functie moet precies één trigger hebben. Triggers kunnen ook gegevens doorgeven aan uw functie, net als bij methode-aanroepen.

Binding met een functie is een manier om uw functies declaratief te verbinden met andere resources. Bindingen geven gegevens door aan uw functie (een invoerbinding) of stellen u in staat om gegevens uit uw functie (een uitvoerbinding) te schrijven met behulp van bindingsparameters. Uw functietrigger is in feite een speciaal type invoerbinding.

U kunt bindingen combineren en aanpassen aan het specifieke scenario van uw functie. Bindingen zijn optioneel en een functie kan een of meer invoer- en/of uitvoerbindingen hebben.

Met triggers en bindingen kunt u het hardcoderen van toegang tot andere services vermijden. Uw functie ontvangt gegevens (bijvoorbeeld de inhoud van een wachtrijbericht) in functieparameters. U verzendt gegevens (bijvoorbeeld om een ​​wachtrijbericht te maken) door de retourwaarde van de functie te gebruiken.

Bekijk de volgende voorbeelden van hoe u functies kunt implementeren:

Voorbeeldscenario Aanleiding Invoerbinding Uitvoerbinding
Er wordt een nieuw wachtrijbericht binnengekomen, waarmee een functie wordt uitgevoerd om naar een andere wachtrij te schrijven. Rij* Geen Rij*
Een geplande taak leest Azure Blob Storage inhoud en maakt een nieuw Azure Cosmos DB document. Tijdmeter Blob Storage Azure Cosmos DB
Azure Event Grid wordt gebruikt voor het lezen van een afbeelding uit Blob Storage en een document uit Azure Cosmos DB om een e-mailbericht te verzenden. Gebeurtenisgrid Blob Storage en Azure Cosmos DB SendGrid

* Vertegenwoordigt verschillende wachtrijen.

Deze voorbeelden zijn niet volledig bedoeld, maar laten zien hoe u triggers en bindingen samen kunt gebruiken. Zie Azure Functions scenario's voor een uitgebreidere set scenario's.

Aanbeveling

Azure Functions hoeft u geen invoer- en uitvoerbindingen te gebruiken om verbinding te maken met Azure services. U kunt altijd een Azure SDK-client maken in uw code en deze gebruiken voor uw gegevensoverdracht. Zie Verbinding maken met services voor meer informatie.

Trigger- en bindingsdefinities

In het volgende voorbeeld ziet u een door HTTP geactiveerde functie met een uitvoerbinding waarmee een bericht naar een Azure Storage wachtrij wordt geschreven.

Voor C#-klassebibliotheekfuncties configureert u triggers en bindingen door methoden en parameters te decoreren met C#-kenmerken. Het specifieke kenmerk dat u toepast, is mogelijk afhankelijk van het C#-runtimemodel:

Je definieert de HTTP-trigger (HttpTrigger) op de Run methode voor een functie met de naam HttpExample die een MultiResponse object teruggeeft:

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

In dit voorbeeld ziet u de MultiResponse objectdefinitie. De objectdefinitie keert HttpResponse terug naar de HTTP-aanvraag en schrijft een bericht naar een opslagwachtrij met behulp van een QueueOutput binding:

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

Zie de C#-handleiding voor geïsoleerde werkrolmodellen voor meer informatie.

Verouderde C#-scriptfuncties maken gebruik van een function.json definitiebestand. Zie de Azure Functions C#-scriptreferentie (.csx) voor ontwikkelaars voor meer informatie.

Voor Java functies configureert u triggers en bindingen door aantekeningen te maken op specifieke methoden en parameters. Je definieert deze HTTP-trigger (@HttpTrigger) op de run methode voor een functie genaamd HttpExample. De functie schrijft naar een opslagwachtrij met de naam outqueue die de @QueueOutput annotatie op de msg parameter definieert.

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

Zie de ontwikkelaarshandleiding voor Java voor meer informatie.

De manier waarop u triggers en bindingen voor Node.js functies definieert, is afhankelijk van de specifieke versie van Node.js voor Azure Functions:

In Node.js voor Azure Functions versie 4 configureert u triggers en bindingen met behulp van objecten die zijn geëxporteerd uit de module @azure/functions. Zie de ontwikkelaarshandleiding voorNode.js voor meer informatie.

De app-methode van het geëxporteerde http-object definieert een HTTP-trigger. De storageQueue methode voor output het definiëren van een uitvoerbinding voor deze trigger.

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

De app-methode van het geëxporteerde object http definieert een HTTP-trigger. De storageQueue methode voor output het definiëren van een uitvoerbinding voor deze trigger.

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

In dit voorbeeldbestand function.json wordt de functie gedefinieerd:

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

Zie de Ontwikkelaarshandleiding voor PowerShell voor meer informatie.

De manier waarop je de functie definieert hangt af van de versie van Python voor Azure Functions:

In Python voor Azure Functions versie 2 definieert u de functie rechtstreeks in code met behulp van decorators:

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

Overwegingen voor binding

  • Niet alle services ondersteunen zowel invoer- als uitvoerbindingen. Zie uw specifieke bindingsextensie voor specifieke codevoorbeelden voor bindingen.

  • Triggers en bindingen worden verschillend gedefinieerd, afhankelijk van de ontwikkeltaal. Zorg ervoor dat u uw taal bovenaan dit artikel selecteert.

  • Trigger- en bindingsnamen zijn beperkt tot alfanumerieke tekens en _, het onderstrepingsteken.

Taak voor het toevoegen van bindingen aan een functie

U kunt uw functie verbinden met andere services met behulp van invoer- of uitvoerbindingen. Voeg een binding toe door de specifieke definities toe te voegen aan uw functie. Zie Bindings toevoegen aan een bestaande functie in Azure Functions om te leren hoe.

Azure Functions ondersteunt meerdere bindings, die je correct moet configureren. Een functie kan bijvoorbeeld data uit een wachtrij lezen (inputbinding) en tegelijkertijd data naar een database schrijven (outputbinding).

Ondersteunde bindingen

Deze tabel toont de triggers en bindings die beschikbaar zijn in Azure Functions:1

Typologie Aanleiding Invoer Uitvoer
Blob Storage ✔ ✔ ✔
Azure Cosmos DB ✔ ✔ ✔
Azure Data Explorer ✔ ✔
Azure SQL ✔ ✔ ✔
Dapr3 ✔ ✔ ✔
Event Grid ✔ ✔
Event Hubs ✔ ✔
HTTP en webhooks ✔ ✔
IoT Hub ✔
Kafka2 ✔ ✔
Modelcontextprotocol ✔
Wachtrij Opslag ✔ ✔
Redis ✔ ✔ ✔
RabbitMQ2 ✔ ✔
SendGrid ✔
Service Bus ✔ ✔
Azure SignalR Service ✔ ✔ ✔
Table Storage ✔ ✔
Timer ✔
Twilio ✔
Beheerde connector ✔
  1. Registreer alle bindingen behalve HTTP en timer. Zie Register Azure Functions bindingextensies.
  2. Triggers worden niet ondersteund in het verbruiksabonnement. Voor dit bindingstype zijn runtimegestuurde triggers vereist.
  3. Dit bindingstype wordt alleen ondersteund in Kubernetes, Azure IoT Edge en andere zelf-hostende modi.

Zie Ondersteunde talen voor informatie over welke bindingen in preview zijn of zijn goedgekeurd voor productiegebruik.

Specifieke versies van bindingsextensies worden alleen ondersteund terwijl de onderliggende service-SDK wordt ondersteund. Wijzigingen in ondersteuning in de onderliggende service-SDK-versie zijn van invloed op de ondersteuning voor de verbruikende extensie.

Beheerde connectoren

Beheerde connectors in Azure Connector Namespace breiden de diensten uit die beschikbaar zijn via ondersteunde bindings. Je kunt connector-triggers en SDK-acties gebruiken om te integreren met diensten zoals Microsoft 365, Teams en SharePoint, terwijl Connector Namespace webhooks, authenticatie en herpogingen beheert. Voor meer informatie, zie Gebruik beheerde connectoren in Azure Functions.

SDK-typen

Azure Functions bindingsextensies maken gebruik van Azure service-SDK's om verbinding te maken met Azure services. De specifieke SDK-typen die door bindingen worden gebruikt, kunnen van invloed zijn op de werking van de gegevens in uw functies. Sommige bindingen ondersteunen SDK-specifieke typen die uitgebreidere functionaliteit bieden en betere integratie met de service bieden, terwijl andere meer algemene typen gebruiken, zoals tekenreeksen of bytematrices. Indien beschikbaar, kan het gebruik van SDK-specifieke typen voordelen bieden, zoals betere typeveiligheid, eenvoudiger gegevensmanipulatie en toegang tot servicespecifieke functies.

Deze tabel geeft bindingsextensies aan die momenteel SDK-typen ondersteunen:

Extension Types Ondersteuningsniveau
Azure Blob-opslagruimte BlobClient
BlobContainerClient
BlockBlobClient
PageBlobClient
AppendBlobClient
Trigger: GA
Invoer: GA
Azure Cosmos DB CosmosClient
Database
Container
Invoer: GA
Azure Event Grid CloudEvent
EventGridEvent
Trigger: GA
Azure Event Hubs EventData
EventHubProducerClient
Trigger: GA
Azure Queue Storage QueueClient
QueueMessage
Trigger: GA
Azure Service Bus ServiceBusClient
ServiceBusReceiver
ServiceBusSender
ServiceBusMessage
Trigger: GA
Azure-tabelopslag TableClient
TableEntity
Invoer: GA

Overwegingen voor SDK-typen:

  • Wanneer u bindingexpressies gebruikt die afhankelijk zijn van triggergegevens, kunnen SDK-typen voor de trigger zelf niet worden gebruikt.
  • Voor uitvoerscenario's waarbij u een SDK-type kunt gebruiken, maakt en werkt u rechtstreeks met SDK-clients in plaats van een uitvoerbinding.
  • De Azure Cosmos DB-trigger maakt gebruik van de Azure Cosmos DB wijzigingenfeed en maakt wijzigingenfeeditems beschikbaar als JSON-serialiseerbare typen. Hierdoor worden SDK-typen niet ondersteund voor deze trigger.

Zie sdk-typen in de C#-ontwikkelaarshandleiding voor meer informatie.

Extension Types Ondersteuningsniveau Voorbeelden
Azure Blob-opslagruimte BlobClient
ContainerClient
StorageStreamDownloader
Trigger: GA
Invoer: GA
Quickstart
BlobClient
ContainerClient
StorageStreamDownloader
Azure Cosmos DB CosmosClient
DatabaseProxy
ContainerProxy
Invoer: voorvertoning Quickstart
ContainerProxy
CosmosClient
DatabaseProxy
Azure Event Hubs EventData Trigger: voorvertoning Quickstart
EventData
Azure Service Bus ServiceBusReceivedMessage Trigger: voorvertoning Quickstart
ServiceBusReceivedMessage

Overwegingen voor SDK-typen:

  • Voor uitvoerscenario's waarbij u een SDK-type kunt gebruiken, maakt en werkt u rechtstreeks met SDK-clients in plaats van een uitvoerbinding.
  • De Azure Cosmos DB-trigger maakt gebruik van de Azure Cosmos DB wijzigingenfeed en maakt wijzigingenfeeditems beschikbaar als JSON-serialiseerbare typen. Hierdoor worden SDK-typen niet ondersteund voor deze trigger.

SDK-typen worden alleen ondersteund wanneer u het Python v2-programmeermodel gebruikt. Zie SDK-typebindingen in de ontwikkelaarshandleiding voor Python voor meer informatie.

Extension Types Ondersteuningsniveau
Azure Blob-opslagruimte BlobClient
ContainerClient
ReadableStream
Voorvertoning
Azure Service Bus ServiceBusClient
ServiceBusReceiver
ServiceBusSender
ServiceBusMessage
Voorvertoning

SDK-typen worden alleen ondersteund wanneer u het Node v4-programmeermodel gebruikt. Zie sdk-typen in de ontwikkelaarshandleiding voor Node.js voor meer informatie.

Extension Types Ondersteuningsniveau
Azure Blob-opslagruimte BlobClient
BlobContainerClient
Voorvertoning

Zie SDK-typen in de ontwikkelaarshandleiding voor Java voor meer informatie.

Belangrijk

SDK-typen worden momenteel niet ondersteund voor PowerShell-apps.

Go ondersteunt SDK-clientinjectie voor triggers die Azure SDK clients bieden. Tijdens de openbare preview kunnen Blob Storage triggers een geverifieerde Azure SDK *blob.Client rechtstreeks in de handler ontvangen.

Extension Types Ondersteuningsniveau
Azure Blob-opslagruimte *blob.Client Voorvertoning

Zie Extensietriggers in de referentie voor Go-ontwikkelaars voor meer informatie.

Agentbindingen

Belangrijk

Agent-bindings voor Python-functie-apps staan momenteel in preview. Functies, pakketnamen en configuratie kunnen veranderen voordat ze algemeen beschikbaar zijn.

Agentbindings laten je een Agent object injecteren in een Python-functie, terwijl je standaard Azure Functions-triggers, bindings en applicatielogica behoudt. Gebruik agentbindings wanneer een onderdeel van een functieworkflow baat heeft bij agentgestuurd redeneren, maar je functiecode de regie over de uitvoering moet behouden.

Agentbindings ondersteunen ook Durable Functions-orkestraties. De replayveilige context.call_agent() API voert agentbewerkingen binnen een activiteit uit, zodat het opnieuw afspelen van de orkestratie deterministisch blijft.

Agentbindings zijn beschikbaar voor het Python v2 programmeermodel. Voor meer informatie, zie Agent bindings voor Python-functieapps.

Codevoorbeelden voor bindingen

Gebruik de volgende tabel voor meer voorbeelden van specifieke bindingstypen die laten zien hoe u met bindingen in uw functies kunt werken. Kies eerst het taaltabblad dat overeenkomt met uw project.

Bindingscode voor C# is afhankelijk van het specifieke procesmodel.

Dienst Voorbeelden Voorbeelden
Blob Storage Trigger
Invoer
Uitvoer
Link
Azure Cosmos DB Trigger
Invoer
Uitvoer
Link
Azure Data Explorer Invoer
Uitvoer
Link
Azure SQL Trigger
Invoer
Uitvoer
Link
Gebeurtenisgrid Trigger
Uitvoer
Link
Event Hubs Trigger
Uitvoer
IoT Hub Trigger
Uitvoer
HTTP Trigger Link
Modelcontextprotocol Tooltrigger
Resource Trigger
Prompttrigger
Link
Wachtrij Opslag Trigger
Uitvoer
Link
RabbitMQ Trigger
Uitvoer
SendGrid Uitvoer
Service Bus Trigger
Uitvoer
Link
Azure SignalR Service Trigger
Invoer
Uitvoer
Tabelopslag Invoer
Uitvoer
Tijdmeter Trigger Link
Twilio Uitvoer Link
Beheerde connectoren Trigger Link
Dienst Voorbeelden Voorbeelden
Blob Storage Trigger
Invoer
Uitvoer
Link
Azure Cosmos DB Trigger
Invoer
Uitvoer
Link
Azure Data Explorer Invoer
Uitvoer
Link
Azure SQL Trigger
Invoer
Uitvoer
Gebeurtenisgrid Trigger
Uitvoer
Link
Event Hubs Trigger
Uitvoer
IoT Hub Trigger
Uitvoer
HTTP Trigger Link
Modelcontextprotocol Tooltrigger
Resource Trigger
Prompttrigger
Link
Wachtrij Opslag Trigger
Uitvoer
Link
RabbitMQ Trigger
Uitvoer
SendGrid Uitvoer
Service Bus Trigger
Uitvoer
Link
Azure SignalR Service Trigger
Invoer
Uitvoer
Tabelopslag Invoer
Uitvoer
Tijdmeter Trigger Link
Twilio Uitvoer
Dienst Voorbeelden Voorbeelden
Blob Storage Trigger
Invoer
Uitvoer
Link
Azure Cosmos DB Trigger
Invoer
Uitvoer
Link
Azure Data Explorer Invoer
Uitvoer
Azure SQL Trigger
Invoer
Uitvoer
Link
Gebeurtenisgrid Trigger
Uitvoer
Event Hubs Trigger
Uitvoer
IoT Hub Trigger
Uitvoer
HTTP Trigger Link
Modelcontextprotocol Tooltrigger
Resource Trigger
Prompttrigger
Link
Wachtrij Opslag Trigger
Uitvoer
Link
RabbitMQ Trigger
Uitvoer
SendGrid Uitvoer
Service Bus Trigger
Uitvoer
Link
Azure SignalR Service Trigger
Invoer
Uitvoer
Tabelopslag Invoer
Uitvoer
Tijdmeter Trigger
Twilio Uitvoer
Beheerde connectoren Trigger Link
Dienst Voorbeelden Voorbeelden
Blob Storage Trigger
Invoer
Uitvoer
Azure Cosmos DB Trigger
Invoer
Uitvoer
Azure SQL Trigger
Invoer
Uitvoer
Gebeurtenisgrid Trigger
Uitvoer
Event Hubs Trigger
Uitvoer
IoT Hub Trigger
Uitvoer
HTTP Trigger Link
Wachtrij Opslag Trigger
Uitvoer
RabbitMQ Trigger
Uitvoer
SendGrid Uitvoer
Service Bus Trigger
Uitvoer
Azure SignalR Service Trigger
Invoer
Uitvoer
Tabelopslag Invoer
Uitvoer
Tijdmeter Trigger
Twilio Uitvoer

Bindingscode voor Python is afhankelijk van de Python modelversie.

Dienst Voorbeelden Voorbeelden
Blob Storage Trigger
Invoer
Uitvoer
Link
Azure Cosmos DB Trigger
Invoer
Uitvoer
Link
Azure Data Explorer Invoer
Uitvoer
Azure SQL Trigger
Invoer
Uitvoer
Link
Gebeurtenisgrid Trigger
Uitvoer
Event Hubs Trigger
Uitvoer
IoT Hub Trigger
Uitvoer
HTTP Trigger Link
Modelcontextprotocol Tooltrigger
Resource Trigger
Prompttrigger
Link
Wachtrij Opslag Trigger
Uitvoer
RabbitMQ Trigger
Uitvoer
SendGrid Uitvoer
Service Bus Trigger
Uitvoer
Link
Azure SignalR Service Trigger
Invoer
Uitvoer
Tabelopslag Invoer
Uitvoer
Tijdmeter Trigger
Twilio Uitvoer
Beheerde connectoren Trigger Link

Aangepaste bindingen

U kunt aangepaste invoer- en uitvoerbindingen maken. Je moet bindings in .NET maken, maar je kunt ze vanuit elke ondersteunde taal consumeren. Zie Maken van aangepaste invoer- en uitvoerbindingen voor meer informatie over het maken van aangepaste bindingen.