Övning – Skapa ett arbetsflöde med hjälp av Durable Functions

Slutförd

I den här övningen använder du exempelscenariot från föregående lektion för att lära dig hur du skapar ett arbetsflöde för godkännande i Azure-portalen med durable functions.

Skapa en funktionsapp

  1. Logga in på Azure-portalen med samma konto som du använde till att aktivera sandbox-miljön.

  2. På Menyn i Azure-portalen eller på sidan Start väljer du Skapa en resurs under Azure-tjänster. Fönstret Skapa en resurs visas.

  3. Sök efter och välj Funktionsapp. Välj Förbrukning och välj sedan knappen Välj . Fönstret Skapa funktionsapp visas.

  4. På fliken Grundläggande anger du följande värden för varje inställning.

    Inställning Värde beskrivning
    Projektinformation
    Prenumeration Concierge-prenumeration Anger den prenumeration där den nya funktionsappen skapas.
    Resursgrupp I listrutan väljer du [resursgruppsnamn för sandbox-miljö] Anger namnet på den resursgrupp som funktionsappen ska skapas i. Vi skapar funktionsappen i sandbox-resursgruppen som tilldelades när vi aktiverade sandbox-miljön, nämligen [resursgruppsnamn för sandbox-miljö].
    Instansinformation
    Funktionsappens namn [Globalt unikt namn] Anger det namn som identifierar din nya funktionsapp. Giltiga tecken är a-z, 0-9 och -.
    Publicera Code Anger att funktionen använder kod i stället för en container.
    CLR-stack Node.js Anger att exempelkoden i den här modulen är skriven i JavaScript.
    Version 20 LTS Anger versionen för körningsstacken.
    Region [Välj i listan efter det här avsnittet] Välj den region som är närmast dig och som också är en av de tillåtna sandbox-regionerna som följer.
    Operativsystem
    Operativsystem Windows Anger det operativsystem som är värd för funktionsappen.
    Planera

    Med den kostnadsfria sandbox-miljön kan du skapa resurser i några av Azures globala regioner. Välj en region från följande lista när du skapar resurser:

    • Västra USA 2
    • USA, södra centrala
    • Central US
    • East US
    • Europa, västra
    • Sydostasien
    • Japan, östra
    • Brasilien, södra
    • Sydöstra Australien
    • Indien, centrala
  5. Välj Nästa: Lagring.

  6. På fliken Lagring anger du följande värden för varje inställning.

    Inställning Värde beskrivning
    Storage
    Lagringskonto [Globalt unikt namn] Anger namnet på det nya lagringskontot som används av funktionsappen (som inte behöver matcha det globalt unika namn som du har angett för din funktion). Lagringskontonamn måste vara mellan 3 och 24 tecken långa och kan endast innehålla siffror och gemener. Den här dialogrutan fyller automatiskt i fältet med ett unikt namn som genereras dynamiskt. Du kan använda ett annat namn eller ett befintligt konto om du vill.
  7. Välj Nästa: Nätverk. Acceptera alla standardinställningar.

  8. Välj Nästa: Övervakning.

  9. På fliken Övervakning anger du följande värde för inställningen.

    Inställning Värde beskrivning
    Application Insights
    Aktivera Application Insights Nej Anger att Application Insights är inaktiverat för den här modulen.
  10. Välj Granska + skapa och granska de alternativ som du har konfigurerat. Om du är nöjd med dina alternativ väljer du Skapa för att etablera och distribuera funktionsappen.

Vänta tills distributionen är klar innan du fortsätter. Distributionen kan ta några minuter.

Installera npm-paketet durable-functions

Eftersom vi skapar JavaScript Durable Functions måste vi installera durable-functions npm-paketet. Det gör du med följande steg.

  1. Välj Gå till resurs för att välja funktionsappen. Fönstret Funktionsapp visas.

  2. I det vänstra menyfönstret går du till Utvecklingsverktyg och väljer App Service-redigeraren (förhandsversion) och sedan Öppna redigeraren. Snabbstartsfönstret i App Service-redigeraren visas i ett nytt webbläsarfönster.

  3. Markera mappen WWWROOT i det vänstra menyfönstret.

  4. I den vänstra verktygsfältsmenyn väljer du ikonen Öppna konsol .

    Den här åtgärden startar konsolen. Du kan använda den här konsolen för att komma åt webbservern som är värd för dina funktioner och skriva koden för dina funktioner.

  5. Skapa en ny package.json fil.

    • Kör följande kommandon i konsolen för att skapa den nya JSON-filen och öppna den i redigeraren.

      touch package.json
      open package.json
      
    • Lägg till följande kod:

      {
        "name": "example",
        "version": "1.0.0"
      }
      

      Ersätt example med namnet på paketet. Du skulle till exempel kunna använda det globala unika namn som du angav tidigare för din funktion.

  6. Välj Ctrl+S för att spara filen, sedan Ctrl+Q för att stänga dokumentet.

  7. Växla tillbaka till Azure Portal.

  8. I den vänstra menyraden går du till Utvecklingsverktyg och väljer Konsol. Konsolfönstret visas för funktionsappen.

  9. Kör följande kommando:

    npm install durable-functions
    

    Det här kommandot instruerar nodpakethanteraren att installera durable-functions paketet och eventuella nödvändiga beroenden. Installationen kan ta några minuter att slutföra och nodpakethanteraren kan visa några varningar som du kan ignorera.

    Kommentar

    Om du uppmanas att installera en nyare version av npm använder du kommandot som angavs i felet för att installera den nyare versionen och installerar durable-functions sedan paketet när den nya versionen har installerats.

    Vänta tills alla paket har installerats.

  10. I det vänstra menyfönstret rullar du uppåt och väljer Översikt. I den översta menyraden väljer du Starta om och väljer sedan Ja när du uppmanas att starta om.

    Vänta tills omstarten har slutförts innan du fortsätter.

Skapa klientfunktionen för att skicka ett designförslag

  1. På Menyn i Azure-portalen eller på sidan Start väljer du Visa alla under Senaste resurser och sedan din funktionsapp. Fönstret Funktionsapp visas.

  2. På sidan Översikt väljer du fliken Funktioner i mitten av skärmen.

  3. Välj knappen Skapa i Azure-portalen. Fönstret Skapa funktion visas.

  4. Under Välj en mall går du till rutan Filter och anger Durable Functions HTTP starter och väljer mallen i listan. Den här mallen skapar en varaktig funktion som körs som svar på en HTTP-begäran.

  5. Under Mallinformation för fältet Ny funktion anger du HttpStart som namnet på funktionen. I fältet Auktoriseringsnivå väljer du Funktion och sedan Skapa. Fönstret HttpStart visas för din funktion.

  6. I det vänstra menyfönstret, under Utvecklare, väljer du Kod + Test. Fönstret Kod + test visas för din funktion.

    Koden för index.js-filen visas i redigeraren. Filen bör likna följande exempel:

    const df = require("durable-functions");
    
    module.exports = async function (context, req) {
        const client = df.getClient(context);
        const instanceId = await client.startNew(req.params.functionName, undefined, req.body);
    
        context.log(`Started orchestration with ID = '${instanceId}'.`);
    
        return client.createCheckStatusResponse(context.bindingData.req, instanceId);
    };
    
  7. I listrutan för filerna i funktionen väljer du function.json för att visa bindningarna som är associerade med den nya funktionen. Den här information anger eventuella autentiseringskrav tillsammans med HTTP-metoder som kan utlösa funktionen. Den här filen anger även att funktionen är en klient som startar orkestreringsprocessen. Filen bör likna följande exempel:

    {
      "bindings": [
        {
          "authLevel": "function",
          "name": "req",
          "type": "httpTrigger",
          "direction": "in",
          "route": "orchestrators/{functionName}",
          "methods": [
            "post",
            "get"
          ]
        },
        {
          "name": "$return",
          "type": "http",
          "direction": "out"
        },
        {
          "name": "starter",
          "type": "orchestrationClient",
          "direction": "in"
        }
      ]
    }
    

    Kommentar

    En bindning associerar resurser och andra objekt med en utlösare. Det är en deklarativ mekanism som tar bort behovet av hårdkodade referenser till andra tjänster och funktioner i koden.

Skapa orkestreringsfunktionen

  1. På Menyn i Azure-portalen eller på sidan Start väljer du Visa alla under Senaste resurser och sedan din funktionsapp. Fönstret Funktionsapp visas.

  2. På sidan Översikt väljer du fliken Funktioner i mitten av skärmen.

  3. I menyraden Funktioner väljer du Skapa. Fönstret Skapa funktion visas.

  4. Under Välj en mall går du till rutan Filter och anger Durable Functions orchestrator och väljer mallen i listan. Den här mallen skapar en varaktig funktion som orkestrerar körningen av funktioner.

  5. Under Mallinformation för fältet Ny funktion anger du OrchFunction som namnet på funktionen och väljer sedan Skapa. Funktionsfönstret OrchFunction visas.

  6. I det vänstra menyfönstret, under Utvecklare, väljer du Kod + Test. Fönstret Kod + test visas för din funktion.

    Koden för index.js-filen visas i redigeraren.

  7. Ersätt den befintliga koden med följande kod.

    const df = require("durable-functions");
    
    module.exports = df.orchestrator(function* (context) {
        const outputs = [];
    
        /*
        * We will call the approval activity with a reject and an approved to simulate both
        */
    
        outputs.push(yield context.df.callActivity("Approval", "Approved"));
        outputs.push(yield context.df.callActivity("Approval", "Rejected"));
    
        return outputs;
    });
    

    Den här koden anropar en aktivitetsfunktion med namnet Godkännande, som du skapar inom kort. Koden i orkestreringsfunktionen anropar funktionen Approval (Godkännande) två gånger. Första gången simuleras godkännandet av förslaget och andra gången testas logiken för förslagsavvisning.

    Värdet som varje anrop returnerar kombineras och skickas tillbaka till klientfunktionen. I en produktionsmiljö skulle orkestreringsfunktionen anropa en serie aktivitetsfunktioner som fattar beslutet att acceptera/avvisa beslutet och returnerar resultatet av dessa aktiviteter.

  8. I den översta menyraden väljer du Spara för att spara den nya funktionen.

Skapa aktivitetsfunktionen

  1. På Menyn i Azure-portalen eller på sidan Start väljer du Visa alla under Senaste resurser och sedan din funktionsapp. Fönstret Funktionsapp visas.

  2. På sidan Översikt väljer du fliken Funktioner i mitten av skärmen.

  3. I menyraden Funktioner väljer du Skapa. Fönstret Skapa funktion visas.

  4. Under Välj en mall i rutan Filter anger du Durable Functions-aktivitet och väljer mallen i listan. Den här mallen skapar en varaktig funktion som körs när en aktivitet anropas av en orchestrator-funktion.

  5. Under Mallinformation anger du Godkännande för funktionens namn för fältet Ny funktion och väljer sedan Skapa. Fönstret Godkännande visas för funktionsappen.

  6. I det vänstra menyfönstret, under Utvecklare, väljer du Kod + Test. Fönstret Kod + test visas för din funktion.

    Koden för index.js-filen visas i redigeraren.

  7. Ersätt den befintliga koden med följande kod.

    module.exports = async function (context) {
        return `Your project design proposal has been -  ${context.bindings.name}!`;
    };
    

    Funktionen returnerar ett meddelande som anger status för förslaget. Uttrycket context.bindings.name är antingen Accepted eller Rejected, beroende på parametern som skickas till funktionen från orchestrator. I ett verkligt scenario lägger du till logiken som hanterar åtgärderna för att acceptera eller avvisa i den här funktionen.

  8. I den översta menyraden väljer du Spara för att spara den nya funktionen.

Kontrollera att arbetsflödet för varaktiga funktioner startar

  1. På Menyn i Azure-portalen eller på sidan Start väljer du Visa alla under Senaste resurser och sedan din funktionsapp. Fönstret Funktionsapp visas.

  2. Välj fliken Funktioner i mitten av sidan.

  3. Välj funktionen HttpStart. Fönstret HttpStart visas för din funktion.

  4. I den översta menyraden väljer du Hämta funktions-URL och kopierar URL:en. URL:en bör likna följande exempel:

    https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    Du använder den här URL:en för att köra dina funktioner.

  5. Öppna ett nytt webbläsarfönster och gå till den URL som du kopierade. I URL:en ersätter du platshållaren {functionName} med OrchFunction, vilket bör likna följande exempel:

    https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    Svarsmeddelandet innehåller en uppsättning URI-slutpunkter som du kan använda för att övervaka och hantera körningen, som bör likna följande exempel:

    {
      "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f",
      "statusQueryGetUri": "https://example.azurewebsites.net/...",
      "sendEventPostUri": "https://example.azurewebsites.net/...",
      "terminatePostUri": "https://example.azurewebsites.net/...",
      "rewindPostUri": "https://example.azurewebsites.net/...",
      "purgeHistoryDeleteUri": "https://example.azurewebsites.net/..."
    }
    
  6. Kopiera värdet statusQueryGetUri och använd webbläsaren för att gå till den här URL:en. Du bör se ett svarsmeddelande som liknar följande exempel:

    {
      "name": "OrchFunction",
      "instanceId": "f0e1d2c3b4a5968778695a4b3c2d1e0f",
      "runtimeStatus": "Completed",
      "input": null,
      "customStatus": null,
      "output": [
        "Your project design proposal has been -  Approved!",
        "Your project design proposal has been -  Rejected!"
      ],
      "createdTime": "2019-04-16T15:23:03Z",
      "lastUpdatedTime": "2019-04-16T15:23:35Z"
    }
    

    Kom ihåg att orkestreringsfunktionen kör aktivitetsfunktionen två gånger. Första gången anger aktivitetsfunktionen att projektförslaget godkänns. Den andra gången avvisas förslaget. Orkestreringsfunktionen kombinerar meddelandena från båda funktionsanropen och returnerar dem till klientfunktionen.