Dela via


Skapa din första hållbara funktion i Python

Durable Functions är ett tillägg till Azure Functions som gör att du kan skriva tillståndskänsliga funktioner i en serverlös miljö. Tillägget hanterar tillstånd, kontrollpunkter och omstarter.

I den här artikeln får du lära dig hur du använder Azure Functions-tillägget för Visual Studio Code för att skapa och testa en beständig ”Hello World”-funktion lokalt. Den här funktionen samordnar och kedjar samman anrop till andra funktioner. Du kan sedan publicera funktionskoden till Azure.

Skärmbild av den varaktiga funktionen som körs i Azure.

Förutsättningar

För att slutföra den här kursen behöver du:

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Skapa ditt lokala projekt

I det här avsnittet använder du Visual Studio Code för att skapa ett lokalt Azure Functions-projekt.

  1. I Visual Studio Code trycker du på F1 (eller Ctrl/Cmd+Skift+P) för att öppna kommandopaletten. I kommandopaletten söker du efter och väljer Azure Functions: Create New Project....

    Skärmbild av fönstret Skapa funktion.

  2. Välj en tom mappplats för projektet och välj Välj.

  1. Följ anvisningarna och ange följande information:

    Prompt Värde beskrivning
    Välj ett språk för funktionsappprojektet Python Skapa ett lokalt Python Functions-projekt.
    Välj en version Azure Functions v4 Du ser bara det här alternativet när Core Tools inte redan är installerat. I det här fallet installeras Core Tools första gången du kör appen.
    Python-version Python 3.7, 3.8, 3.9 eller 3.10 Visual Studio Code skapar en virtuell miljö med den version du väljer.
    Välj en mall för projektets första funktion Hoppa över så länge
    Välj hur du vill öppna projektet Öppna i aktuellt fönster Öppnar Visual Studio Code igen i den mapp som du har valt.
  1. Följ anvisningarna och ange följande information:

    Prompt Värde beskrivning
    Välj ett språk Python (programmeringsmodell V2) Skapa ett lokalt Python Functions-projekt med hjälp av V2-programmeringsmodellen.
    Välj en version Azure Functions v4 Du ser bara det här alternativet när Core Tools inte redan är installerat. I det här fallet installeras Core Tools första gången du kör appen.
    Python-version Python 3.7, 3.8, 3.9 eller 3.10 Visual Studio Code skapar en virtuell miljö med den version du väljer.
    Välj hur du vill öppna projektet Öppna i aktuellt fönster Öppnar Visual Studio Code igen i den mapp som du har valt.

Visual Studio Code installerar Azure Functions Core Tools om det behövs. Det skapar också ett funktionsappprojekt i en mapp. Det här projektet innehåller konfigurationsfilerna host.json och local.settings.json .

En requirements.txt fil skapas också i rotmappen. Den anger de Python-paket som krävs för att köra funktionsappen.

Installera azure-functions-durable från PyPI

När du har skapat projektet skapar Azure Functions Visual Studio Code-tillägget automatiskt en virtuell miljö med den valda Python-versionen. Sedan måste du aktivera den virtuella miljön i en terminal och installera vissa beroenden som krävs av Azure Functions och Durable Functions.

  1. Öppna requirements.txt i redigeraren och ändra dess innehåll till följande kod:

    azure-functions
    azure-functions-durable
    
  2. Öppna redigerarens integrerade terminal i den aktuella mappen (Ctrl+Skift+).

  3. I den integrerade terminalen aktiverar du den virtuella miljön i den aktuella mappen, beroende på ditt operativsystem:

    source .venv/bin/activate
    
  4. I den integrerade terminalen där den virtuella miljön är aktiverad använder du pip för att installera de paket som du definierade.

    python -m pip install -r requirements.txt
    

Skapa dina funktioner

En grundläggande Durable Functions-app innehåller tre funktioner:

  • Orchestrator-funktion: Beskriver ett arbetsflöde som samordnar andra funktioner.
  • Aktivitetsfunktion: Den anropas av orkestreringsfunktionen, utför arbete och returnerar eventuellt ett värde.
  • Klientfunktion: Det är en vanlig Azure-funktion som startar en orkestreringsfunktion. I det här exemplet används en HTTP-utlöst funktion.

Orchestrator-funktion

Du använder en mall för att skapa den hållbara funktionskoden i projektet.

  1. I kommandopaletten söker du efter och väljer Azure Functions: Create Function....

  2. Följ anvisningarna och ange följande information:

    Prompt Värde beskrivning
    Välj en mall för din funktion Durable Functions-orkestrerare Skapa en Durable Functions-orkestrering
    Ange ett funktionsnamn HelloOrchestrator Namnet på din varaktiga funktion

Du har lagt till en orkestrerare för att samordna aktivitetsfunktioner. Öppna HelloOrchestrator/__init__.py för att se funktionen orchestrator. Varje anrop för att context.call_activity anropa en aktivitetsfunktion med namnet Hello.

Därefter lägger du till den refererade aktivitetsfunktionen Hello .

Aktivitetsfunktion

  1. I kommandopaletten söker du efter och väljer Azure Functions: Create Function....

  2. Följ anvisningarna och ange följande information:

    Prompt Värde beskrivning
    Välj en mall för din funktion Durable Functions-aktivitet Skapa en aktivitetsfunktion
    Ange ett funktionsnamn Hello (Hej) Namnet på din aktivitetsfunktion

Du har lagt till Hello aktivitetsfunktionen som anropas av orkestreraren. Öppna Hello/__init__.py för att se att det tar ett namn som indata och returnerar en hälsning. En aktivitetsfunktion är där du utför åtgärder som att göra ett databasanrop eller utföra en beräkning.

Slutligen lägger du till en HTTP-utlöst funktion som startar orkestreringen.

Klientfunktion (HTTP-start)

  1. I kommandopaletten söker du efter och väljer Azure Functions: Create Function....

  2. Följ anvisningarna och ange följande information:

    Prompt Värde beskrivning
    Välj en mall för din funktion Durable Functions HTTP-start Skapa en HTTP-startfunktion
    Ange ett funktionsnamn DurableFunctionsHttpStart Namnet på klientfunktionen
    Auktoriseringsnivå Anonym I demosyfte tillåter du att funktionen anropas utan autentisering

Du har lagt till en HTTP-utlöst funktion som startar en orkestrering. Öppna DurableFunctionsHttpStart/__init__.py för att se att den använder client.start_new för att starta en ny orkestrering. Sedan används client.create_check_status_response för att returnera ett HTTP-svar som innehåller URL:er som kan användas för att övervaka och hantera den nya orkestreringen.

Nu har du en Durable Functions-app som kan köras lokalt och distribueras till Azure.

Krav

Version 2 av Python-programmeringsmodellen kräver följande lägsta versioner:

Aktivera v2-programmeringsmodell

Följande programinställning krävs för att köra programmeringsmodellen v2:

  • Namn: AzureWebJobsFeatureFlags
  • Värde: EnableWorkerIndexing

Om du kör lokalt med Azure Functions Core Tools bör du lägga till den här inställningen i local.settings.json filen. Om du kör i Azure följer du de här stegen med det verktyg du väljer:

Ersätt <FUNCTION_APP_NAME> och <RESOURCE_GROUP_NAME> med namnet på din funktionsapp respektive resursgrupp.

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

Om du vill skapa en grundläggande Durable Functions-app med hjälp av function_app.py dessa tre funktionstyper ersätter du innehållet i med följande Python-kod.

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}"

I tabellen nedan finns en förklaring av varje funktion och dess syfte i exemplet.

Metod beskrivning
hello_orchestrator Orchestrator-funktionen, som beskriver arbetsflödet. I det här fallet startar orkestreringen, anropar tre funktioner i en sekvens och returnerar det ordnade resultatet för alla tre funktionerna i en lista.
hello Aktivitetsfunktionen, som utför det arbete som orkestreras. Funktionen returnerar en enkel hälsning till staden som skickas som ett argument.
http_start En HTTP-utlöst funktion som startar en instans av orkestreraren och returnerar ett statuskontrollsvar.

Kommentar

Durable Functions har också stöd för Python V2-skisser. Om du vill använda dem måste du registrera dina skissfunktioner med hjälp av azure-functions-durable Blueprint klassen, som du ser här. Den resulterande skissen kan sedan registreras som vanligt. Se vårt exempel för ett exempel.

Testa funktionen lokalt

Med Azure Functions Core Tools kan du köra ett Azure Functions-projekt på din lokala utvecklingsdator. Om du inte har installerat det uppmanas du att installera dessa verktyg första gången du startar en funktion från Visual Studio Code.

  1. Om du vill testa funktionen anger du en brytpunkt i aktivitetsfunktionskoden Hello (Hello/__init__.py). Tryck på F5 eller välj Debug: Start Debugging från kommandopaletten för att starta funktionsappprojektet. Utdata från Core Tools visas på panelen Terminal.
  1. Om du vill testa funktionen anger du en brytpunkt i aktivitetsfunktionskoden hello . Tryck på F5 eller välj Debug: Start Debugging från kommandopaletten för att starta funktionsappprojektet. Utdata från Core Tools visas på panelen Terminal.

Kommentar

Mer information om felsökning finns i Durable Functions-diagnostik.

  1. Durable Functions kräver att ett Azure Storage-konto körs. När Du uppmanas att välja ett lagringskonto i Visual Studio Code väljer du Välj lagringskonto.

    Skärmbild av hur du skapar ett lagringskonto.

  2. Följ anvisningarna och ange följande information för att skapa ett nytt lagringskonto i Azure:

    Prompt Värde beskrivning
    Välj en prenumeration namnet på din prenumeration Välj din Azure-prenumeration
    Välj ett lagringskonto Skapa ett nytt lagringskonto
    Ange namnet på det nya lagringskontot unikt namn Namnet på lagringskontot som ska skapas
    Välj en resursgrupp unikt namn Namnet på resursgruppen som ska skapas
    Välj en plats region Välj en region nära dig
  3. På panelen Terminal kopierar du URL-slutpunkten för den HTTP-utlösta funktionen.

    Skärmbild av lokala Azure-utdata.

  1. Använd webbläsaren, eller ett verktyg som Postman eller cURL, och skicka en HTTP-begäran till URL-slutpunkten. Ersätt det sista segmentet med namnet på orkestreringsfunktionen (HelloOrchestrator). URL:en måste likna http://localhost:7071/api/orchestrators/HelloOrchestrator.

    Svaret är det första resultatet från HTTP-funktionen som låter dig veta att den varaktiga orkestreringen har startats. Det är ännu inte slutresultatet av orkestreringen. Svaret innehåller några användbara URL:er. För tillfället kör vi en fråga om orkestreringens status.

  1. Använd webbläsaren, eller ett verktyg som Postman eller cURL, och skicka en HTTP-begäran till URL-slutpunkten. Ersätt det sista segmentet med namnet på orkestreringsfunktionen (hello_orchestrator). URL:en måste likna http://localhost:7071/api/orchestrators/hello_orchestrator.

    Svaret är det första resultatet från HTTP-funktionen som låter dig veta att den varaktiga orkestreringen har startats. Det är ännu inte slutresultatet av orkestreringen. Svaret innehåller några användbara URL:er. För tillfället kör vi en fråga om orkestreringens status.

  1. Kopiera URL-värdet för statusQueryGetUri, klistra in det i webbläsarens adressfält och kör begäran. Du kan också fortsätta att använda Postman för att utfärda GET-begäran.

    Begäran kör en fråga mot orkestreringsinstansen om statusen. Du måste få ett slutligt svar som visar att instansen har slutförts och innehåller utdata eller resultat från den varaktiga funktionen. Det ser ut så här:

{
    "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. Om du vill sluta felsöka trycker du på Skift+F5 i Visual Studio Code.

När du har kontrollerat att funktionen körs korrekt på den lokala datorn är det dags att publicera projektet på Azure.

Logga in på Azure

Innan du kan skapa Azure-resurser eller publicera din app måste du logga in på Azure.

  1. Om du inte redan är inloggad väljer du Azure-ikonen i aktivitetsfältet. I området Resurser väljer du Sedan Logga in på Azure....

    Skärmbild av inloggningen till Azure-fönstret i VS Code.

    Om du redan är inloggad och kan se dina befintliga prenumerationer går du till nästa avsnitt. Om du ännu inte har ett Azure-konto väljer du Skapa ett Azure-konto.... Eleverna kan välja Skapa ett Azure for Students-konto....

  2. När du uppmanas till det i webbläsaren väljer du ditt Azure-konto och loggar in med dina autentiseringsuppgifter för Azure-kontot. Om du skapar ett nytt konto kan du logga in när ditt konto har skapats.

  3. När du har loggat in kan du stänga det nya webbläsarfönstret. De prenumerationer som tillhör ditt Azure-konto visas i sidofältet.

Skapa funktionsappen i Azure

I det här avsnittet skapar du en funktionsapp och relaterade resurser i din Azure-prenumeration.

  1. I Visual Studio Code trycker du på F1 för att öppna kommandopaletten och söka efter och köra kommandot Azure Functions: Create Function App in Azure....

  2. Ange följande information i meddelanderutorna:

    Prompt Urval
    Välj prenumeration Välj den prenumeration som ska användas. Du ser inte den här uppmaningen när du bara har en prenumeration synlig under Resurser.
    Ange ett globalt unikt namn för funktionsappen Ange ett namn som är giltigt i en URL-sökväg. Namnet du skriver verifieras för att se till att det är unikt i Azure Functions.
    Välj en körningsstack Välj den språkversion som du har kört lokalt på.
    Välj en plats för nya resurser För bättre prestanda väljer du en region nära dig.

    Tillägget visar status för enskilda resurser när de skapas i Azure i panelen Azure: Aktivitetslogg .

    Logg över skapande av Azure-resurser

  3. När skapandet är klart skapas följande Azure-resurser i din prenumeration. Resurserna namnges baserat på funktionsappens namn:

    • En resursgrupp, som är en logisk container för relaterade resurser.
    • Ett Azure Storage-standardkonto som underhåller tillstånd och annan information om dina projekt.
    • En funktionsapp som tillhandahåller miljön för att köra funktionskoden. Med en funktionsapp kan du gruppera funktioner som en logisk enhet för enklare hantering, distribution och delning av resurser inom samma värdplan.
    • En App Service-plan som definierar den underliggande värden för din funktionsapp.
    • En Application Insights-instans som är ansluten till funktionsappen, som spårar användningen av dina funktioner i appen.

    Ett meddelande visas när funktionsappen har skapats och distributionspaketet har tillämpats.

    Dricks

    Som standard skapas de Azure-resurser som krävs av funktionsappen baserat på det funktionsappnamn du anger. Som standard skapas de också i samma nya resursgrupp med funktionsappen. Om du antingen vill anpassa namnen på dessa resurser eller återanvända befintliga resurser måste du publicera projektet med avancerade skapandealternativ i stället.

Distribuera projektet till Azure

Viktigt!

Distribution till en befintlig funktionsapp skriver alltid över innehållet i appen i Azure.

  1. I kommandopaletten söker du efter och kör kommandot Azure Functions: Deploy to Function App....

  2. Välj den funktionsapp som du nyss skapade. När du uppmanas att skriva över tidigare distributioner väljer du Distribuera för att distribuera funktionskoden till den nya funktionsappresursen.

  3. När distributionen är klar väljer du Visa utdata för att visa skapande- och distributionsresultatet, inklusive de Azure-resurser som du skapade. Om du missar meddelandet väljer du klockikonen i det nedre högra hörnet för att se det igen.

    Skärmbild av fönstret Visa utdata.

Testa din funktion i Azure

  1. Kopiera URL:en för HTTP-utlösaren från panelen Utdata. URL:en som anropar din HTTP-utlösta funktion måste vara i det här formatet: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. Kopiera URL:en för HTTP-utlösaren från panelen Utdata. URL:en som anropar din HTTP-utlösta funktion måste vara i det här formatet: https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
  1. Klistra in den här nya URL:en för HTTP-begäran i webbläsarens adressfält. Du måste få samma statussvar som tidigare när du använder den publicerade appen.

Nästa steg

Du har använt Visual Studio Code för att skapa och publicera en beständig Python-funktionsapp.