Ć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. 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
    Typ planu Zużycie (bezserwerowe) Określa plan hostingu definiujący sposób przydzielania zasobów do aplikacji funkcji. W domyślnym planie Zużycie zasoby są dodawane dynamicznie zgodnie z wymaganiami funkcji. W przypadku tego modelu hostingu bezserwerowego opłaty są naliczane tylko wtedy, gdy funkcje są uruchomione.

    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ć. 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ź orchFunctionjako 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.