Dela via


Snabbstart: Skapa en Python Durable Functions-app

Använd Durable Functions, en funktion i Azure Functions, för att skriva tillståndskänsliga funktioner i en serverlös miljö. Du installerar Durable Functions genom att installera Azure Functions-tillägget i Visual Studio Code. Tillägget hanterar tillstånd, kontrollpunkter och omstarter i ditt program.

I den här snabbstarten använder du Durable Functions-tillägget i Visual Studio Code för att lokalt skapa och testa en "hello world" Durable Functions-app i Azure Functions. Durable Functions-appen orkestrerar och kedjar samman anrop till andra funktioner. Sedan publicerar du funktionskoden till Azure. De verktyg som du använder är tillgängliga via Visual Studio Code-tillägget.

Skärmbild av den durable functions-app som körs i Azure.

Förutsättningar

Följande krävs för att slutföra den här snabbstarten:

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 väljer du F1 (eller ctrl/cmd+Skift+P) för att öppna kommandopaletten. I kommandotolken (>) anger du och väljer sedan Azure Functions: Create New Project (Skapa nytt projekt).

    Skärmbild av fönstret Skapa funktion.

  2. Välj bläddra. I dialogrutan Välj mapp går du till en mapp som ska användas för projektet och väljer sedan Välj.

  1. Ange följande information vid anvisningarna:

    Prompt Åtgärd beskrivning
    Välj ett språk för funktionsappprojektet Välj Python. Skapar ett lokalt Python Functions-projekt.
    Välj en version Välj Azure Functions v4. Det här alternativet visas bara 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 Välj Python 3.7, Python 3.8, Python 3.9 eller Python 3.10. Visual Studio Code skapar en virtuell miljö med hjälp av den version du väljer.
    Välj en mall för projektets första funktion Välj Hoppa över för tillfället.
    Välj hur du vill öppna projektet Välj Öppna i aktuellt fönster. Öppnar Visual Studio Code i den mapp som du har valt.
  1. Ange följande information vid anvisningarna:

    Prompt Värde beskrivning
    Välj ett språk Välj Python (Programmeringsmodell V2). Skapar ett lokalt Python Functions-projekt med hjälp av V2-programmeringsmodellen.
    Välj en version Välj Azure Functions v4. Det här alternativet visas bara 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 Välj Python 3.7, Python 3.8, Python 3.9 eller Python 3.10. Visual Studio Code skapar en virtuell miljö med hjälp av den version du väljer.
    Välj hur du vill öppna projektet Välj Öppna i aktuellt fönster. Öppnar Visual Studio Code i den mapp som du har valt.

Visual Studio Code installerar Azure Functions Core Tools om det krävs för att skapa ett projekt. 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 skapar 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å operativsystemet.

    source .venv/bin/activate
    

I den integrerade terminalen där den virtuella miljön aktiveras använder du pip för att installera de paket som du definierade.

python -m pip install -r requirements.txt

Skapa dina funktioner

Den mest grundläggande Durable Functions-appen har tre funktioner:

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

Orchestrator-funktion

Du använder en mall för att skapa durable functions-appkoden i projektet.

  1. I kommandopaletten anger du och väljer sedan Azure Functions: Create Function (Azure Functions: Create Function).

  2. Ange följande information vid anvisningarna:

    Prompt Åtgärd beskrivning
    Välj en mall för din funktion Välj Durable Functions orchestrator. Skapar en Durable Functions-apporkestrering.
    Ange ett funktionsnamn Välj HelloOrchestrator. Ett namn 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.

Sedan lägger du till den refererade aktivitetsfunktionen Hello .

Aktivitetsfunktion

  1. I kommandopaletten anger du och väljer sedan Azure Functions: Create Function (Azure Functions: Create Function).

  2. Ange följande information vid anvisningarna:

    Prompt Åtgärd beskrivning
    Välj en mall för din funktion Välj Durable Functions-aktivitet. Skapar en aktivitetsfunktion.
    Ange ett funktionsnamn Ange Hello. Namnet på din aktivitetsfunktion.

Du har lagt till Hello aktivitetsfunktionen som anropas av orkestratorn. Ö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 anger du och väljer sedan Azure Functions: Create Function (Azure Functions: Create Function).

  2. Ange följande information vid anvisningarna:

    Prompt Åtgärd beskrivning
    Välj en mall för din funktion Välj Durable Functions HTTP-start. Skapar en HTTP-startfunktion.
    Ange ett funktionsnamn Ange DurableFunctionsHttpStart. Namnet på klientfunktionen
    Auktoriseringsnivå Välj Anonym. I demosyfte tillåter det här värdet 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 programmeringsmodellen v2

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

  • Namn: AzureWebJobsFeatureFlags
  • Värde: EnableWorkerIndexing

Om du kör lokalt med hjälp av Azure Functions Core Tools lägger du till den här inställningen i din local.settings.json-fil . Om du kör i Azure utför du dessa steg med hjälp av ett relevant verktyg:

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 dessa tre funktionstyper ersätter du innehållet i function_app.py 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 följande tabell 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 sedan de ordnade resultaten 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 orkestreringen och returnerar ett check status svar.

Kommentar

Durable Functions har också stöd för Python v2-skisser. Om du vill använda skisser registrerar du dina skissfunktioner med hjälp av klassen azure-functions-durable Blueprint. Du kan registrera den resulterande skissen som vanligt. Du kan använda vårt exempel som exempel.

Testa funktionen lokalt

Med Azure Functions Core Tools kan du köra ett Azure Functions-projekt på din lokala utvecklingsdator. Om den inte är installerad uppmanas du att installera dessa verktyg första gången du startar en funktion i Visual Studio Code.

  1. Om du vill testa funktionen anger du en brytpunkt i aktivitetsfunktionskoden Hello (i Hello/__init__.py). Välj F5 eller välj Felsök: Starta felsökning i kommandopaletten för att starta funktionsappprojektet. Utdata från Core Tools visas på terminalpanelen.

    Kommentar

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

  1. Om du vill testa funktionen anger du en brytpunkt i aktivitetsfunktionskoden hello . Välj F5 eller välj Felsök: Starta felsökning i kommandopaletten för att starta funktionsappprojektet. Utdata från Core Tools visas på terminalpanelen.

    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. I anvisningarna anger du följande information för att skapa ett nytt lagringskonto i Azure.

    Prompt Åtgärd beskrivning
    Välj prenumeration Välj namnet på din prenumeration. Din Azure-prenumeration.
    Välj ett lagringskonto Välj Skapa ett nytt lagringskonto.
    Ange namnet på det nya lagringskontot Ange ett unikt namn. Namnet på lagringskontot som ska skapas.
    Välj en resursgrupp Ange ett unikt namn. Namnet på den resursgrupp som ska skapas.
    Välj en plats Välj en Azure-region. Välj en region som ligger nära dig.
  3. I terminalpanelen kopierar du URL-slutpunkten för din HTTP-utlösta funktion.

    Skärmbild av lokala Azure-utdata.

  1. Använd webbläsaren eller något av dessa HTTP-testverktyg för att skicka en HTTP POST-begäran till URL-slutpunkten:

    Varning

    För scenarier där du har känsliga data, till exempel autentiseringsuppgifter, hemligheter, åtkomsttoken, API-nycklar och annan liknande information, bör du använda ett verktyg som skyddar dina data med nödvändiga säkerhetsfunktioner, fungerar offline eller lokalt, inte synkroniserar dina data till molnet och inte kräver att du loggar in på ett onlinekonto. På så sätt minskar du risken för att exponera känsliga data för allmänheten.

    Ersätt det sista segmentet med namnet på orkestreringsfunktionen (HelloOrchestrator). URL:en bör likna http://localhost:7071/api/orchestrators/HelloOrchestrator.

    Svaret är HTTP-funktionens första resultat. Det låter dig veta att den hållbara orkestreringen har startats. Det visar ännu inte slutresultatet av orkestreringen. Svaret innehåller några användbara URL:er. För tillfället frågar du orkestreringens status.

  2. 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 HTTP-testverktyget för att utfärda GET-begäran.

    Begäran frågar orkestreringsinstansen om statusen. Du bör se att instansen har slutförts och att den innehåller utdata eller resultat för den hållbara funktionen. Det ser ut ungefär som i det här exemplet:

    {
        "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"
    }
    
  1. Använd webbläsaren eller något av dessa HTTP-testverktyg för att skicka en HTTP POST-begäran till URL-slutpunkten:

    Varning

    För scenarier där du har känsliga data, till exempel autentiseringsuppgifter, hemligheter, åtkomsttoken, API-nycklar och annan liknande information, bör du använda ett verktyg som skyddar dina data med nödvändiga säkerhetsfunktioner, fungerar offline eller lokalt, inte synkroniserar dina data till molnet och inte kräver att du loggar in på ett onlinekonto. På så sätt minskar du risken för att exponera känsliga data för allmänheten.

    Ersätt det sista segmentet med namnet på orkestreringsfunktionen (HelloOrchestrator). URL:en bör likna http://localhost:7071/api/orchestrators/HelloOrchestrator.

    Svaret är HTTP-funktionens första resultat. Det låter dig veta att den hållbara orkestreringen har startats. Det visar ännu inte slutresultatet av orkestreringen. Svaret innehåller några användbara URL:er. För tillfället frågar du orkestreringens status.

  2. 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 HTTP-testverktyget för att utfärda GET-begäran.

    Begäran frågar orkestreringsinstansen om statusen. Du bör se att instansen har slutförts och att den innehåller utdata eller resultat för den hållbara funktionen. Det ser ut ungefär som i det här exemplet:

    {
        "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 väljer du 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 till 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 går du till aktivitetsfältet och väljer Azure-ikonen. Under Resurser väljer du Logga in på Azure.

    Skärmbild av inloggningen till Azure-fönstret i Visual Studio 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 att göra 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. Prenumerationerna 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. Många av besluten om att skapa resurser fattas för dig baserat på standardbeteenden.

  1. I Visual Studio Code väljer du F1 för att öppna kommandopaletten. I kommandotolken (>) anger du och väljer sedan Azure Functions: Create Function App in Azure (Skapa funktionsapp i Azure).

  2. Ange följande information vid anvisningarna:

    Prompt Åtgärd
    Välj prenumeration Välj den Azure-prenumeration som ska användas. Uppmaningen visas inte 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 anger 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 kör lokalt.
    Välj en plats för nya resurser Välj en Azure-region. För bättre prestanda väljer du en region nära dig.

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

    Skärmbild som visar loggen för skapande av Azure-resurser.

  3. När funktionsappen skapas skapas följande relaterade resurser i din Azure-prenumeration. Resurserna namnges baserat på det namn som du angav för funktionsappen.

    • 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 Azure App Service-plan som definierar den underliggande värden för din funktionsapp.
    • En Application Insights-instans som är ansluten till funktionsappen och 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 namn du anger för funktionsappen. Som standard skapas resurserna med funktionsappen i samma nya resursgrupp. Om du vill anpassa namnen på de associerade resurserna eller återanvända befintliga resurser publicerar du projektet med avancerade alternativ för att skapa.

Distribuera projektet till Azure

Viktigt!

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

  1. I kommandopaletten anger du och väljer sedan Azure Functions: Deploy to Function App (Azure Functions: Distribuera till funktionsapp).

  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 resultatet av skapandet och distributionen, 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 utdatapanelen. 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 utdatapanelen. 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 nya URL:en för HTTP-begäran i webbläsarens adressfält. När du använder den publicerade appen kan du förvänta dig att få samma statussvar som du fick när du testade lokalt.

Python Durable Functions-appen som du skapade och publicerade med hjälp av Visual Studio Code är redo att användas.

Rensa resurser

Om du inte längre behöver de resurser som du skapade för att slutföra snabbstarten tar du bort resursgruppen och alla relaterade resurser för att undvika relaterade kostnader i din Azure-prenumeration.