Share via


Uw eerste Durable Function maken in Python

Durable Functions is een uitbreiding van Azure Functions waarmee u stateful functies kunt schrijven in een serverloze omgeving. Met de extensie worden status, controlepunten en het opnieuw opstarten voor u beheerd.

In dit artikel leert u hoe u de Azure Functions-extensie van Visual Studio Code kunt gebruiken om lokaal een duurzame ‘Hallo wereld’-functie te maken en te testen. Met deze functie worden aanroepen naar andere functies ingedeeld en gekoppeld. Vervolgens kunt u de functiecode publiceren naar Azure.

Schermopname van de actieve duurzame functie in Azure.

Vereisten

Vereisten om deze zelfstudie te voltooien:

  • Installeer Visual Studio Code.

  • Installeer de Azure Functions Visual Studio Code-extensie.

  • Zorg ervoor dat u de nieuwste versie van de Azure Functions Core Tools hebt.

  • Voor Durable Functions is een Azure-opslagaccount vereist. U hebt een Azure-abonnement nodig.

  • Zorg ervoor dat versie 3.7, 3.8, 3.9 of 3.10 van Python is geïnstalleerd.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Uw lokale project maken

In deze sectie gebruikt u Visual Studio Code om een lokaal Azure Functions-project te maken.

  1. Druk in Visual Studio Code op F1 (of Ctrl/Cmd+Shift+P) om het opdrachtenpalet te openen. In het opdrachtenpalet zoekt en selecteert u Azure Functions: Create New Project....

    Schermopname van het venster Functie maken.

  2. Kies een lege map voor uw project en kies Selecteren.

  1. Volg de aanwijzingen en geef de volgende informatie op:

    Prompt Weergegeven als Beschrijving
    Selecteer een taal voor uw functie-appproject Python Maak een lokaal Python Functions-project.
    Een versie selecteren Azure Functions v4 U ziet deze optie alleen wanneer de Core Tools niet al zijn geïnstalleerd. In dit geval worden de Core Tools geïnstalleerd wanneer u de app voor het eerst uitvoert.
    Python-versie Python 3.7, 3.8, 3.9 of 3.10 Visual Studio Code maakt een virtuele omgeving met de versie die u selecteert.
    Selecteer een sjabloon voor de eerste functie van uw project Nu overslaan
    Selecteer hoe u uw project wilt openen In het huidige venster openen Visual Studio Code wordt opnieuw geopend in de map die u hebt geselecteerd.
  1. Volg de aanwijzingen en geef de volgende informatie op:

    Prompt Weergegeven als Beschrijving
    Een taal selecteren Python (Programmeermodel V2) Maak een lokaal Python Functions-project met behulp van het V2-programmeermodel.
    Een versie selecteren Azure Functions v4 U ziet deze optie alleen wanneer de Core Tools niet al zijn geïnstalleerd. In dit geval worden de Core Tools geïnstalleerd wanneer u de app voor het eerst uitvoert.
    Python-versie Python 3.7, 3.8, 3.9 of 3.10 Visual Studio Code maakt een virtuele omgeving met de versie die u selecteert.
    Selecteer hoe u uw project wilt openen In het huidige venster openen Visual Studio Code wordt opnieuw geopend in de map die u hebt geselecteerd.

Visual Studio Code installeert indien nodig de Azure Functions Core Tools. Er wordt ook een functie-app-project gemaakt in een map. Dit project bevat de configuratiebestanden host.json en local.settings.json.

Er wordt ook een requirements.txt-bestand gemaakt in de hoofdmap. Hiermee geeft u de Python-pakketten op die nodig zijn om uw functie-app uit te voeren.

Azure-functions-durable installeren vanaf PyPI

Wanneer u het project hebt gemaakt, maakt de Azure Functions Visual Studio Code-extensie automatisch een virtuele omgeving met de geselecteerde Python-versie. Vervolgens moet u de virtuele omgeving in een terminal activeren en enkele afhankelijkheden installeren die vereist zijn voor Azure Functions en Durable Functions.

  1. Open de requirements.txt in de editor en wijzig de inhoud ervan in de volgende code:

    azure-functions
    azure-functions-durable
    
  2. Open de geïntegreerde terminal van de editor in de huidige map (Ctrl+Shift+`).

  3. Activeer in de geïntegreerde terminal de virtuele omgeving in de huidige map, afhankelijk van uw besturingssysteem:

    source .venv/bin/activate
    
  4. Gebruik pip in de geïntegreerde terminal waar de virtuele omgeving wordt geactiveerd om de pakketten te installeren die u hebt gedefinieerd.

    python -m pip install -r requirements.txt
    

Uw functies maken

Een eenvoudige Durable Functions-app bevat drie functies:

  • Orchestrator-functie: Beschrijft een werkstroom die andere functies organiseert.
  • Activiteitsfunctie: deze wordt aangeroepen door de orchestratorfunctie, voert werk uit en retourneert desgewenst een waarde.
  • Clientfunctie: Het is een gewone Azure-functie waarmee een orchestratorfunctie wordt gestart. In dit voorbeeld wordt een door HTTP geactiveerde functie gebruikt.

Orchestrator-functie

U gebruikt een sjabloon om de code van de Durable Function te maken in uw project.

  1. In het opdrachtenpalet zoekt en selecteert u Azure Functions: Create Function....

  2. Volg de aanwijzingen en geef de volgende informatie op:

    Prompt Weergegeven als Beschrijving
    Selecteer een sjabloon voor uw functie Durable Functions-orchestrator Een Durable Functions-indeling maken
    Geef een functienaam op HelloOrchestrator Naam van uw Durable Function

U hebt een orchestrator toegevoegd om de activiteitsfuncties te coördineren. Open HelloOrchestrator/__init__.py om de orchestratorfunctie te zien. Elke aanroep van context.call_activity roept een activiteitfunctie aan met de naam Hello.

Vervolgens voegt u de Hello-activiteitsfunctie toe waarnaar wordt verwezen.

Activiteitsfunctie

  1. In het opdrachtenpalet zoekt en selecteert u Azure Functions: Create Function....

  2. Volg de aanwijzingen en geef de volgende informatie op:

    Prompt Weergegeven als Beschrijving
    Selecteer een sjabloon voor uw functie Durable Functions-activiteit Een ectiviteitsfunctie maken
    Geef een functienaam op Hello (Hallo) Naam van uw activiteitsfunctie

U hebt de Hello-activiteitsfunctie toegevoegd die wordt aangeroepen door de orchestrator. Open Hello/__init__.py om te zien dat er een naam als invoer wordt gebruikt en een begroeting wordt geretourneerd. Met een activiteitsfunctie kunt u acties uitvoeren, zoals het maken van een databaseaanroep of het uitvoeren van een berekening.

Ten slotte voegt u een door HTTP geactiveerde functie toe waarmee de indeling wordt gestart.

Clientfunctie (HTTP-starter)

  1. In het opdrachtenpalet zoekt en selecteert u Azure Functions: Create Function....

  2. Volg de aanwijzingen en geef de volgende informatie op:

    Prompt Weergegeven als Beschrijving
    Selecteer een sjabloon voor uw functie HTTP-starter Durable Functions Een HTTP-starterfunctie maken
    Geef een functienaam op DurableFunctionsHttpStart Naam van uw clientfunctie
    Autorisatieniveau Anoniem Sta omwille van de demo toe dat de functie wordt aangeroepen zonder verificatie

U hebt een door HTTP geactiveerde functie toegevoegd waarmee een indeling wordt gestart. Open DurableFunctionsHttpStart/__init__.py om te zien dat deze wordt gebruikt client.start_new om een nieuwe indeling te starten. Vervolgens wordt client.create_check_status_response gebruikt om een HTTP-antwoord te retourneren met URL's die kunnen worden gebruikt om de nieuwe indeling te controleren en beheren.

U hebt nu een Durable Functions-app die lokaal kan worden uitgevoerd en in Azure kan worden geïmplementeerd.

Vereisten

Voor versie 2 van het Python-programmeermodel zijn de volgende minimale versies vereist:

V2-programmeermodel inschakelen

De volgende toepassingsinstelling is vereist om het v2-programmeermodel uit te voeren:

  • Naam: AzureWebJobsFeatureFlags
  • Waarde: EnableWorkerIndexing

Als u lokaal werkt met Behulp van Azure Functions Core Tools, moet u deze instelling toevoegen aan uw local.settings.json bestand. Als u in Azure werkt, volgt u deze stappen met het hulpprogramma van uw keuze:

Vervang en <RESOURCE_GROUP_NAME> door <FUNCTION_APP_NAME> respectievelijk de naam van uw functie-app en resourcegroep.

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

Als u een eenvoudige Durable Functions-app wilt maken met behulp van deze drie functietypen, vervangt u de inhoud door function_app.py de volgende 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}"

Bekijk de onderstaande tabel voor een uitleg van elke functie en het doel ervan in het voorbeeld.

Wijze Description
hello_orchestrator De orchestratorfunctie, die de werkstroom beschrijft. In dit geval wordt de indeling gestart, worden drie functies in een reeks aangeroepen en worden de geordende resultaten van alle drie functies in een lijst geretourneerd.
hello De activiteitsfunctie, waarmee het werk wordt ingedeeld, wordt uitgevoerd. De functie retourneert een eenvoudige begroeting voor de plaats die als argument is doorgegeven.
http_start Een door HTTP geactiveerde functie die een exemplaar van de indeling start en een reactie voor de controlestatus retourneert.

Notitie

Durable Functions ondersteunt ook blauwdrukken van Python V2. Als u deze wilt gebruiken, moet u uw blauwdrukfuncties registreren met behulp van de azure-functions-durableBlueprint klasse, zoals hier wordt weergegeven. De resulterende blauwdruk kan vervolgens als normaal worden geregistreerd. Bekijk ons voorbeeld voor een voorbeeld.

De functie lokaal testen

Met Azure Functions Core-hulpprogramma's kunt u een Azure Functions-project uitvoeren op uw lokale ontwikkelcomputer. Als ze nog niet geïnstalleerd zijn, wordt u gevraagd deze hulpprogramma's te installeren wanneer u voor de eerste keer een functie vanuit Visual Studio Code start.

  1. Als u uw functie wilt testen, stelt u een onderbrekingspunt in de code van de Hello activiteitsfunctie in (Hallo/__init__.py). Druk op F5 of selecteer Debug: Start Debugging in het opdrachtpalet om het functie-app-project te starten. De uitvoer van Core Tools wordt weergegeven in het deelvenster Terminal.
  1. Als u uw functie wilt testen, stelt u een onderbrekingspunt in de code van de hello activiteitsfunctie in. Druk op F5 of selecteer Debug: Start Debugging in het opdrachtpalet om het functie-app-project te starten. De uitvoer van Core Tools wordt weergegeven in het deelvenster Terminal.

Notitie

Zie Durable Functions Diagnostics voor meer informatie over foutopsporing.

  1. Voor Durable Functions moet een Azure-opslagaccount worden uitgevoerd. Wanneer u in Visual Studio Code wordt gevraagd om een opslagaccount te selecteren, selecteert u Opslagaccount selecteren.

    Schermopname van het maken van een opslagaccount.

  2. Volg de aanwijzingen en geef de volgende informatie op om een nieuw opslagaccount te maken in Azure:

    Prompt Weergegeven als Beschrijving
    Abonnement selecteren naam van uw abonnement Selecteer uw Azure-abonnement
    Selecteer een opslagaccount Een nieuw opslagaccount maken
    Voer de naam van het nieuwe opslagaccount in unieke naam Naam van het opslagaccount dat moet worden gemaakt
    Een resourcegroep selecteren unieke naam Naam van de resourcegroep die moet worden gemaakt
    Een locatie selecteren regio Kies een regio bij u in de buurt
  3. Kopieer het URL-eindpunt van de door HTTP getriggerde functie in het deelvenster Terminal.

    Schermopname van lokale Azure-uitvoer.

  1. Gebruik uw browser of een hulpprogramma zoals Postman of cURL om een HTTP-aanvraag naar het URL-eindpunt te verzenden. Vervang het laatste segment door de naam van de Orchestrator-functie (HelloOrchestrator). De URL moet vergelijkbaar zijn met http://localhost:7071/api/orchestrators/HelloOrchestrator.

    De reactie is het eerste resultaat van de HTTP-functie dat u laat weten dat de duurzame indeling is gestart. Het is nog niet het eindresultaat van de indeling. De reactie bevat enkele nuttige URL's. Maar eerst gaan we de status van de orchestrator opvragen.

  1. Gebruik uw browser of een hulpprogramma zoals Postman of cURL om een HTTP-aanvraag naar het URL-eindpunt te verzenden. Vervang het laatste segment door de naam van de Orchestrator-functie (hello_orchestrator). De URL moet vergelijkbaar zijn met http://localhost:7071/api/orchestrators/hello_orchestrator.

    De reactie is het eerste resultaat van de HTTP-functie dat u laat weten dat de duurzame indeling is gestart. Het is nog niet het eindresultaat van de indeling. De reactie bevat enkele nuttige URL's. Maar eerst gaan we de status van de orchestrator opvragen.

  1. Kopieer de URL-waarde voor statusQueryGetUri, plak deze in de adresbalk van de browser en voer de aanvraag uit. U kunt ook Postman blijven gebruiken om de GET-aanvraag uit te geven.

    De aanvraag voert een query uit op het orchestrator-exemplaar voor de status. U moet een uiteindelijke reactie krijgen, waarin wordt weergegeven dat het exemplaar is voltooid en de uitvoer of resultaten van de duurzame functie bevat. Deze ziet er als volgt uit:

{
    "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. Als u de foutopsporing wilt stoppen, drukt u op Shift+F5 in Visual Studio Code.

Nadat u hebt gecontroleerd of de functie correct wordt uitgevoerd op uw lokale computer, is het tijd om het project te publiceren in Azure.

Aanmelden bij Azure

Voordat u Azure-resources kunt maken of uw app kunt publiceren, moet u zich aanmelden bij Azure.

  1. Als u nog niet bent aangemeld, kiest u het Azure-pictogram op de activiteitenbalk. Kies vervolgens in het gebied Resources aanmelden bij Azure....

    Schermopname van het aanmeldingsvenster bij Azure in VS Code.

    Als u al bent aangemeld en uw bestaande abonnementen kunt zien, gaat u naar de volgende sectie. Als u nog geen Azure-account hebt, kiest u Een Azure-account maken.... Leerlingen/studenten kunnen een Azure for Students-account maken kiezen ....

  2. Wanneer u hierom wordt gevraagd in de browser, kiest u uw Azure-account en meld u zich aan met uw Azure-accountreferenties. Als u een nieuw account maakt, kunt u zich aanmelden nadat uw account is gemaakt.

  3. Nadat u bent aangemeld, kunt u het nieuwe browservenster sluiten. De abonnementen die deel uitmaken van uw Azure-account, worden weergegeven in de zijbalk.

De functie-app maken in Azure

In deze sectie maakt u een functie-app en gerelateerde resources in uw Azure-abonnement.

  1. Kies het Azure-pictogram in de activiteitenbalk. Selecteer vervolgens in het gebied Resources het + pictogram en kies de optie Functie-app maken in Azure .

    Een resource maken in uw Azure-abonnement

  2. Geef de volgende informatie op bij de prompts:

    Prompt Selectie
    Abonnement selecteren Kies het abonnement dat u wilt gebruiken. U ziet deze prompt niet wanneer er slechts één abonnement zichtbaar is onder Resources.
    Voer een wereldwijd unieke naam in voor de functie-app Typ een naam die geldig is in een URL-pad. De naam die u typt, wordt gevalideerd om er zeker van te zijn dat deze uniek is in Azure Functions.
    Een runtimestack selecteren Kies de taalversie waarop u lokaal hebt uitgevoerd.
    Selecteer een locatie voor nieuwe resources Kies voor betere prestaties een regio bij u in de buurt.

    In de extensie ziet u de status van afzonderlijke resources wanneer ze worden gemaakt in Azure in het deelvenster Activiteitenlogboek .

    Logboek van het maken van Azure-resources

  3. Wanneer het maken is voltooid, worden de volgende Azure-resources in uw abonnement gemaakt. De resources hebben een naam op basis van de naam van uw functie-app:

    • Een resourcegroep, een logische container voor gerelateerde resources.
    • Een standaard Azure Storage-account dat de status en andere informatie over uw projecten onderhoudt.
    • Een functie-app, die de omgeving biedt voor het uitvoeren van uw functiecode. Met een functie-app kunt u functies groeperen in een logische eenheid, zodat u resources eenvoudiger kunt beheren, implementeren en delen binnen hetzelfde hostingabonnement.
    • Een App Service-plan, waarmee de onderliggende host voor uw functie-app wordt gedefinieerd.
    • Een Application Insights-exemplaar dat is verbonden met de functie-app, waarmee het gebruik van uw functies in de app wordt bijgehouden.

    Nadat de functie-app is gemaakt en het implementatiepakket is toegepast, wordt er een melding weergegeven.

    Tip

    Standaard worden de Azure-resources die door uw functie-app zijn vereist, gemaakt op basis van de naam van de functie-app die u opgeeft. Ze worden standaard ook gemaakt in dezelfde nieuwe resourcegroep met de functie-app. Als u de namen van deze resources wilt aanpassen of bestaande resources opnieuw wilt gebruiken, moet u het project publiceren met geavanceerde opties voor maken.

Het project implementeren in Azure

Belangrijk

Als u implementeert in een bestaande functie-app, wordt de inhoud van die app altijd overschreven in Azure.

  1. Zoek in het gebied Resources van de Azure-activiteit de functie-app-resource die u zojuist hebt gemaakt, klik met de rechtermuisknop op de resource en selecteer Implementeren in functie-app....

  2. Wanneer u wordt gevraagd om eerdere implementaties te overschrijven, selecteert u Implementeren om uw functiecode te implementeren in de nieuwe functie-app-resource.

  3. Nadat de implementatie is voltooid, selecteert u Uitvoer weergeven om de resultaten van het maken en implementeren weer te geven, inclusief de Azure-resources die u hebt gemaakt. Als u de melding mist, selecteert u het belpictogram in de rechterbenedenhoek om deze opnieuw weer te geven.

    Schermopname van het venster Uitvoer weergeven.

Uw functie testen in Azure

  1. Kopieer de URL van de HTTP-trigger vanuit het deelvenster Output (Uitvoer). De URL die uw door HTTP geactiveerde functie aanroept, moet deze indeling hebben: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. Kopieer de URL van de HTTP-trigger vanuit het deelvenster Output (Uitvoer). De URL die uw door HTTP geactiveerde functie aanroept, moet deze indeling hebben: https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
  1. Plak deze nieuwe URL voor de HTTP-aanvraag in de adresbalk van uw browser. U moet hetzelfde statusantwoord krijgen als voorheen wanneer u de gepubliceerde app gebruikt.

Volgende stappen

U hebt Visual Studio Code gebruikt om een duurzame Python-functie-app te maken en te publiceren.