Szybki start: tworzenie aplikacji Durable Functions w języku Python

Użyj rozszerzenia Durable Functions, funkcji usługi Azure Functions, aby napisać funkcje stanowe w środowisku bezserwerowym. Rozszerzenie Durable Functions można zainstalować, instalując rozszerzenie usługi Azure Functions w programie Visual Studio Code. Rozszerzenie zarządza stanem, punktami kontrolnymi i ponownymi uruchomieniami w aplikacji.

W tym przewodniku Szybki start użyjesz rozszerzenia Durable Functions w programie Visual Studio Code, aby lokalnie utworzyć i przetestować aplikację Durable Functions "hello world" w usłudze Azure Functions. Aplikacja Durable Functions organizuje i tworzy łańcuchy wywołań do innych funkcji. Następnie opublikujesz kod funkcji na platformie Azure. Używane narzędzia są dostępne za pośrednictwem rozszerzenia programu Visual Studio Code.

Zrzut ekranu przedstawiający uruchomioną aplikację Durable Functions na platformie Azure.

Wymagania wstępne

Aby ukończyć ten przewodnik Szybki Start, musisz spełnić następujące warunki:

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Tworzenie projektu lokalnego

W tej sekcji użyjesz programu Visual Studio Code do utworzenia lokalnego projektu usługi Azure Functions.

  1. W programie Visual Studio Code wybierz F1 (lub naciśnij Ctrl/Cmd+Shift+P), aby otworzyć paletę poleceń. Po wyświetleniu monitu () wprowadź , a następnie wybierz pozycję Azure Functions: Create New Project (>Azure Functions: Utwórz nowy projekt).

    Zrzut ekranu przedstawiający okno Tworzenie funkcji.

  2. Wybierz przycisk Przeglądaj. W oknie dialogowym Wybieranie folderu przejdź do folderu, który ma być używany dla projektu, a następnie wybierz pozycję Wybierz.

  1. Po wyświetleniu monitów podaj następujące informacje:

    Monit Akcja opis
    Wybieranie języka projektu aplikacji funkcji Wybierz pozycję Python. Tworzy lokalny projekt usługi Python Functions.
    Wybierz wersję Wybierz pozycję Azure Functions w wersji 4. Ta opcja jest widoczna tylko wtedy, gdy narzędzia Core Tools nie są jeszcze zainstalowane. W takim przypadku narzędzia Core Tools są instalowane po raz pierwszy podczas uruchamiania aplikacji.
    Wersja języka Python Wybierz pozycję Python 3.7, Python 3.8, Python 3.9 lub Python 3.10. Program Visual Studio Code tworzy środowisko wirtualne przy użyciu wybranej wersji.
    Wybieranie szablonu dla pierwszej funkcji projektu Wybierz pozycję Pomiń na razie.
    Wybierz sposób otwierania projektu Wybierz pozycję Otwórz w bieżącym oknie. Otwiera program Visual Studio Code w wybranym folderze.
  1. Po wyświetleniu monitów podaj następujące informacje:

    Monit Wartość Opis
    Wybieranie języka Wybierz pozycję Python (model programowania w wersji 2). Tworzy lokalny projekt usługi Python Functions przy użyciu modelu programowania w wersji 2.
    Wybierz wersję Wybierz pozycję Azure Functions w wersji 4. Ta opcja jest widoczna tylko wtedy, gdy narzędzia Core Tools nie są jeszcze zainstalowane. W takim przypadku narzędzia Core Tools są instalowane po raz pierwszy podczas uruchamiania aplikacji.
    Wersja języka Python Wybierz pozycję Python 3.7, Python 3.8, Python 3.9 lub Python 3.10. Program Visual Studio Code tworzy środowisko wirtualne przy użyciu wybranej wersji.
    Wybierz sposób otwierania projektu Wybierz pozycję Otwórz w bieżącym oknie. Otwiera program Visual Studio Code w wybranym folderze.

Program Visual Studio Code instaluje narzędzia Azure Functions Core Tools, jeśli jest wymagane do utworzenia projektu. Tworzy również projekt aplikacji funkcji w folderze. Ten projekt zawiera pliki konfiguracji host.json i local.settings.json .

Plik requirements.txt jest również tworzony w folderze głównym. Określa pakiety języka Python wymagane do uruchomienia aplikacji funkcji.

Instalowanie rozszerzenia azure-functions-durable z poziomu interfejsu PyPI

Podczas tworzenia projektu rozszerzenie programu Visual Studio Code usługi Azure Functions automatycznie tworzy środowisko wirtualne z wybraną wersją języka Python. Następnie należy aktywować środowisko wirtualne w terminalu i zainstalować pewne zależności wymagane przez usługi Azure Functions i Durable Functions.

  1. Otwórz requirements.txt w edytorze i zmień jego zawartość na następujący kod:

    azure-functions
    azure-functions-durable
    
  2. W bieżącym folderze otwórz zintegrowany terminal edytora (Ctrl+Shift+').

  3. W zintegrowanym terminalu aktywuj środowisko wirtualne w bieżącym folderze w zależności od systemu operacyjnego.

    source .venv/bin/activate
    

Następnie w zintegrowanym terminalu, w którym aktywowano środowisko wirtualne, użyj narzędzia, aby zainstalować zdefiniowane pakiety.

python -m pip install -r requirements.txt

Tworzenie funkcji

Najbardziej podstawowa aplikacja Durable Functions ma trzy funkcje:

  • Funkcja orkiestratora: przepływ pracy, który organizuje inne funkcje.
  • Funkcja działania: funkcja wywoływana przez funkcję orkiestratora, wykonuje pracę i opcjonalnie zwraca wartość.
  • Funkcja klienta: zwykła funkcja na platformie Azure, która uruchamia funkcję orkiestratora. W tym przykładzie użyto funkcji wyzwalanej przez protokół HTTP.

Orchestrator, funkcja

Szablon służy do tworzenia kodu aplikacji Durable Functions w projekcie.

  1. W palecie poleceń wprowadź , a następnie wybierz pozycję Azure Functions: Create Function (Azure Functions: Utwórz funkcję).

  2. Po wyświetleniu monitów podaj następujące informacje:

    Monit Akcja opis
    Wybieranie szablonu dla funkcji Wybierz pozycję Durable Functions orchestrator. Tworzy aranżację aplikacji Durable Functions.
    Podaj nazwę funkcji Wybierz pozycję HelloOrchestrator. Nazwa funkcji trwałej.

Dodano orkiestrator do koordynowania funkcji działania. Otwórz aplikację HelloOrchestrator/__init__.py , aby wyświetlić funkcję orkiestratora. Każde wywołanie do wywołania context.call_activity wywołuje funkcję działania o nazwie Hello.

Następnie dodasz przywołyną Hello funkcję działania.

Activity, funkcja

  1. W palecie poleceń wprowadź , a następnie wybierz pozycję Azure Functions: Create Function (Azure Functions: Utwórz funkcję).

  2. Po wyświetleniu monitów podaj następujące informacje:

    Monit Akcja opis
    Wybieranie szablonu dla funkcji Wybierz pozycję Działanie rozszerzenia Durable Functions. Tworzy funkcję działania.
    Podaj nazwę funkcji Wprowadź witaj. Nazwa funkcji działania.

Dodano Hello funkcję działania wywoływaną przez koordynatora. Otwórz pozycję Hello/__init__.py , aby zobaczyć, że przyjmuje nazwę jako dane wejściowe i zwraca powitanie. Funkcja działania polega na wykonywaniu akcji, takich jak wykonywanie wywołania bazy danych lub wykonywanie obliczeń.

Na koniec dodasz funkcję wyzwalaną przez protokół HTTP, która uruchamia orkiestrację.

Funkcja klienta (starter HTTP)

  1. W palecie poleceń wprowadź , a następnie wybierz pozycję Azure Functions: Create Function (Azure Functions: Utwórz funkcję).

  2. Po wyświetleniu monitów podaj następujące informacje:

    Monit Akcja opis
    Wybieranie szablonu dla funkcji Wybierz pozycję Durable Functions HTTP starter. Tworzy funkcję startową HTTP.
    Podaj nazwę funkcji Wprowadź durableFunctionsHttpStart. Nazwa funkcji klienta
    Poziom autoryzacji Wybierz pozycję Anonimowe. W celach demonstracyjnych ta wartość umożliwia wywoływanie funkcji bez użycia uwierzytelniania.

Dodano funkcję wyzwalaną przez protokół HTTP, która uruchamia orkiestrację. Otwórz plik DurableFunctionsHttpStart/__init__.py , aby zobaczyć, że używa client.start_new go do rozpoczęcia nowej aranżacji. Następnie służy client.create_check_status_response do zwracania odpowiedzi HTTP zawierającej adresy URL, których można użyć do monitorowania nowej aranżacji i zarządzania nią.

Masz teraz aplikację Durable Functions, którą można uruchomić lokalnie i wdrożyć na platformie Azure.

Wymagania

Wersja 2 modelu programowania w języku Python wymaga następujących minimalnych wersji:

Włączanie modelu programowania w wersji 2

Do uruchomienia modelu programowania w wersji 2 jest wymagane następujące ustawienie aplikacji:

  • Nazwa: AzureWebJobsFeatureFlags
  • Wartość: EnableWorkerIndexing

Jeśli używasz narzędzi Azure Functions Core Tools lokalnie, dodaj to ustawienie do pliku local.settings.json. Jeśli korzystasz z platformy Azure, wykonaj następujące kroki, korzystając z odpowiedniego narzędzia:

Zastąp <FUNCTION_APP_NAME> wartości i <RESOURCE_GROUP_NAME> nazwą aplikacji funkcji i grupy zasobów odpowiednio.

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

Aby utworzyć podstawową aplikację Durable Functions przy użyciu tych trzech typów funkcji, zastąp zawartość function_app.py następującym kodem w języku Python:

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

Zapoznaj się z poniższą tabelą, aby zapoznać się z wyjaśnieniem poszczególnych funkcji i jej przeznaczenia w przykładzie:

Metoda opis
hello_orchestrator Funkcja orkiestratora, która opisuje przepływ pracy. W takim przypadku orkiestracja rozpoczyna się, wywołuje trzy funkcje w sekwencji, a następnie zwraca uporządkowane wyniki wszystkich trzech funkcji na liście.
hello Funkcja działania, która wykonuje aranżowaną pracę. Funkcja zwraca proste powitanie do miasta przekazanego jako argument.
http_start Funkcja wyzwalana przez protokół HTTP, która uruchamia wystąpienie orkiestracji i zwraca check status odpowiedź.

Uwaga

Rozszerzenie Durable Functions obsługuje również strategie języka Python w wersji 2. Aby użyć strategii, zarejestruj funkcje strategii przy użyciu klasy azure-functions-durable Blueprint . Możesz zarejestrować wynikową strategię w zwykły sposób. Możesz użyć naszego przykładu jako przykładu.

Lokalne testowanie funkcji

Narzędzia Azure Functions Core Tools umożliwiają uruchamianie projektu usługi Azure Functions na lokalnym komputerze deweloperów. Jeśli nie został zainstalowany, zostanie wyświetlony monit o zainstalowanie tych narzędzi przy pierwszym uruchomieniu funkcji w programie Visual Studio Code.

  1. Aby przetestować funkcję, ustaw punkt przerwania w Hello kodzie funkcji działania (w funkcji Hello/__init__.py). Wybierz pozycję F5 lub wybierz pozycję Debuguj: rozpocznij debugowanie na palecie poleceń, aby uruchomić projekt aplikacji funkcji. Dane wyjściowe z narzędzi Core Tools są wyświetlane na panelu terminalu.

    Uwaga

    Aby uzyskać więcej informacji na temat debugowania, zobacz Diagnostyka rozszerzenia Durable Functions.

  1. Aby przetestować funkcję, ustaw punkt przerwania w hello kodzie funkcji działania. Wybierz pozycję F5 lub wybierz pozycję Debuguj: rozpocznij debugowanie na palecie poleceń, aby uruchomić projekt aplikacji funkcji. Dane wyjściowe z narzędzi Core Tools są wyświetlane na panelu terminalu.

    Uwaga

    Aby uzyskać więcej informacji na temat debugowania, zobacz Diagnostyka rozszerzenia Durable Functions.

  1. Rozszerzenie Durable Functions wymaga uruchomienia konta usługi Azure Storage. Gdy program Visual Studio Code wyświetli monit o wybranie konta magazynu, wybierz pozycję Wybierz konto magazynu.

    Zrzut ekranu przedstawiający sposób tworzenia konta magazynu.

  2. Po wyświetleniu monitu podaj następujące informacje, aby utworzyć nowe konto magazynu na platformie Azure.

    Monit Akcja opis
    Wybierz subskrypcję Wybierz nazwę subskrypcji. Swoją subskrypcję platformy Azure.
    Wybieranie konta magazynu Wybierz pozycję Utwórz nowe konto magazynu.
    Wprowadź nazwę nowego konta magazynu Wprowadź unikatową nazwę. Nazwa konta magazynu do utworzenia.
    Wybierz grupę zasobów Wprowadź unikatową nazwę. Nazwa grupy zasobów do utworzenia.
    Wybierz lokalizację Określ region platformy Azure. Wybierz region, który jest blisko Ciebie.
  3. Na panelu terminalu skopiuj punkt końcowy adresu URL funkcji wyzwalanej przez protokół HTTP.

    Zrzut ekranu przedstawiający lokalne dane wyjściowe platformy Azure.

  1. Użyj przeglądarki lub narzędzia testowego HTTP, aby wysłać żądanie HTTP POST do punktu końcowego adresu URL.

    Zastąp ostatni segment nazwą funkcji orkiestratora (HelloOrchestrator). Adres URL powinien być podobny do http://localhost:7071/api/orchestrators/HelloOrchestrator.

    Odpowiedź to początkowy wynik funkcji HTTP. Informuje o tym, że trwała aranżacja została uruchomiona pomyślnie. Nie wyświetla jeszcze wyniku końcowego aranżacji. Odpowiedź zawiera kilka przydatnych adresów URL. Na razie wykonaj zapytanie dotyczące stanu aranżacji.

  2. Skopiuj wartość adresu URL dla statusQueryGetUri, wklej ją na pasku adresu przeglądarki i wykonaj żądanie. Możesz również nadal używać narzędzia do testowania HTTP w celu wystawienia żądania GET.

    Żądanie wysyła zapytanie do wystąpienia orkiestracji dla stanu. Powinno zostać wyświetlone, że wystąpienie zostało zakończone i że zawiera dane wyjściowe lub wyniki funkcji trwałej. Wygląda podobnie do tego przykładu:

    {
        "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. Użyj przeglądarki lub narzędzia testowego HTTP, aby wysłać żądanie HTTP POST do punktu końcowego adresu URL.

    Zastąp ostatni segment nazwą funkcji orkiestratora (HelloOrchestrator). Adres URL powinien być podobny do http://localhost:7071/api/orchestrators/HelloOrchestrator.

    Odpowiedź to początkowy wynik funkcji HTTP. Informuje o tym, że trwała aranżacja została uruchomiona pomyślnie. Nie wyświetla jeszcze wyniku końcowego aranżacji. Odpowiedź zawiera kilka przydatnych adresów URL. Na razie wykonaj zapytanie dotyczące stanu aranżacji.

  2. Skopiuj wartość adresu URL dla statusQueryGetUri, wklej ją na pasku adresu przeglądarki i wykonaj żądanie. Możesz również nadal używać narzędzia do testowania HTTP w celu wystawienia żądania GET.

    Żądanie wysyła zapytanie do wystąpienia orkiestracji dla stanu. Powinno zostać wyświetlone, że wystąpienie zostało zakończone i że zawiera dane wyjściowe lub wyniki funkcji trwałej. Wygląda podobnie do tego przykładu:

    {
        "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. Aby zatrzymać debugowanie, w programie Visual Studio Code wybierz pozycję Shift+F5.

Po sprawdzeniu, czy funkcja działa poprawnie na komputerze lokalnym, nadszedł czas na opublikowanie projektu na platformie Azure.

Logowanie się do platformy Azure

Aby można było utworzyć zasoby platformy Azure lub opublikować aplikację, musisz zalogować się na platformie Azure.

  1. Jeśli jeszcze nie zalogowałeś się, na pasku Działania wybierz ikonę platformy Azure. Następnie w obszarze Zasoby wybierz pozycję Zaloguj się na platformie Azure.

    Zrzut ekranu przedstawiający okno logowania do platformy Azure w programie Visual Studio Code.

    Jeśli już się zalogowałeś i widzisz istniejące subskrypcje, przejdź do następnej sekcji. Jeśli nie masz jeszcze konta platformy Azure, wybierz pozycję Utwórz konto platformy Azure. Uczniowie mogą wybrać pozycję Utwórz konto platformy Azure for Students.

  2. Po wyświetleniu monitu w przeglądarce wybierz swoje konto platformy Azure i zaloguj się przy użyciu poświadczeń konta platformy Azure. Jeśli tworzysz nowe konto, możesz zalogować się po utworzeniu konta.

  3. Po pomyślnym zalogowaniu można zamknąć nowe okno przeglądarki. Subskrypcje należące do konta platformy Azure są wyświetlane na pasku bocznym.

Tworzenie aplikacji funkcji na platformie Azure

W tej sekcji utworzysz aplikację funkcji i powiązane zasoby w ramach subskrypcji platformy Azure. Wiele decyzji dotyczących tworzenia zasobów jest podejmowanych na podstawie domyślnych zachowań.

  1. W programie Visual Studio Code wybierz F1, aby otworzyć paletę poleceń. Po wyświetleniu monitu (>) wprowadź, a następnie wybierz pozycję Azure Functions: Utwórz aplikację funkcji na platformie Azure.

  2. Po wyświetleniu monitów podaj następujące informacje:

    Monit Akcja
    Wybierz subskrypcję Wybierz subskrypcję platformy Azure do użycia. Monit nie jest wyświetlany, gdy w obszarze Zasoby jest widoczna tylko jedna subskrypcja.
    Wprowadź globalnie unikatową nazwę aplikacji funkcji Wprowadź nazwę prawidłową w ścieżce adresu URL. Wprowadzona nazwa jest weryfikowana, aby upewnić się, że jest unikatowa w usłudze Azure Functions.
    Wybieranie stosu środowiska uruchomieniowego Wybierz wersję języka, która jest obecnie uruchamiana lokalnie.
    Wybieranie lokalizacji dla nowych zasobów Określ region platformy Azure. Aby uzyskać lepszą wydajność, wybierz region w pobliżu.

    Na panelu Azure: Dziennik aktywności rozszerzenie platformy Azure pokazuje stan poszczególnych zasobów podczas ich tworzenia na platformie Azure.

    Zrzut ekranu przedstawiający dziennik tworzenia zasobów platformy Azure.

  3. Po utworzeniu aplikacji funkcji następujące powiązane zasoby są tworzone w ramach subskrypcji platformy Azure. Zasoby są nazwane na podstawie nazwy wprowadzonej dla aplikacji funkcji.

    • Grupa zasobów, która jest kontenerem logicznym dla powiązanych zasobów.
    • Standardowe konto usługi Azure Storage, które zachowuje stan i inne informacje o projektach.
    • Aplikacja funkcji, która udostępnia środowisko do wykonywania kodu funkcji. Aplikacja funkcji umożliwia grupowanie funkcji jako jednostki logicznej w celu łatwiejszego zarządzania, wdrażania i udostępniania zasobów w ramach tego samego planu hostingu.
    • Plan usługi aplikacja systemu Azure, który definiuje podstawowy host aplikacji funkcji.
    • Wystąpienie usługi Application Insights połączone z aplikacją funkcji, które śledzi korzystanie z funkcji w aplikacji.

    Po utworzeniu aplikacji funkcji i zastosowaniu pakietu wdrożeniowego zostanie wyświetlone powiadomienie.

    Napiwek

    Domyślnie zasoby platformy Azure wymagane przez aplikację funkcji są tworzone na podstawie nazwy wprowadzonej dla aplikacji funkcji. Domyślnie zasoby są tworzone za pomocą aplikacji funkcji w tej samej, nowej grupie zasobów. Jeśli chcesz dostosować nazwy skojarzonych zasobów lub ponownie użyć istniejących zasobów, opublikuj projekt przy użyciu zaawansowanych opcji tworzenia.

Wdrażanie projektu na platformie Azure

Ważne

Wdrażanie w istniejącej aplikacji funkcji zawsze zastępuje zawartość tej aplikacji na platformie Azure.

  1. W palecie poleceń wprowadź i wybierz pozycję Azure Functions: Deploy to Function App (Azure Functions: Wdróż w aplikacji funkcji).

  2. Wybierz właśnie utworzoną aplikację funkcji. Po wyświetleniu monitu o zastąpienie poprzednich wdrożeń wybierz pozycję Wdróż , aby wdrożyć kod funkcji w nowym zasobie aplikacji funkcji.

  3. Po zakończeniu wdrażania wybierz pozycję Wyświetl dane wyjściowe , aby wyświetlić wyniki tworzenia i wdrażania, w tym utworzone zasoby platformy Azure. Jeśli przegapisz powiadomienie, wybierz ikonę dzwonka w prawym dolnym rogu, aby zobaczyć je ponownie.

    Zrzut ekranu przedstawiający okno Wyświetl dane wyjściowe.

Testowanie funkcji na platformie Azure

  1. Skopiuj adres URL wyzwalacza HTTP z panelu danych wyjściowych. Adres URL, który wywołuje funkcję wyzwalaną przez protokół HTTP, musi mieć następujący format:

    https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator

  1. Skopiuj adres URL wyzwalacza HTTP z panelu danych wyjściowych. Adres URL, który wywołuje funkcję wyzwalaną przez protokół HTTP, musi mieć następujący format:

    https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator

  1. Wklej nowy adres URL żądania HTTP na pasku adresu przeglądarki. Gdy używasz opublikowanej aplikacji, możesz oczekiwać, że otrzymasz tę samą odpowiedź o stanie otrzymaną podczas testowania lokalnego.

Aplikacja Durable Functions języka Python utworzona i opublikowana przy użyciu programu Visual Studio Code jest gotowa do użycia.

Czyszczenie zasobów

Jeśli nie potrzebujesz już zasobów utworzonych do ukończenia tego przewodnika Szybki start, aby uniknąć powiązanych kosztów w ramach subskrypcji platformy Azure, usuń grupę zasobów i wszystkie powiązane zasoby.