Ćwiczenie — tworzenie przepływu pracy przy użyciu rozszerzenia Durable Functions

Ukończone

W tym ćwiczeniu użyjesz przykładowego scenariusza z poprzedniej lekcji, aby dowiedzieć się, jak utworzyć przepływ pracy zatwierdzania w witrynie Azure Portal przy użyciu rozszerzenia Durable Functions.

Tworzenie aplikacji funkcji

  1. Zaloguj się w witrynie Azure Portal przy użyciu tego samego konta, które zostało wykorzystane do aktywowania piaskownicy.

  2. W menu witryny Azure Portal lub na stronie głównej w obszarze Usługi platformy Azure wybierz pozycję Utwórz zasób. Zostanie wyświetlone okienko Tworzenie zasobu .

  3. Wyszukaj i wybierz pozycję Aplikacja funkcji. Wybierz pozycję Zużycie, a następnie wybierz przycisk Wybierz . Zostanie wyświetlone okienko Tworzenie aplikacji funkcji.

  4. Na karcie Podstawy wprowadź następujące wartości dla każdego ustawienia.

    Ustawienie Wartość Opis
    Szczegóły projektu
    Subskrypcja Subskrypcja Concierge Określa subskrypcję, w ramach której jest tworzona ta nowa aplikacja funkcji.
    Grupa zasobów Z listy rozwijanej wybierz pozycję [nazwa grupy zasobów piaskownicy] Określa nazwę grupy zasobów, w której ma zostać utworzona aplikacja funkcji. Tworzymy aplikację funkcji w grupie zasobów piaskownicy, która została przypisana podczas aktywowania piaskownicy, czyli [nazwa grupy zasobów piaskownicy].
    Szczegóły wystąpienia
    Nazwa aplikacji funkcji [Nazwa unikatowa w skali globalnej] Określa nazwę identyfikującą nową aplikację funkcji. Prawidłowe znaki to a-z, 0-9 i -.
    Publikowanie Kod Określa, że funkcja używa kodu zamiast kontenera.
    Stos środowiska uruchomieniowego Node.js Określa, że przykładowy kod w tym module jest napisany w języku JavaScript.
    Wersja 20 LTS Określa wersję stosu środowiska uruchomieniowego.
    Region (Region) [Wybierz z listy poniżej tej sekcji] Wybierz region najbliżej Ciebie, który jest również jednym z dozwolonych regionów piaskownicy, które następują poniżej.
    System operacyjny
    System operacyjny Windows Określa system operacyjny, który jest hostem aplikacji funkcji.
    Planowanie

    Bezpłatna piaskownica umożliwia tworzenie zasobów w podzestawie regionów globalnych platformy Azure. Podczas tworzenia zasobów wybierz region z poniższej listy:

    • Zachodnie stany USA 2
    • South Central US
    • Central US
    • East US
    • West Europe
    • Southeast Asia
    • Japonia Wschodnia
    • Brazylia Południowa
    • Australia Południowo-Wschodnia
    • Indie Centralne
  5. Wybierz pozycję Dalej: Magazyn.

  6. Na karcie Magazyn wprowadź następujące wartości dla każdego ustawienia.

    Ustawienie Wartość Opis
    Storage
    Konto magazynu [Nazwa unikatowa w skali globalnej] Określa nazwę nowego konta magazynu używanego przez aplikację funkcji (która nie musi być zgodna z globalnie unikatową nazwą określoną dla funkcji). Nazwy kont magazynu muszą mieć długość od 3 do 24 znaków i mogą zawierać tylko cyfry i małe litery. Pole w tym oknie dialogowym jest automatycznie wypełnianie unikatową nazwą generowaną dynamicznie. Możesz jednak swobodnie użyć innej nazwy lub nawet istniejącego konta.
  7. Wybierz pozycję Dalej: Sieć. Zaakceptuj wartości domyślne.

  8. Wybierz pozycję Dalej: Monitorowanie.

  9. Na karcie Monitorowanie wprowadź następującą wartość ustawienia.

    Ustawienie Wartość Opis
    Application Insights
    Włącz usługę Application Insights Nie Określa, że Szczegółowe informacje aplikacji jest wyłączona dla tego modułu.
  10. Wybierz pozycję Przejrzyj i utwórz i przejrzyj skonfigurowane opcje. Jeśli opcje są zadowalające, wybierz pozycję Utwórz , aby aprowizować i wdrożyć aplikację funkcji.

Przed kontynuowaniem zaczekaj na ukończenie wdrażania. Wdrożenie może potrwać kilka minut.

Instalowanie pakietu npm durable-functions

Ponieważ tworzymy rozszerzenie Durable Functions języka JavaScript, musimy zainstalować durable-functions pakiet npm. Aby to zrobić, wykonaj następujące czynności.

  1. Wybierz pozycję Przejdź do zasobu , aby wybrać aplikację funkcji. Pojawi się okienko Aplikacja funkcji.

  2. W okienku menu po lewej stronie w obszarze Narzędzia programistyczne wybierz pozycję Edytor usługi App Service (wersja zapoznawcza), a następnie wybierz pozycję Otwórz edytor. Okienko Szybki start edytora usługi App Service zostanie wyświetlone w nowym oknie przeglądarki.

  3. W okienku menu po lewej stronie wyróżnij folder WWWROOT .

  4. W menu po lewej stronie paska narzędzi wybierz ikonę Otwórz konsolę .

    Ta akcja powoduje uruchomienie konsoli programu . Za pomocą tej konsoli możesz uzyskać dostęp do serwera internetowego, który hostuje funkcje i napisać kod dla funkcji.

  5. Utwórz nowy plik package.json .

    • Uruchom następujące polecenia w konsoli programu , aby utworzyć nowy plik JSON i otworzyć go w edytorze.

      touch package.json
      open package.json
      
    • Dodaj następujący kod źródłowy języka.

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

      Zastąp example ciąg nazwą pakietu. Można na przykład użyć globalnie unikatowej nazwy określonej wcześniej dla funkcji.

  6. Naciśnij klawisze Ctrl+S, aby zapisać plik, a następnie klawisze Ctrl+Q, aby zamknąć dokument.

  7. Wróć do witryny Azure Portal.

  8. Na pasku menu po lewej stronie w obszarze Narzędzia programistyczne wybierz pozycję Konsola. Okienko Konsola zostanie wyświetlone dla aplikacji funkcji.

  9. Uruchom następujące polecenie:

    npm install durable-functions
    

    To polecenie nakazuje menedżerowi pakietów węzłów zainstalowanie durable-functions pakietu i wszelkich wymaganych zależności. Instalacja może potrwać kilka minut, a menedżer pakietów węzłów może wyświetlić kilka ostrzeżeń, które można zignorować.

    Uwaga

    Jeśli zostanie wyświetlony monit o zainstalowanie nowszej wersji narzędzia npm, użyj polecenia podanego w błędzie, aby zainstalować nowszą wersję, a następnie zainstaluj durable-functions pakiet po zainstalowaniu nowej wersji.

    Poczekaj na zakończenie instalowania wszystkich pakietów.

  10. W okienku menu po lewej stronie przewiń w górę i wybierz pozycję Przegląd, a następnie na górnym pasku menu wybierz pozycję Uruchom ponownie, a następnie wybierz pozycję Tak po wyświetleniu monitu o ponowne uruchomienie.

    Przed kontynuowaniem zaczekaj na ukończenie ponownego uruchamiania.

Tworzenie funkcji klienta w celu przesyłania propozycji projektu

  1. W menu witryny Azure Portal lub na stronie głównej w obszarze Ostatnie zasoby wybierz pozycję Zobacz wszystko, a następnie wybierz aplikację funkcji. Pojawi się okienko Aplikacja funkcji.

  2. Na stronie Przegląd wybierz kartę Funkcje w środku ekranu.

  3. Wybierz przycisk Utwórz w witrynie Azure Portal . Zostanie wyświetlone okienko Tworzenie funkcji .

  4. W obszarze Wybierz szablon w polu Filtr wprowadź ciąg Durable Functions HTTP starter i wybierz ten szablon z listy. Ten szablon tworzy trwałą funkcję, która jest uruchamiana w odpowiedzi na żądanie HTTP.

  5. W obszarze Szczegóły szablonu w polu Nowa funkcja wprowadź ciąg HttpStart jako nazwę funkcji, a następnie w polu Poziom autoryzacji wybierz pozycję Funkcja, a następnie wybierz pozycję Utwórz. Zostanie wyświetlone okienko HttpStart dla funkcji.

  6. W okienku menu po lewej stronie w obszarze Deweloper wybierz pozycję Kod i testowanie. Zostanie wyświetlone okienko Kod i test dla funkcji.

    Kod pliku index.js zostanie wyświetlony w edytorze. Plik powinien przypominać następujący przykład:

    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. Na liście rozwijanej plików w funkcji wybierz pozycję function.json , aby wyświetlić powiązania skojarzone z nową funkcją. W tych informacjach określono wszelkie wymagania dotyczące uwierzytelniania wraz z metodami HTTP, które mogą powodować wyzwalanie funkcji. Ten plik określa również, że funkcja jest klientem, który uruchamia proces orkiestracji. Plik powinien przypominać następujący przykład:

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

    Uwaga

    Powiązanie kojarzy zasoby i inne elementy z wyzwalaczem. Jest to mechanizm deklaratywny, który eliminuje potrzebę odwołowania się do innych usług i funkcji w kodzie.

Tworzenie funkcji orkiestratora

  1. W menu witryny Azure Portal lub na stronie głównej w obszarze Ostatnie zasoby wybierz pozycję Zobacz wszystko, a następnie wybierz aplikację funkcji. Pojawi się okienko Aplikacja funkcji.

  2. Na stronie Przegląd wybierz kartę Funkcje w środku ekranu.

  3. Na pasku menu usługi Functions wybierz pozycję Utwórz. Zostanie wyświetlone okienko Tworzenie funkcji .

  4. W obszarze Wybierz szablon w polu Filtr wprowadź ciąg Durable Functions orchestrator i wybierz ten szablon z listy. Ten szablon tworzy trwałą funkcję, która organizuje wykonywanie funkcji.

  5. W obszarze Szczegóły szablonu w polu Nowa funkcja wprowadź orchFunction jako nazwę funkcji, a następnie wybierz pozycję Utwórz. Zostanie wyświetlone okienko funkcji OrchFunction .

  6. W okienku menu po lewej stronie w obszarze Deweloper wybierz pozycję Kod i testowanie. Zostanie wyświetlone okienko Kod i test dla funkcji.

    Kod pliku index.js zostanie wyświetlony w edytorze.

  7. Zastąp istniejący kod następującym kodem.

    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;
    });
    

    Ten kod wywołuje funkcję Activity o nazwie Approval, którą wkrótce utworzysz. Kod w funkcji orkiestratora wywołuje funkcję Zatwierdzenie dwa razy. Po raz pierwszy symuluje zaakceptowanie propozycji, a po raz drugi testuje logikę odrzucania propozycji.

    Wartość zwracane przez każde wywołanie jest łączone i przekazywane z powrotem do funkcji klienta. W środowisku produkcyjnym funkcja orkiestracji wywołałaby szereg funkcji działania podejmujących decyzję o zaakceptowaniu/odrzuceniu i zwróciłaby wynik tych działań.

  8. Na górnym pasku menu wybierz pozycję Zapisz , aby zapisać nową funkcję.

Tworzenie funkcji działania

  1. W menu witryny Azure Portal lub na stronie głównej w obszarze Ostatnie zasoby wybierz pozycję Zobacz wszystko, a następnie wybierz aplikację funkcji. Pojawi się okienko Aplikacja funkcji.

  2. Na stronie Przegląd wybierz kartę Funkcje w środku ekranu.

  3. Na pasku menu usługi Functions wybierz pozycję Utwórz. Zostanie wyświetlone okienko Tworzenie funkcji .

  4. W obszarze Wybierz szablon w polu Filtr wprowadź działanie Durable Functions i wybierz ten szablon z listy. Ten szablon tworzy trwałą funkcję, która jest uruchamiana, gdy działanie jest wywoływane przez funkcję orkiestratora.

  5. W obszarze Szczegóły szablonu w polu Nowa funkcja wprowadź wartość Zatwierdzenie dla nazwy funkcji, a następnie wybierz pozycję Utwórz. Okienko Zatwierdzenie zostanie wyświetlone dla aplikacji funkcji.

  6. W okienku menu po lewej stronie w obszarze Deweloper wybierz pozycję Kod i testowanie. Zostanie wyświetlone okienko Kod i test dla funkcji.

    Kod pliku index.js zostanie wyświetlony w edytorze.

  7. Zastąp istniejący kod następującym kodem.

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

    Ta funkcja zwraca komunikat wskazujący stan propozycji. Wyrażenie context.bindings.name jest albo Accepted , Rejectedw zależności od parametru przekazanego do funkcji z orkiestratora. W rzeczywistym scenariuszu należy dodać logikę, która obsługuje operacje akceptowania lub odrzucania w tej funkcji.

  8. Na górnym pasku menu wybierz pozycję Zapisz , aby zapisać nową funkcję.

Sprawdzanie, czy przepływ pracy funkcji trwałych się uruchamia

  1. W menu witryny Azure Portal lub na stronie głównej w obszarze Ostatnie zasoby wybierz pozycję Zobacz wszystko, a następnie wybierz aplikację funkcji. Pojawi się okienko Aplikacja funkcji.

  2. Wybierz kartę Funkcje w środku strony.

  3. Wybierz funkcję HttpStart. Zostanie wyświetlone okienko HttpStart dla funkcji.

  4. Na górnym pasku menu wybierz pozycję Pobierz adres URL funkcji i skopiuj adres URL. Adres URL powinien przypominać następujący przykład:

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

    Ten adres URL służy do uruchamiania funkcji.

  5. Otwórz nowe okno przeglądarki i przejdź do skopiowanego adresu URL. W adresie URL zamiast symbolu zastępczego {functionName} wpisz OrchFunction, aby otrzymać adres podobny do poniższego przykładu:

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

    Komunikat odpowiedzi zawiera zestaw punktów końcowych identyfikatora URI, które umożliwiają monitorowanie wykonywania i zarządzanie nim, co wygląda podobnie jak w poniższym przykładzie:

    {
      "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. Skopiuj wartość statusQueryGetUri i użyj przeglądarki internetowej, aby przejść do tego adresu URL. Powinna pojawić się odpowiedź przypominająca następujący przykład:

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

    Pamiętaj, że funkcja orkiestracji uruchamia funkcję działania dwukrotnie. Po raz pierwszy funkcja działania wskazuje, że propozycja projektu jest akceptowana. Za drugim razem propozycja jest odrzucana. Funkcja orkiestracji łączy komunikaty z obu wywołań funkcji i zwraca je do funkcji klienta.