Dieser Artikel zielt darauf ab, Azure-Funktionen mithilfe von Warteschlangenspeicherbindungen zwischen Azure-Funktionen zu verketten.
Der Umriss ist wie folgt:
In der Abbildung sieht es so aus.
Erstellen Sie eine Warteschlange mit dem Namen "piyo" im Warteschlangenspeicher über die Schaltfläche "+ Warteschlange".
Erstellen Sie Azure-Funktionen für den HTTP-Trigger aus VSCode und ändern Sie den automatisch generierten Code. Fügen Sie die unteren 5 Elemente hinzu, "Typ", "Richtung", "Name", "Warteschlangenname", "Verbindung". (Wenn es sich um VSCode handelt, können Sie es auch mit Add Binding hinzufügen.)
function.json
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "queue",
"direction": "out",
"name": "fuga1",
"queueName": "piyo",
"connection": "AzureWebJobsStorage"
}
]
}
Die zusätzlichen Punkte werden im Folgenden kurz erläutert. Eine Einstellung, die leicht passt, ist "Name".
Dieser Name
ist der Argumentname, der im Python-Programm empfangen wird.
(Zuerst habe ich das nicht verstanden und die Ausgabe des Funktionsausführungsprotokolls war langsam, daher dauerte es einige Zeit, um die Fehlerursache zu identifizieren ...)
Artikelname | Konstante | Parameter | Erläuterung |
---|---|---|---|
type | 〇 | queue | Art der Bindung |
direction | 〇 | out | Bindungsrichtung. Out für die Ausgabe |
name | fuga1 | Beim Empfang mit Python-AusführungsfunktionArgumentname | |
queueName | piyo | Der Name der Warteschlange, die in den obigen Schritten erstellt wurde | |
connection | 〇 | AzureWebJobsStorage | Diesmal ist es eine Konstante, da es sich um dasselbe Speicherkonto handelt. Geben Sie normalerweise eine Verbindungszeichenfolge usw. ein? |
Als nächstes folgt der Python-Code.
Setzen Sie nun fuga1
in das Argument der Hauptfunktion. Geben Sie den gleichen Namen wie "function.json" an.
** Achtung Wenn Sie ein Symbol wie "_" in "name" einfügen, funktioniert dies nicht. ** ** **
__init__.py
import logging
import azure.functions as func
def main(req: func.HttpRequest, fuga1: func.Out[str]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
#Parameter abrufen
name = req.params.get('name')
#In die Warteschlange stellen
fuga1.set(name)
#Rückgabewert (Bei der automatischen Generierung ist er etwas länger, wird jedoch weggelassen, da er hier nicht relevant ist.)
return func.HttpResponse("\n".join(return_list))
Wie in (2) wird die Queue Trigger-Funktion dieses Mal automatisch aus VSCode generiert.
Diesmal nur die Eingabebindung.
Geben Sie für "queueName" "piyo" von "Queue Storage" an.
name
ist fuga2
. Dieser "Name" kann für jede "Azure-Funktion" eindeutig bestimmt werden.
function.json
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "fuga2",
"type": "queueTrigger",
"direction": "in",
"queueName": "piyo",
"connection": "AzureWebJobsStorage"
}
]
}
Als nächstes folgt der Python-Code.
Nur das Argument der Hauptfunktion wird in den in function.json
angegebenen Variablennamen fuga2
geändert.
__init__.py
import logging
import azure.functions as func
def main(fuga2: func.QueueMessage) -> None:
logging.info('Python queue trigger function processed a queue item: %s',
fuga2.get_body().decode('utf-8'))
Wenn Sie es von der lokalen Locke aus treffen, können Sie dem Protokoll entnehmen, dass es funktioniert.
Zunächst werden die Azure-Funktionen von ② durch eine HTTP-Anforderung gestartet.
③ Azure-Funktionen werden mit der Warteschlange als Auslöser gestartet.
Sie können sehen, dass Azure-Funktionen 2 Sekunden nach der Nachricht in der Warteschlange ausgeführt werden. (Schließen Sie Ihre Augen auf den Funktionsnamen ...)
Ich habe festgestellt, dass es mit dem Warteschlangentrigger von Azure-Funktionen verkettet werden kann. Wenn Sie einen Dienst erstellen, der tatsächlich funktioniert, können Azure-Funktionen anscheinend gut verkettet werden, indem der Name der Warteschlange gut generiert und mehrere Out-Bindungen verwendet werden.
Recommended Posts