Ćwiczenie — tworzenie przepływu pracy przy użyciu rozszerzenia Durable Functions
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
Zaloguj się w witrynie Azure Portal przy użyciu tego samego konta, które zostało wykorzystane do aktywowania piaskownicy.
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 .
Wyszukaj i wybierz pozycję Aplikacja funkcji. Wybierz pozycję Zużycie, a następnie wybierz przycisk Wybierz . Zostanie wyświetlone okienko Tworzenie aplikacji funkcji.
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
Wybierz pozycję Dalej: Magazyn.
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. Wybierz pozycję Dalej: Sieć. Zaakceptuj wartości domyślne.
Wybierz pozycję Dalej: Monitorowanie.
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. 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.
Wybierz pozycję Przejdź do zasobu , aby wybrać aplikację funkcji. Pojawi się okienko Aplikacja funkcji.
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.
W okienku menu po lewej stronie wyróżnij folder WWWROOT .
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.
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.
Naciśnij klawisze Ctrl+S, aby zapisać plik, a następnie klawisze Ctrl+Q, aby zamknąć dokument.
Wróć do witryny Azure Portal.
Na pasku menu po lewej stronie w obszarze Narzędzia programistyczne wybierz pozycję Konsola. Okienko Konsola zostanie wyświetlone dla aplikacji funkcji.
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.
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
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.
Na stronie Przegląd wybierz kartę Funkcje w środku ekranu.
Wybierz przycisk Utwórz w witrynie Azure Portal . Zostanie wyświetlone okienko Tworzenie funkcji .
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.
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.
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); };
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
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.
Na stronie Przegląd wybierz kartę Funkcje w środku ekranu.
Na pasku menu usługi Functions wybierz pozycję Utwórz. Zostanie wyświetlone okienko Tworzenie funkcji .
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.
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 .
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.
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ń.
Na górnym pasku menu wybierz pozycję Zapisz , aby zapisać nową funkcję.
Tworzenie funkcji działania
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.
Na stronie Przegląd wybierz kartę Funkcje w środku ekranu.
Na pasku menu usługi Functions wybierz pozycję Utwórz. Zostanie wyświetlone okienko Tworzenie funkcji .
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.
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.
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.
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 alboAccepted
,Rejected
w 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.Na górnym pasku menu wybierz pozycję Zapisz , aby zapisać nową funkcję.
Sprawdzanie, czy przepływ pracy funkcji trwałych się uruchamia
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.
Wybierz kartę Funkcje w środku strony.
Wybierz funkcję HttpStart. Zostanie wyświetlone okienko HttpStart dla funkcji.
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.
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/..." }
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.