Manuelles Ausführen einer Funktion ohne HTTP-Trigger
In diesem Artikel wird gezeigt, wie Sie eine Funktion ohne HTTP-Trigger manuell über eine speziell formatierte HTTP-Anforderung ausführen.
In einigen Kontexten, z. B. während der Entwicklung und Problembehandlung, müssen Sie möglicherweise „on-demand“ eine Azure-Funktion ausführen, die indirekt ausgelöst wird. Beispiele für indirekte Trigger sind Funktionen in einem Zeitplan oder Funktionen, die als Ergebnis von Ereignissenausgeführt werden.
Das in diesem Artikel beschriebene Verfahren entspricht der Verwendung der Test/Run Funktionalität des Tabs Code + Test einer Funktion im Azure-Portal. Sie können Visual Studio Code auch verwenden, um Funktionen manuell auszuführen.
Voraussetzungen
In den Beispielen in diesem Artikel wird ein HTTP-Testtool verwendet. Stellen Sie sicher, dass Sie ein Tool auswählen, das Ihre Daten schützt. Weitere Informationen finden Sie unter HTTP-Testtools.
Festlegen des Anforderungsorts
Wenn Sie eine Funktion ohne HTTP-Trigger ausführen möchten, benötigen Sie eine Methode, mit der Sie die Ausführung der Funktion bei Azure anfordern können. Die zum Senden dieser Anforderung verwendete URL hat ein bestimmtes Format.
- Hostname: Der öffentliche Ort der Funktions-App, der sich aus dem Namen der Funktions-App und azurewebsites.net bzw. Ihrer benutzerdefinierten Domäne zusammensetzt. Wenn Sie mit Bereitstellungsslots arbeiten, die für das Staging verwendet werden, ist der Hostnamenteil der Produktionshostname, an den
-<slotname>
angefügt wurde. Im vorherigen Beispiel wäremyfunctiondemos-staging.azurewebsites.net
die URL für einen Slot namensstaging
. - Ordnerpfad: Um über eine HTTP-Anforderung auf nicht HTTP ausgelöste Funktionen zuzugreifen, müssen Sie die Anforderung über den Pfad
admin/functions
senden. Auf APIs unter dem/admin/
Pfad kann nur mit Autorisierung zugegriffen werden. - Funktionsname: Der Name der Funktion, die Sie ausführen möchten.
Die folgenden Überlegungen gelten beim Senden von Anforderungen an Administratorendpunkte in Ihrer Funktions-App:
- Wenn Sie Anforderungen an einen beliebigen Endpunkt unter dem
/admin/
Pfad stellen, müssen Sie den Hauptschlüssel Ihrer App imx-functions-key
Header der Anforderung angeben. - Wenn Sie lokal ausgeführt werden, wird die Autorisierung nicht erzwungen, und der Hauptschlüssel der Funktion ist nicht erforderlich. Sie können direkt die Funktion aufrufen und den Header
x-functions-key
weglassen. - Stellen Sie beim Zugriff auf Funktions-App-Endpunkte in einem Bereitstellungsslot sicher, dass Sie den slotspezifischen Hostnamen in der Anforderungs-URL zusammen mit dem slotspezifischen Hauptschlüssel verwenden.
Abrufen des Hauptschlüssels
Sie können den Hauptschlüssel entweder über das Azure-Portal oder über die Azure CLI abrufen.
Achtung
Aufgrund der erhöhten Berechtigungen, die der Hauptschlüssel in Ihrer Funktions-App gewährt, sollten Sie diesen Schlüssel nicht für Dritte freigeben oder in einer Anwendung verteilen. Der Schlüssel darf nur an einen HTTPS-Endpunkt gesendet werden.
Navigieren Sie im Azure-Portal zu Ihrer Funktions-App, und wählen Sie App-Schlüssel und dann den Schlüssel
_master
aus.Kopieren Sie im Abschnitt Schlüssel bearbeiten den Schlüsselwert in die Zwischenablage, und wählen Sie dann OK aus.
Aufrufen der Funktion
Navigieren Sie im Azure-Portal zu Ihrer Funktions-App, und wählen Sie Ihre Funktion aus.
Wählen Sie Code + Test und dann Protokolle aus. Hier werden Meldungen zur Funktion protokolliert, wenn Sie die Funktion manuell über Ihr HTTP-Testtool ausführen.
Verwenden Sie in Ihrem HTTP-Testtool den Anforderungsspeicherort, den Sie als Anforderungs-URL definiert haben, stellen Sie sicher, dass die HTTP-Anforderungsmethode POST ist, und schließen Sie diese beiden Anforderungsheader ein:
Schlüssel Wert x-functions-key
Der aus der Zwischenablage eingefügte Hauptschlüsselwert. Content-Type
application/json
Stellen Sie sicher, dass die POST-Anforderungsnutzlast/der Textkörper
{ "input": "<TRIGGER_INPUT>" }
ist. Der spezifische<TRIGGER_INPUT>
, den Sie bereitstellen, hängt vom Triggertyp ab, kann jedoch nur eine Zeichenfolge, ein numerischer oder boolescher Wert sein. Bei Diensten, die JSON-Payloads verwenden, wie z.B. Azure Service Bus, sollte der Test-JSON-Payload mit Escape versehen und als String serialisiert werden.Wenn Sie keine Eingabedaten an die Funktion übergeben möchten, müssen Sie weiterhin ein leeres Wörterbuch
{}
als Textkörper der POST-Anforderung angeben. Weitere Informationen finden Sie im Referenzartikel für den spezifischen Nicht-HTTP-Trigger.Versenden Sie die HTTP POST-Anforderung. Die Antwort sollte eine HTTP 202-Antwort (Akzeptiert) sein.
Kehren Sie anschließend zu Ihrer Funktion im Azure-Portal zurück. Überprüfen Sie die Protokolle. In ihnen werden Meldungen aus dem manuellen Aufruf der Funktion angezeigt.
Die Art und Weise, wie Sie auf an den Trigger gesendete Daten zugreifen, hängt vom Triggertyp und der Funktionssprache ab. Weitere Informationen finden Sie bei den Referenzbeispielen für Ihren spezifischen Trigger.