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.
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.
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...
.Kies een lege map voor uw project en kies Selecteren.
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.
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.
Open de requirements.txt in de editor en wijzig de inhoud ervan in de volgende code:
azure-functions azure-functions-durable
Open de geïntegreerde terminal van de editor in de huidige map (Ctrl+Shift+`).
Activeer in de geïntegreerde terminal de virtuele omgeving in de huidige map, afhankelijk van uw besturingssysteem:
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.
In het opdrachtenpalet zoekt en selecteert u
Azure Functions: Create Function...
.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
In het opdrachtenpalet zoekt en selecteert u
Azure Functions: Create Function...
.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)
In het opdrachtenpalet zoekt en selecteert u
Azure Functions: Create Function...
.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:
- Azure Functions Runtime v4.16+
- Azure Functions Core Tools v4.0.5095+ (indien lokaal uitgevoerd)
- azure-functions-durable v1.2.4+
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-durable
Blueprint
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.
- 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 selecteerDebug: Start Debugging
in het opdrachtpalet om het functie-app-project te starten. De uitvoer van Core Tools wordt weergegeven in het deelvenster Terminal.
- Als u uw functie wilt testen, stelt u een onderbrekingspunt in de code van de
hello
activiteitsfunctie in. Druk op F5 of selecteerDebug: 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.
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.
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 Kopieer het URL-eindpunt van de door HTTP getriggerde functie in het deelvenster Terminal.
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 methttp://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.
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 methttp://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.
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"
}
- 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.
Als u nog niet bent aangemeld, kiest u het Azure-pictogram op de activiteitenbalk. Kies vervolgens in het gebied Resources aanmelden bij Azure....
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 ....
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.
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.
Kies het Azure-pictogram in de activiteitenbalk. Selecteer vervolgens in het gebied Resources het + pictogram en kies de optie Functie-app maken in Azure .
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 .
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.
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....
Wanneer u wordt gevraagd om eerdere implementaties te overschrijven, selecteert u Implementeren om uw functiecode te implementeren in de nieuwe functie-app-resource.
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.
Uw functie testen in Azure
- 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
- 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
- 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.