Triggers en bindingen maken
Een trigger definieert hoe een functie wordt aangeroepen en een functie moet precies één trigger hebben. Aan triggers zijn gegevens gekoppeld. Meestal is dit de nettolading waarmee de functie is geactiveerd.
Binding met een functie is een manier om een andere resource declaratief te verbinden met de functie; bindingen kunnen worden verbonden als invoerbindingen, uitvoerbindingen of beide. Gegevens van bindingen worden als parameters doorgegeven aan de functie.
U kunt verschillende bindingen mixen en matchen om aan uw behoeften te voldoen. Bindingen zijn optioneel en een functie kan een of meerdere invoer- en/of uitvoerbindingen hebben.
Met triggers en bindingen kunt u de toegang tot andere services voorkomen. 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.
Wanneer u uw functies lokaal ontwikkelt, moet u rekening houden met trigger- en bindingsgedrag. Voor HTTP-triggers kunt u het HTTP-eindpunt op de lokale computer aanroepen met behulp van http://localhost/. Voor niet-HTTP-geactiveerde functies zijn er verschillende opties om lokaal uit te voeren:
- De eenvoudigste manier om bindingen tijdens lokale ontwikkeling te testen, is door gebruik te maken van verbindingsreeks s die gericht zijn op live Azure-services. U kunt liveservices targeten door de juiste verbindingsreeks-instellingen toe te voegen in de
Valuesmatrix in het local.settings.json-bestand. Wanneer u dit doet, worden lokale uitvoeringen tijdens het testen gebruikgemaakt van liveservicegegevens. Daarom kunt u overwegen om afzonderlijke services in te stellen voor gebruik tijdens het ontwikkelen en testen en vervolgens over te schakelen naar verschillende services tijdens de productie. - Voor triggers op basis van opslag kunt u de lokale Azurite-emulator gebruiken bij het testen van functies met Azure Storage-bindingen (Queue Storage, Blob Storage en Table Storage), zonder dat u verbinding hoeft te maken met externe opslagservices.
- U kunt niet-HTTP-triggerfuncties handmatig uitvoeren met behulp van speciale beheerderseindpunten. Zie Voor meer informatie handmatig een niet-HTTP geactiveerde functie uitvoeren.
Trigger- en bindingsdefinities
Triggers en bindingen worden verschillend gedefinieerd, afhankelijk van de ontwikkelingstaal en het runtimemodel.
| Taal | Triggers en bindingen configureren op... |
|---|---|
| C#-klassebibliotheek | Methoden en parameters decoreren met C#-kenmerken (in-process of geïsoleerde werker) |
| Java | methoden en parameters decoreren met Java-aantekeningen |
| JavaScript/TypeScript | v4-programmeermodel: invoer/uitvoer definiëren in code met behulp van @azure/functions; v3: configureren in een function.json per functie |
| Python | v2-programmeermodel: invoer/uitvoer definiëren met decorators; v1: configureren in function.json |
| PowerShell | configureren in function.json |
Opmerking
In moderne modellen (Node.js v4 en Python v2) maakt u een trigger- en bindingsconfiguratie in code en genereert de runtime de bijbehorende function.json. Oudere modellen (Node.js v3, Python v1, PowerShell) maken rechtstreeks gebruik vanfunction.json . U kunt programmeermodellen niet combineren binnen dezelfde functie-app.
Voor talen die afhankelijk zijn van function.json (bijvoorbeeld Node.js v3, Python v1, en PowerShell), biedt de portal een gebruikersinterface voor het toevoegen van bindingen in het tabblad Integratie. U kunt het bestand ook rechtstreeks in de portal bewerken op het tabblad Code + test van uw functie. Voor code-first-modellen, zoals Node.js v4 en Python v2, configureert u bindingen in code in uw lokale project; de portal weerspiegelt de configuratie, maar biedt mogelijk geen ondersteuning voor directe bewerkingen.
In .NET en Java definieert het parametertype het gegevenstype voor invoergegevens. Gebruik string bijvoorbeeld om de tekst van een wachtrijtrigger te binden, een bytematrix die als binair moet worden gelezen en een aangepast type om te deserialiseren naar een object. Omdat .NET-klassenbibliotheekfuncties en Java-functies niet afhankelijk zijn van function.json voor bindingsdefinities, kunnen ze niet worden gemaakt en bewerkt in de portal. Het bewerken van de C#-portal is gebaseerd op C#-script, dat gebruikmaakt van function.json in plaats van kenmerken.
Gebruik de dataType eigenschap in het function.json-bestand voor talen die dynamisch zijn getypt, zoals JavaScript (met het v3-model) of PowerShell. Als u bijvoorbeeld de inhoud van een HTTP-aanvraag in binaire indeling wilt lezen, stelt u in dataTypebinaryop:
{
"dataType": "binary",
"type": "httpTrigger",
"name": "req",
"direction": "in"
}
Andere opties zijn dataTypestream en string.
Bindingsrichting
Alle triggers en bindingen hebben een richtingeigenschap in het function.json-bestand :
- Voor triggers is de richting altijd
in - Gebruik van invoer- en uitvoerbindingen
inenout - Sommige bindingen ondersteunen een speciale richting
inout. Als u gebruiktinout, is alleen de geavanceerde editor beschikbaar via het tabblad Integreren in de portal.
Wanneer u kenmerken in een klassebibliotheek gebruikt om triggers en bindingen te configureren, wordt de richting opgegeven in een kenmerkconstructor of afgeleid van het parametertype.
Voorbeelden van Azure Functions-triggers en -bindingen
Stel dat u een bericht naar Azure Queue Storage wilt schrijven wanneer een HTTP-aanvraag wordt ontvangen. U kunt dit implementeren met een HTTP-trigger en een opslagwachtrijuitvoerbinding. De configuratiebenadering is afhankelijk van uw taal en programmeermodel.
Hier volgt een verouderd function.json-bestand voor dit scenario (van toepassing op Node.js v3, Python v1 of PowerShell).
{
"disabled": false,
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"name": "req",
"authLevel": "function",
"methods": ["get","post"]
},
{
"type": "queue",
"direction": "out",
"name": "outqueue",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
]
}
Het eerste element in de bindings matrix is de HTTP-trigger. De type en direction eigenschappen identificeren de trigger. De name eigenschap identificeert de functieparameter die de HTTP-aanvraag ontvangt en methods vermeldt de ondersteunde HTTP-woorden.
Het tweede element in de bindings matrix is de uitvoerbinding van de opslagwachtrij. De type en direction eigenschappen identificeren de binding. De name eigenschap geeft aan hoe de functie het nieuwe wachtrijbericht levert, de queueName wachtrij identificeert en connection verwijst naar de app-instelling die de opslagverbindingsreeks bevat.
Opmerking
Het uitschakelen van een functie via de disabled eigenschap in function.json is verouderd gedrag. Gebruik liever de app-instelling AzureWebJobs.<FunctionName>.Disabled=true.
C#-voorbeeld (geïsoleerde worker)
In dit voorbeeld ziet u een door HTTP geactiveerde functie waarmee een bericht naar een opslagwachtrij wordt geschreven met behulp van een uitvoerbinding die is gedefinieerd door kenmerken. Voor meer informatie, zie de handleiding voor geïsoleerde C#-werkers.
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
public static class HttpToQueue
{
[Function("HttpToQueue")]
public static MultiResponse Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
{
var message = "Processed request";
return new MultiResponse
{
Messages = new[] { message },
HttpResponse = req.CreateResponse(System.Net.HttpStatusCode.OK)
};
}
}
public class MultiResponse
{
[QueueOutput("outqueue", Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
voorbeeld van Node.js (v4-programmeermodel)
In het v4-Node.js programmeermodel configureert u invoer en uitvoer in code met behulp van @azure/functions. Zie Node.js ontwikkelaarshandleiding (v4) voor meer informatie.
import { app, output } from "@azure/functions";
const queueOutput = output.storageQueue({
queueName: "outqueue",
connection: "AzureWebJobsStorage"
});
app.http("HttpToQueue", {
methods: ["GET", "POST"],
authLevel: "function",
extraOutputs: [queueOutput],
handler: async (request, context) => {
const body = await request.text();
context.extraOutputs.set(queueOutput, body || "Processed request");
return { status: 200, body: "Queued" };
}
});
Voorbeeld van Python (v2-programmeermodel)
In het v2 Python-programmeermodel gebruikt u decorators om bindingen te definiëren. De runtime genereert function.json voor u. Ga naar de Ontwikkelaarshandleiding voor Python voor meer informatie.
import azure.functions as func
app = func.FunctionApp()
@app.route(route="HttpToQueue", auth_level=func.AuthLevel.FUNCTION)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpToQueue(req: func.HttpRequest, msg: func.Out[str]) -> func.HttpResponse:
body = req.get_body().decode("utf-8") if req.get_body() else "Processed request"
msg.set(body)
return func.HttpResponse("Queued", status_code=200)
Opmerking
In Node.js v4 en Python v2 genereert de runtime function.json uit uw code. Vermijd het bewerken vanfunction.json rechtstreeks in de portal voor deze modellen; wijzigingen aanbrengen in code en opnieuw publiceren.