Erstellen von Triggern und Bindungen
Ein Trigger definiert, wie eine Funktion aufgerufen wird, und eine Funktion muss genau einen Trigger aufweisen. Trigger weisen zugeordnete Daten auf, die oftmals als Nutzlast der Funktion übergeben werden.
Die Bindung an eine Funktion ist eine Möglichkeit, eine andere Ressource deklarativ mit der Funktion zu verbinden; Bindungen können als Eingabebindungen, Ausgabebindungen oder beides verbunden sein. Daten von Bindungen werden der Funktion als Parameter bereitgestellt.
Je nach Anforderung können verschiedene Bindungen nach Belieben kombiniert werden. Bindungen sind optional, und eine Funktion kann mehrere Eingabe- und/oder Ausgabebindungen haben.
Mit Triggern und Bindungen können Sie den hartcodieren Zugriff auf andere Dienste vermeiden. Ihre Funktion empfängt Daten (z.B. den Inhalt einer Warteschlangennachricht) in Funktionsparametern. Sie senden Daten (z.B., um eine Warteschlangennachricht zu erstellen), indem Sie den Rückgabewert der Funktion verwenden.
Wenn Sie Ihre Funktionen lokal entwickeln, müssen Sie das Trigger- und Bindungsverhalten berücksichtigen. Für HTTP-Trigger können Sie http://localhost/ verwenden, um den HTTP-Endpunkt lokal aufzurufen. Für nicht HTTP ausgelöste Funktionen gibt es mehrere Optionen, die lokal ausgeführt werden können:
- Die einfachste Möglichkeit zum Testen von Bindungen während der lokalen Entwicklung besteht darin, Verbindungszeichenfolgen zu verwenden, die auf Azure-Livedienste abzielen. Sie können Livedienste als Ziel verwenden, indem Sie die entsprechenden Verbindungszeichenfolgeneinstellungen im
Values-Array in der Datei „local.settings.json“ hinzufügen. Wenn Sie dies tun, verwenden lokale Ausführungen während des Tests Live-Dienstdaten. Erwägen Sie daher das Einrichten separater Dienste, die während der Entwicklung und für Tests verwendet werden sollen, und steigen Sie dann während der Produktion auf andere Dienste um. - Bei speicherbasierten Triggern können Sie den lokalen Azurite-Emulator verwenden, wenn Sie Funktionen mit Azure Storage-Bindungen (Warteschlangenspeicher, Blob Storage und Tabellenspeicher) testen, ohne eine Verbindung mit Remotespeicherdiensten herstellen zu müssen.
- Sie können Nicht-HTTP-Triggerfunktionen manuell ausführen, indem Sie spezielle Administratorendpunkte verwenden. Weitere Informationen finden Sie unter Manuelles Ausführen einer nicht HTTP ausgelösten Funktion.
Definitionen für Trigger und Bindungen
Trigger und Bindungen werden je nach Entwicklungssprache und Laufzeitmodell unterschiedlich definiert.
| Sprache | Konfigurieren Sie Trigger und Bindungen durch... |
|---|---|
| C#-Klassenbibliothek | Dekorieren von Methoden und Parametern mit C#-Attributen (In-Process- oder isolierter Worker) |
| Java | Versehen von Methoden und Parametern mit Java-Anmerkungen |
| JavaScript/TypeScript | v4-Programmiermodell: Definieren von Eingaben/Ausgaben im Code mithilfe von @azure/functions; v3: Konfigurieren in einer funktionsspezifischenfunction.json |
| Python | v2-Programmiermodell: Definieren von Eingaben/Ausgaben mit Dekoratoren; v1: Konfigurieren in function.json |
| PowerShell | konfigurieren in function.json |
Hinweis
In modernen Modellen (Node.js v4 und Python v2) erstellen Sie Trigger- und Bindungskonfiguration im Code und die Laufzeit generiert die entsprechende function.json. Ältere Modelle (Node.js v3, Python v1, PowerShell) verwenden function.json direkt. Programmiermodelle können nicht innerhalb derselben Funktions-App kombiniert werden.
Für Sprachen, die auf function.json basieren (z. B. Node.js v3, Python v1 und PowerShell), stellt das Portal eine Benutzeroberfläche zum Hinzufügen von Bindungen auf der Registerkarte "Integration " bereit. Sie können die Datei auch direkt im Portal auf der Registerkarte "Code + Test " Ihrer Funktion bearbeiten. Konfigurieren Sie für Code first-Modelle wie Node.js v4 und Python v2 Bindungen im Code in Ihrem lokalen Projekt; Das Portal spiegelt die Konfiguration wider, unterstützt aber möglicherweise keine direkten Bearbeitungen.
In .NET und Java definiert der Parametertyp den Datentyp für Eingabedaten. Verwenden Sie z. B. string, um eine Bindung mit dem Text eines Warteschlangentriggers zu erstellen – einem Bytearray zum Lesen im Binärformat und einem benutzerdefinierten Typ zum Deserialisieren in einem Objekt. Da .NET-Klassenbibliotheksfunktionen und Java-Funktionen nicht auf function.json für Bindungsdefinitionen angewiesen sind, können sie nicht im Portal erstellt und bearbeitet werden. Die C#-Portalbearbeitung basiert auf dem C#-Skript, das anstelle von Attributenfunction.json verwendet.
Verwenden Sie für Sprachen, die dynamisch eingegeben werden, z. B. JavaScript (mit dem v3-Modell) oder PowerShell, die dataType Eigenschaft in der function.json-Datei . Um z.B. den Inhalt einer HTTP-Anforderung im Binärformat zu lesen, legen Sie dataType auf binary fest:
{
"dataType": "binary",
"type": "httpTrigger",
"name": "req",
"direction": "in"
}
Andere Optionen für dataType sind stream und string.
Bindungsrichtung
Alle Trigger und Bindungen weisen eine Richtungseigenschaft in der function.json Datei auf:
- Für Trigger ist die Richtung immer gleich
in. - Für Eingabe- und Ausgabebindungen werden
inundoutverwendet. - Einige Bindungen unterstützen die spezielle Richtung
inout. Wenn Sie verwendeninout, ist nur der erweiterte Editor über die Registerkarte " Integrieren " im Portal verfügbar.
Wenn Sie zum Konfigurieren von Triggern und Bindungen Attribute in einer Klassenbibliothek verwenden, wird die Richtung in einem Attributkonstruktor angegeben oder aus dem Parametertyp abgeleitet.
Beispiele für Auslösen und Binden von Azure-Funktionen
Angenommen, Sie möchten eine Nachricht in den Azure Queue-Speicher schreiben, wenn eine HTTP-Anforderung empfangen wird. Sie können dies mit einem HTTP-Trigger und einer Ausgabebindung für die Speicherwarteschlange implementieren. Der Konfigurationsansatz hängt von Ihrer Sprache und Ihrem Programmiermodell ab.
Hier ist eine ältere function.json Datei für dieses Szenario (gilt für Node.js v3, Python v1 oder 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"
}
]
}
Das erste Element im bindings Array ist der HTTP-Trigger. Die Eigenschaften type und direction identifizieren den Trigger. Die name Eigenschaft identifiziert den Funktionsparameter, der die HTTP-Anforderung empfängt, und methods listet die unterstützten HTTP-Verben auf.
Das zweite Element im Array bindings ist die Azure Table Storage-Ausgabebindung. Die Eigenschaften type und direction identifizieren die Bindung. Die name Eigenschaft gibt an, wie die Funktion die neue Warteschlangennachricht bereitstellt, die queueName Warteschlange identifiziert und connection auf die App-Einstellung verweist, die die Speicherverbindungszeichenfolge enthält.
Hinweis
Das Deaktivieren einer Funktion über die disabled Eigenschaft in function.json ist das Legacyverhalten. Verwenden Sie lieber die App-Einstellung AzureWebJobs.<FunctionName>.Disabled=true.
C#-Beispiel (isolierter Worker)
Dieses Beispiel zeigt eine HTTP-ausgelöste Funktion, die eine Nachricht mithilfe einer durch Attribute definierten Ausgabebindung in eine Speicherwarteschlange schreibt. Weitere Informationen finden Sie im Handbuch für isolierte C#-Mitarbeiter.
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; }
}
Node.js (v4-Programmiermodell) (Beispiel)
Im v4 Node.js Programmiermodell konfigurieren Sie Eingaben und Ausgaben im Code mithilfe von @azure/functions. Weitere Informationen finden Sie im Node.js Entwicklerhandbuch (v4).
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" };
}
});
Python (v2-Programmiermodell) (Beispiel)
Im v2 Python-Programmiermodell verwenden Sie Dekorateure, um Bindungen zu definieren. Die Laufzeit generiert function.json für Sie. Weitere Informationen finden Sie im Python-Entwicklerhandbuch .
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)
Hinweis
In Node.js v4 und Python v2 generiert die Laufzeit function.json aus Ihrem Code. Vermeiden Sie die Bearbeitung von function.json direkt im Portal für diese Modelle. Nehmen Sie stattdessen Änderungen am Code vor und veröffentlichen Sie neu.