Erstellen Ihrer ersten dauerhaften Funktion in Python

Durable Functions ist eine Erweiterung von Azure Functions, mit der Sie zustandsbehaftete Funktionen in einer serverlosen Umgebung schreiben können. Die Erweiterung verwaltet Status, Prüfpunkte und Neustarts für Sie.

In diesem Artikel erfahren Sie, wie Sie die Azure Functions-Erweiterung von Visual Studio Code verwenden, um lokal eine dauerhafte Funktion namens „hello world“ zu erstellen und zu testen. Mit dieser Funktion werden Aufrufe anderer Funktionen orchestriert und miteinander verkettet. Anschließend können Sie den Funktionscode in Azure veröffentlichen.

Screenshot der laufenden langlebigen Funktion in Azure

Voraussetzungen

Für dieses Tutorial benötigen Sie Folgendes:

  • Installieren Sie Visual Studio Code.

  • Installieren Sie die Azure Functions-Erweiterung Visual Studio Code.

  • Stellen Sie sicher, dass Sie über die neueste Version der Azure Functions Core Tools verfügen.

  • Für Durable Functions ist ein Azure-Speicherkonto erforderlich. Sie benötigen ein Azure-Abonnement.

  • Vergewissern Sie sich, dass Sie die Python-Version 3.7, 3.8, 3.9 oder 3.10 installiert haben.

Sollten Sie über kein Azure-Abonnement verfügen, können Sie zunächst ein kostenloses Azure-Konto erstellen.

Erstellen Ihres lokalen Projekts

In diesem Abschnitt wird mithilfe von Visual Studio Code ein lokales Azure Functions-Projekt erstellt.

  1. Drücken Sie in Visual Studio Code F1 (oder STRG/BEFEHLSTASTE+UMSCHALT+P), um die Befehlspalette zu öffnen. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create New Project..., und wählen Sie ihn aus.

    Screenshot des Fensters „Funktion erstellen“

  2. Wählen Sie einen leeren Ordner für Ihr Projekt und anschließend Auswählen aus.

  1. Geben Sie an den Eingabeaufforderungen die folgenden Informationen an:

    Prompt Wert BESCHREIBUNG
    Auswählen einer Sprache für Ihr Funktions-App-Projekt Python Erstellen Sie ein lokales Python-Functions-Projekt.
    „Select a version“ (Wählen Sie eine Version aus.) Azure Functions v4 Diese Option wird nur angezeigt, wenn die Core Tools noch nicht installiert sind. In diesem Fall werden die Core Tools beim erstmaligen Ausführen der App installiert.
    Python-Version Python 3.7, 3.8, 3.9 oder 3.10 Visual Studio Code erstellt eine virtuelle Umgebung mit der von Ihnen ausgewählten Version.
    Auswählen einer Vorlage für die erste Funktion Ihres Projekts Vorerst überspringen
    Auswählen, wie Sie Ihr Projekt öffnen möchten Im aktuellen Fenster Öffnet Visual Studio Code wieder im ausgewählten Ordner.
  1. Geben Sie an den Eingabeaufforderungen die folgenden Informationen an:

    Prompt Wert BESCHREIBUNG
    Sprache auswählen Python (Programmiermodell V2) Erstellen Sie mithilfe des V2-Programmiermodells ein lokales Python Functions-Projekt.
    „Select a version“ (Wählen Sie eine Version aus.) Azure Functions v4 Diese Option wird nur angezeigt, wenn die Core Tools noch nicht installiert sind. In diesem Fall werden die Core Tools beim erstmaligen Ausführen der App installiert.
    Python-Version Python 3.7, 3.8, 3.9 oder 3.10 Visual Studio Code erstellt eine virtuelle Umgebung mit der von Ihnen ausgewählten Version.
    Auswählen, wie Sie Ihr Projekt öffnen möchten Im aktuellen Fenster Öffnet Visual Studio Code wieder im ausgewählten Ordner.

Von Visual Studio Code werden bei Bedarf die Azure Functions Core Tools installiert. Außerdem wird ein Funktions-App-Projekt in einem Ordner erstellt. Dieses Projekt enthält die Konfigurationsdateien host.json und local.settings.json.

Außerdem wird die Datei requirements.txt im Stammordner erstellt. Darin sind die Python-Pakete angegeben, die zum Ausführen ihrer Funktions-App erforderlich sind.

Installieren von „azure-functions-durable“ aus Pypi

Beim Erstellen des Projekts hat die Visual Studio Code-Erweiterung von Azure Functions automatisch eine virtuelle Umgebung mit der von Ihnen ausgewählten Python-Version erstellt. Anschließend müssen Sie die virtuelle Umgebung in einem Terminal aktivieren und Abhängigkeiten installieren, die von Azure Functions und Durable Functions benötigt werden.

  1. Öffnen Sie die Datei requirements.txt im Editor, und ändern Sie ihren Inhalt in den folgenden Code:

    azure-functions
    azure-functions-durable
    
  2. Öffnen Sie das integrierte Terminal des Editors im aktuellen Ordner (STRG+UMSCHALT+`).

  3. Aktivieren Sie im integrierten Terminal abhängig vom Betriebssystem die virtuelle Umgebung im aktuellen Ordner:

    source .venv/bin/activate
    
  4. Verwenden Sie in dem integrierten Terminal, in dem die virtuelle Umgebung aktiviert ist, pip, um die definierten Pakete zu installieren.

    python -m pip install -r requirements.txt
    

Erstellen Ihrer Funktionen

Eine einfache Durable Functions-App enthält drei Funktionen:

  • Orchestratorfunktion: Beschreibt einen Workflow, der andere Funktionen orchestriert.
  • Aktivitätsfunktion: Wird von der Orchestratorfunktion aufgerufen, führt die Aufgabe aus und gibt optional einen Wert zurück.
  • Clientfunktion: Eine reguläre Azure-Funktion, die eine Orchestratorfunktion startet. In diesem Beispiel wird eine per HTTP ausgelöste Funktion verwendet.

Orchestratorfunktion

Sie verwenden eine Vorlage, um den Code Ihrer dauerhaften Funktion in Ihrem Projekt zu erstellen.

  1. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create Function..., und wählen Sie ihn aus.

  2. Geben Sie an den Eingabeaufforderungen die folgenden Informationen an:

    Prompt Wert BESCHREIBUNG
    „Select a template for your function“ (Wählen Sie eine Vorlage für Ihre Funktion aus.) Orchestrator für Durable Functions Erstellen Sie eine Orchestrierung für Durable Functions.
    Angeben eines Funktionsnamens HelloOrchestrator Der Name Ihrer dauerhaften Funktion.

Sie haben einen Orchestrator für die Koordinierung von Aktivitätsfunktionen hinzugefügt. Öffnen Sie HelloOrchestrator/__init__.py, um die Orchestratorfunktion anzuzeigen. Mit jedem Aufruf von context.call_activity wird eine Aktivitätsfunktion namens Hello aufgerufen.

Fügen Sie als Nächstes die referenzierte Aktivitätsfunktion Hello hinzu.

Aktivitätsfunktion

  1. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create Function..., und wählen Sie ihn aus.

  2. Geben Sie an den Eingabeaufforderungen die folgenden Informationen an:

    Prompt Wert BESCHREIBUNG
    „Select a template for your function“ (Wählen Sie eine Vorlage für Ihre Funktion aus.) Aktivität für Durable Functions Erstellen Sie eine Aktivitätsfunktion.
    Angeben eines Funktionsnamens Hallo Der Name Ihrer Aktivitätsfunktion.

Sie haben die Aktivitätsfunktion Hello hinzugefügt, die vom Orchestrator aufgerufen wird. Öffnen Sie Hello/__init__.py, um zu sehen, dass sie einen Namen als Eingabe akzeptiert und eine Begrüßung zurückgibt. Eine Aktivitätsfunktion dient zum Ausführen von Aktionen wie Datenbankaufrufen oder Berechnungen.

Abschließend fügen Sie noch eine per HTTP ausgelöste Funktion hinzu, durch die die Orchestrierung gestartet wird.

Clientfunktion (HTTP-Starter)

  1. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create Function..., und wählen Sie ihn aus.

  2. Geben Sie an den Eingabeaufforderungen die folgenden Informationen an:

    Prompt Wert BESCHREIBUNG
    „Select a template for your function“ (Wählen Sie eine Vorlage für Ihre Funktion aus.) HTTP-Starter für Durable Functions Erstellen Sie eine HTTP-Startfunktion.
    Angeben eines Funktionsnamens DurableFunctionsHttpStart Name Ihrer Clientfunktion
    Autorisierungsstufe Anonym Lassen Sie zu Demonstrationszwecken das Aufrufen der Funktion ohne Authentifizierung zu.

Sie haben eine per HTTP ausgelöste Funktion hinzugefügt, durch die eine Orchestrierung gestartet wird. Öffnen Sie DurableFunctionsHttpStart/__init__.py, um zu sehen, dass client.start_new zum Starten einer neuen Orchestrierung verwendet wird. Anschließend wird client.create_check_status_response verwendet, um eine HTTP-Antwort mit URLs zurückzugeben, die zum Überwachen und Verwalten der neuen Orchestrierung verwendet werden können.

Sie verfügen nun über eine Durable Functions-App, die lokal ausgeführt und in Azure bereitgestellt werden kann.

Anforderungen

Version 2 des Python-Programmiermodells erfordert die folgenden Mindestversionen:

Python v2-Programmiermodell aktivieren

Die folgende Anwendungseinstellung ist erforderlich, um das v2-Programmiermodell auszuführen:

  • Name: AzureWebJobsFeatureFlags
  • Wert: EnableWorkerIndexing

Wenn die Ausführung lokal mit Azure Functions Core Tools erfolgt, sollten Sie diese Einstellung Ihrer Datei local.settings.json hinzufügen. Wenn die Ausführung in Azure erfolgt, führen Sie die folgenden Schritte mit dem Tool Ihrer Wahl aus:

Ersetzen Sie <FUNCTION_APP_NAME> und <RESOURCE_GROUP_NAME> im vorherigen Beispiel durch den Namen Ihrer Funktions-App bzw. durch den Namen der Ressourcengruppe.

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

Um eine einfache Durable Functions-App mit diesen drei Funktionstypen zu erstellen, ersetzen Sie den Inhalt von function_app.py mit dem folgenden Python-Code.

import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

# An HTTP-Triggered Function with a Durable Functions Client binding
@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def http_start(req: func.HttpRequest, client):
    function_name = req.route_params.get('functionName')
    instance_id = await client.start_new(function_name)
    response = client.create_check_status_response(req, instance_id)
    return response

# Orchestrator
@myApp.orchestration_trigger(context_name="context")
def hello_orchestrator(context):
    result1 = yield context.call_activity("hello", "Seattle")
    result2 = yield context.call_activity("hello", "Tokyo")
    result3 = yield context.call_activity("hello", "London")

    return [result1, result2, result3]

# Activity
@myApp.activity_trigger(input_name="city")
def hello(city: str):
    return f"Hello {city}"

Überprüfen Sie die Tabelle unten für eine Erläuterung der einzelnen Funktionen und ihres Zwecks im Beispiel.

Methode BESCHREIBUNG
hello_orchestrator Die Orchestratorfunktion, die den Workflow beschreibt. In diesem Fall startet die Orchestrierung, ruft drei Funktionen in einer Sequenz auf, und gibt die geordneten Ergebnisse aller drei Funktionen in einer Liste zurück.
hello Die Aktivitätsfunktion, welche die Arbeit ausführt, die orchestriert wird. Die Funktion gibt eine einfache Begrüßung an die Stadt zurück, die als Argument übergeben wird.
http_start Eine per HTTP ausgelöste Funktion, mit der eine Instanz der Orchestrierung gestartet und eine Antwort zur Überprüfung des Status zurückgegeben wird.

Hinweis

Durable Functions unterstützt auch die Blaupausen von Python V2. Um sie zu verwenden, müssen Sie Ihre Blaupausenfunktionen mithilfe der azure-functions-durableBlueprint-Klasse registrieren, wie hier gezeigt. Die resultierende Blaupause kann dann wie gewohnt registriert werden. Ein Beispiel finden Sie hier.

Lokales Testen der Funktion

Mit Azure Functions Core-Tools können Sie ein Azure Functions-Projekt auf dem lokalen Entwicklungscomputer ausführen. Wenn Sie sie nicht installiert haben, werden Sie beim ersten Starten einer Funktion in Visual Studio Code zum Installieren dieser Tools aufgefordert.

  1. Legen Sie zum Testen der Funktion einen Breakpoint im Code der Aktivitätsfunktion Hello (Hello/__init__.py) fest. Drücken Sie F5, oder wählen Sie Debug: Start Debugging über die Befehlspalette aus, um das Funktions-App-Projekt zu starten. Die Ausgabe der Core Tools wird im Bereich Terminal angezeigt.
  1. Legen Sie zum Testen der Funktion einen Breakpoint im Code der Aktivitätsfunktion hello fest. Drücken Sie F5, oder wählen Sie Debug: Start Debugging über die Befehlspalette aus, um das Funktions-App-Projekt zu starten. Die Ausgabe der Core Tools wird im Bereich Terminal angezeigt.

Hinweis

Weitere Informationen zum Debuggen finden Sie unter Diagnose in Durable Functions.

  1. Zum Ausführen von Durable Functions ist ein Azure-Speicherkonto erforderlich. Wenn Sie von Visual Studio Code zum Auswählen eines Speicherkontos aufgefordert werden, wählen Sie Speicherkonto auswählen aus.

    Screenshot: Erstellen eines Speicherkontos

  2. Geben Sie in den Eingabeaufforderungen die folgenden Informationen an, um ein neues Speicherkonto in Azure zu erstellen:

    Prompt Wert BESCHREIBUNG
    Auswählen des Abonnements Name Ihres Abonnements Auswählen des Azure-Abonnements
    Auswählen eines Speicherkontos Erstellen eines neuen Speicherkontos
    „Enter the name of the new storage account“ (Geben Sie den Namen des neuen Speicherkontos ein.) Eindeutiger Name Der Name des zu erstellenden Speicherkontos.
    Auswählen einer Ressourcengruppe Eindeutiger Name Der Name der zu erstellenden Ressourcengruppe.
    Standort auswählen Region Wählen Sie eine Region in Ihrer Nähe aus.
  3. Kopieren Sie im Bereich Terminal den URL-Endpunkt Ihrer über HTTP ausgelösten Funktion.

    Screenshot: Lokale Ausgabe von Azure

  1. Senden Sie mit Ihrem Browser oder einem Tool wie Postman oder cURL eine HTTP-Anforderung an den URL-Endpunkt. Ersetzen Sie das letzte Segment durch den Namen der Orchestratorfunktion (HelloOrchestrator). Die URL muss ähnlich sein wie http://localhost:7071/api/orchestrators/HelloOrchestrator.

    Die Antwort ist das erste Ergebnis der HTTP-Funktion, um mitzuteilen, dass die dauerhafte Orchestrierung erfolgreich gestartet wurde. Es ist noch nicht das Endergebnis der Orchestrierung. Die Antwort enthält einige nützliche URLs. Zunächst fragen wir den Status der Orchestrierung ab.

  1. Senden Sie mit Ihrem Browser oder einem Tool wie Postman oder cURL eine HTTP-Anforderung an den URL-Endpunkt. Ersetzen Sie das letzte Segment durch den Namen der Orchestratorfunktion (hello_orchestrator). Die URL muss ähnlich sein wie http://localhost:7071/api/orchestrators/hello_orchestrator.

    Die Antwort ist das erste Ergebnis der HTTP-Funktion, um mitzuteilen, dass die dauerhafte Orchestrierung erfolgreich gestartet wurde. Es ist noch nicht das Endergebnis der Orchestrierung. Die Antwort enthält einige nützliche URLs. Zunächst fragen wir den Status der Orchestrierung ab.

  1. Kopieren Sie den URL-Wert für statusQueryGetUri, fügen Sie ihn in die Adressleiste des Browsers ein, und führen Sie anschließend die Anforderung aus. Alternativ können Sie auch weiterhin Postman verwenden, um die GET-Anforderung auszuführen.

    Mit der Anforderung wird für die Orchestrierungsinstanz der Status abgefragt. Sie müssen eine Antwort erhalten, die zeigt, dass die Instanz abgeschlossen wurde, und die die Ausgaben oder Ergebnisse der dauerhaften Funktion enthält. Er sieht wie folgt aus:

{
    "name": "HelloOrchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
{
    "name": "hello_orchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
  1. Drücken Sie in Visual Studio Code UMSCHALT+F5, um das Debuggen zu beenden.

Nachdem Sie sichergestellt haben, dass die Funktion auf Ihrem lokalen Computer richtig ausgeführt wird, können Sie das Projekt in Azure veröffentlichen.

Anmelden bei Azure

Bevor Sie Azure-Ressourcen erstellen oder Ihre App veröffentlichen können, müssen Sie sich bei Azure anmelden.

  1. Sollten Sie noch nicht angemeldet sein, wählen Sie auf der Aktivitätsleiste das Azure-Symbol aus. Wählen Sie dann im Bereich Ressourcen die Option Bei Azure anmelden... aus.

    Screenshot: das Fenster für die Anmeldung bei Azure in VS Code.

    Wenn Sie bereits angemeldet sind und Ihre vorhandenen Abonnements anzeigen können, fahren Sie mit dem nächsten Abschnitt fort. Wenn Sie noch kein Azure-Konto haben, wählen Sie Azure-Konto erstellen aus. Lernende können Microsoft Azure for Students-Konto erstellen... auswählen.

  2. Wählen Sie im Browser nach entsprechender Aufforderung Ihr Azure-Konto aus, und melden Sie sich mit Ihren Azure-Anmeldeinformationen an. Wenn Sie ein neues Konto erstellen, können Sie sich anmelden, nachdem Ihr Konto erstellt wurde.

  3. Wenn Sie sich erfolgreich angemeldet haben, können Sie das neue Browserfenster schließen. Die Abonnements, die zu Ihrem Azure-Konto gehören, werden auf der Seitenleiste angezeigt.

Erstellen der Funktions-App in Azure

In diesem Abschnitt erstellen Sie eine Funktions-App und zugehörige Ressourcen in Ihrem Azure-Abonnement.

  1. Wählen Sie in der Aktivitätsleiste das Azure-Symbol aus. Wählen Sie dann im Bereich Ressourcen das +-Symbol aus, und wählen Sie die Option Funktions-App in Azure erstellen aus.

    Erstellen einer Ressource in Ihrem Azure-Abonnement

  2. Geben Sie nach entsprechender Aufforderung Folgendes ein:

    Prompt Auswahl
    Auswählen des Abonnements Wählen Sie das zu verwendende Abonnement aus. Diese Eingabeaufforderung wird nicht angezeigt, wenn nur ein Abonnement unter Ressourcen sichtbar ist.
    Eingeben eines global eindeutigen Namens für die Funktions-App Geben Sie einen Namen ein, der in einem URL-Pfad gültig ist. Der eingegebene Name wird überprüft, um sicherzustellen, dass er in Azure Functions eindeutig ist.
    Wählen Sie einen Runtimestapel aus Wählen Sie die lokal ausgeführte Sprachversion aus.
    Auswählen eines Standorts für neue Ressourcen Wählen Sie eine Region in Ihrer Nähe aus, um eine bessere Leistung zu erzielen.

    Die Erweiterung zeigt den Status einzelner Ressourcen an, während diese in Azure im Bereich Azure: Aktivitätsprotokoll erstellt werden.

    Protokoll der Azure-Ressourcenerstellung

  3. Nach Abschluss der Erstellung werden in Ihrem Abonnement die folgenden Azure-Ressourcen erstellt. Die Ressourcen werden basierend auf Ihrem Funktions-App-Namen benannt:

    • Eine Ressourcengruppe, bei der es sich um einen logischen Container für verwandte Ressourcen handelt.
    • Ein Azure Storage-Standardkonto, unter dem Status- und andere Informationen zu Ihren Projekten verwaltet werden.
    • Eine Funktions-App, die als Umgebung zum Ausführen Ihres Funktionscodes dient. Mit einer Funktions-App können Sie Funktionen zu logischen Einheiten gruppieren. Dies erleichtert die Verwaltung, Bereitstellung und Freigabe von Ressourcen im selben Hostingplan.
    • Ein App Service-Plan, der den zugrunde liegenden Host für Ihre serverlose Funktions-App definiert.
    • Eine mit der Funktions-App verbundene Application Insights-Instanz, die die Nutzung Ihrer Funktionen in der App nachverfolgt.

    Nach der Erstellung der Funktions-App wird eine Benachrichtigung angezeigt, und das Bereitstellungspaket wird angewendet.

    Tipp

    Standardmäßig werden die von Ihrer Funktions-App benötigten Azure-Ressourcen basierend auf dem von Ihnen angegebenen Namen der Funktions-App erstellt. Darüber hinaus werden sie auch in derselben neuen Ressourcengruppe mit der Funktions-App erstellt. Falls Sie entweder die Namen dieser Ressourcen anpassen oder vorhandene Ressourcen wiederverwenden möchten, müssen Sie das Projekt stattdessen mit den erweiterten Erstellungsoptionen veröffentlichen.

Bereitstellen des Projekts in Azure

Wichtig

Bei der Bereitstellung in einer vorhandenen Funktions-App wird der Inhalt dieser App in Azure immer überschrieben.

  1. Suchen Sie im Bereich Ressourcen der Azure-Aktivität die soeben erstellte Funktions-App-Ressource, klicken Sie mit der rechten Maustaste auf die Ressource, und wählen Sie Bereitstellen für Funktions-App... aus.

  2. Wenn Sie aufgefordert werden, vorherige Bereitstellungen zu überschreiben, wählen Sie Bereitstellen aus, um Ihren Funktionscode in der neuen Funktions-App-Ressource bereitzustellen.

  3. Wählen Sie nach Abschluss der Bereitstellung Ausgabe anzeigen aus, um die Erstellungs- und Bereitstellungsergebnisse (auch für die von Ihnen erstellten Azure-Ressourcen) anzuzeigen. Wenn Sie die Benachrichtigung übersehen haben, wählen Sie das Glockensymbol in der unteren rechten Ecke aus, um sie erneut anzuzeigen.

    Screenshot: das Fenster „Ausgabe anzeigen“.

Testen der Funktion in Azure

  1. Kopieren Sie die URL des HTTP-Triggers im Bereich Ausgabe. Die URL, über die Ihre per HTTP ausgelöste Funktion aufgerufen wird, muss das folgende Format aufweisen: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. Kopieren Sie die URL des HTTP-Triggers im Bereich Ausgabe. Die URL, über die Ihre per HTTP ausgelöste Funktion aufgerufen wird, muss das folgende Format aufweisen: https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
  1. Fügen Sie diese neue URL für die HTTP-Anforderung in die Adresszeile des Browsers ein. Sie müssen die gleiche Statusantwort wie zuvor erhalten, als Sie die veröffentlichte App verwendet haben.

Nächste Schritte

Sie haben Visual Studio Code verwendet, um eine dauerhafte Python-Funktions-App zu erstellen und zu veröffentlichen.