Tworzenie pierwszej funkcji trwałej w języku Python

Durable Functions to rozszerzenie usługi Azure Functions , które umożliwia pisanie funkcji stanowych w środowisku bezserwerowym. Rozszerzenie zarządza stanem, punktami kontrolnymi i ponownym uruchamianiem.

W tym artykule przedstawiono użycie rozszerzenia programu Visual Studio Code dla usługi Azure Functions w celu lokalnego utworzenia i przetestowania funkcji trwałej „hello world”. Ta funkcja będzie orkiestrować i łączyć ze sobą wywołania do innych funkcji. Następnie możesz opublikować kod funkcji na platformie Azure.

Zrzut ekranu przedstawiający uruchomioną funkcję trwałą na platformie Azure.

Wymagania wstępne

W celu ukończenia tego samouczka:

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 naciśnij klawisz F1 (lub Ctrl/Cmd+Shift+P), aby otworzyć paletę poleceń. W palecie poleceń wyszukaj i wybierz pozycję Azure Functions: Create New Project....

    Zrzut ekranu przedstawiający okno Tworzenie funkcji.

  2. Wybierz pustą lokalizację folderu dla projektu i wybierz pozycję Wybierz.

  1. Postępuj zgodnie z monitami i podaj następujące informacje:

    Monit Wartość Opis
    Wybieranie języka projektu aplikacji funkcji Python Utwórz lokalny projekt usługi Python Functions.
    Wybierz wersję Usługa 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 Python 3.7, 3.8, 3.9 lub 3.10 Program Visual Studio Code utworzy środowisko wirtualne z wybraną wersją.
    Wybieranie szablonu dla pierwszej funkcji projektu Pomiń teraz
    Wybierz sposób otwierania projektu Otwórz w bieżącym oknie Otwiera ponownie program Visual Studio Code w wybranym folderze.
  1. Postępuj zgodnie z monitami i podaj następujące informacje:

    Monit Wartość Opis
    Wybierz język Python (model programowania w wersji 2) Utwórz lokalny projekt usługi Python Functions przy użyciu modelu programowania w wersji 2.
    Wybierz wersję Usługa 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 Python 3.7, 3.8, 3.9 lub 3.10 Program Visual Studio Code utworzy środowisko wirtualne z wybraną wersją.
    Wybierz sposób otwierania projektu Otwórz w bieżącym oknie Otwiera ponownie program Visual Studio Code w wybranym folderze.

Program Visual Studio Code instaluje narzędzia Azure Functions Core Tools w razie potrzeby. 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

Po utworzeniu 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. Otwórz zintegrowany terminal edytora w bieżącym folderze (Ctrl+Shift+').

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

    source .venv/bin/activate
    
  4. W zintegrowanym terminalu, w którym aktywowano środowisko wirtualne, użyj narzędzia pip, aby zainstalować zdefiniowane pakiety.

    python -m pip install -r requirements.txt
    

Tworzenie funkcji

Podstawowa aplikacja Durable Functions zawiera trzy funkcje:

  • Funkcja orkiestratora: opisuje przepływ pracy, który organizuje inne funkcje.
  • Funkcja działania: jest wywoływana przez funkcję orkiestratora, wykonuje pracę i opcjonalnie zwraca wartość.
  • Funkcja klienta: jest to zwykła funkcja platformy 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 funkcji trwałej w projekcie.

  1. W palecie poleceń wyszukaj i wybierz pozycję Azure Functions: Create Function....

  2. Postępuj zgodnie z monitami i podaj następujące informacje:

    Monit Wartość Opis
    Wybieranie szablonu dla funkcji Orkiestrator rozszerzenia Durable Functions Tworzenie orkiestracji rozszerzenia Durable Functions
    Podaj nazwę funkcji 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ń wyszukaj i wybierz pozycję Azure Functions: Create Function....

  2. Postępuj zgodnie z monitami i podaj następujące informacje:

    Monit Wartość Opis
    Wybieranie szablonu dla funkcji Działanie rozszerzenia Durable Functions Tworzenie funkcji działania
    Podaj nazwę funkcji Hello (Cześć) 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 to miejsce, w którym będziesz wykonywać akcje, takie 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ń wyszukaj i wybierz pozycję Azure Functions: Create Function....

  2. Postępuj zgodnie z monitami i podaj następujące informacje:

    Monit Wartość Opis
    Wybieranie szablonu dla funkcji Trwały start HTTP usługi Durable Functions Tworzenie funkcji startowej HTTP
    Podaj nazwę funkcji DurableFunctionsHttpStart Nazwa funkcji klienta
    Poziom autoryzacji Anonimowe W celach demonstracyjnych zezwól na wywoływanie funkcji bez uwierzytelniania

Dodano funkcję wyzwalaną przez protokół HTTP, która uruchamia aranżację. 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, należy dodać to ustawienie do local.settings.json pliku. Jeśli korzystasz z platformy Azure, wykonaj następujące kroki za pomocą wybranego 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 3 typów funkcji, zastąp zawartość function_app.py następującym kodem języka 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 uzyskać wyjaśnienie 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 i zwraca uporządkowane wyniki wszystkich 3 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 aranżacji i zwraca odpowiedź stanu kontroli.

Uwaga

Rozszerzenie Durable Functions obsługuje również strategie języka Python w wersji 2. Aby ich używać, musisz zarejestrować funkcje strategii przy użyciu azure-functions-durableBlueprint klasy , jak pokazano tutaj. Wynikowa strategia może być następnie zarejestrowana normalnie. Zobacz nasz przykład .

Lokalne testowanie funkcji

Podstawowe narzędzia usługi Azure Functions umożliwiają uruchamianie projektu usługi Azure Functions na lokalnym komputerze deweloperskim. Jeśli nie masz zainstalowanego narzędzia, zostanie wyświetlony monit o zainstalowanie tych narzędzi przy pierwszym uruchomieniu funkcji z poziomu programu Visual Studio Code.

  1. Aby przetestować funkcję, ustaw punkt przerwania w Hello kodzie funkcji działania (Hello/__init__.py). Naciśnij klawisz F5 lub wybierz z Debug: Start Debugging palety poleceń, aby uruchomić projekt aplikacji funkcji. Dane wyjściowe z pakietu Core Tools są wyświetlane na panelu terminalu.
  1. Aby przetestować funkcję, ustaw punkt przerwania w hello kodzie funkcji działania. Naciśnij klawisz F5 lub wybierz z Debug: Start Debugging palety poleceń, aby uruchomić projekt aplikacji funkcji. Dane wyjściowe z pakietu Core Tools są wyświetlane na panelu terminalu.

Uwaga

Aby uzyskać więcej informacji na temat debugowania, zobacz Durable Functions Diagnostics (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. Postępuj zgodnie z monitami i podaj następujące informacje, aby utworzyć nowe konto magazynu na platformie Azure:

    Monit Wartość Opis
    Wybieranie subskrypcji nazwa subskrypcji Wybierz subskrypcję platformy Azure
    Wybierz konto magazynu Tworzenie nowego konta magazynu
    Wprowadź nazwę nowego konta magazynu unikatowa nazwa Nazwa konta magazynu do utworzenia
    Wybieranie grupy zasobów unikatowa nazwa Nazwa grupy zasobów do utworzenia
    Wybieranie lokalizacji Region Wybierz region blisko Ciebie
  3. W 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, takiego jak Postman lub cURL, wyślij żądanie HTTP do punktu końcowego adresu URL. Zastąp ostatni segment nazwą funkcji orkiestratora (HelloOrchestrator). Adres URL musi być podobny do http://localhost:7071/api/orchestrators/HelloOrchestrator.

    Odpowiedź to początkowy wynik funkcji HTTP informujący o pomyślnym rozpoczęciu orkiestracji trwałej. Nie jest to jeszcze końcowy wynik aranżacji. Odpowiedź zawiera kilka przydatnych adresów URL. Na razie wykonajmy zapytanie o stan aranżacji.

  1. Użyj przeglądarki lub narzędzia, takiego jak Postman lub cURL, wyślij żądanie HTTP do punktu końcowego adresu URL. Zastąp ostatni segment nazwą funkcji orkiestratora (hello_orchestrator). Adres URL musi być podobny do http://localhost:7071/api/orchestrators/hello_orchestrator.

    Odpowiedź to początkowy wynik funkcji HTTP informujący o pomyślnym rozpoczęciu orkiestracji trwałej. Nie jest to jeszcze końcowy wynik aranżacji. Odpowiedź zawiera kilka przydatnych adresów URL. Na razie wykonajmy zapytanie o stan aranżacji.

  1. Skopiuj wartość adresu URL dla statusQueryGetUri, wklej ją na pasku adresu przeglądarki i wykonaj żądanie. Alternatywnie możesz również nadal używać narzędzia Postman do wystawiania żądania GET.

    Żądanie wykona zapytanie o stan wystąpienia aranżacji. Musisz uzyskać ostateczną odpowiedź, która pokazuje, że wystąpienie zostało ukończone i zawiera dane wyjściowe lub wyniki funkcji trwałej. Wygląda na to:

{
    "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"
}
{
    "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, naciśnij klawisze Shift+F5 w programie Visual Studio Code.

Gdy będziesz mieć pewność, że funkcja działa poprawnie na komputerze lokalnym, możesz opublikować projekt 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ę, wybierz ikonę platformy Azure na pasku działania. Następnie w obszarze Zasoby wybierz pozycję Zaloguj się do platformy Azure....

    Zrzut ekranu przedstawiający okno logowania do platformy Azure w programie VS 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żesz 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.

  1. Wybierz ikonę platformy Azure na pasku działania. Następnie w obszarze Zasoby wybierz ikonę + i wybierz opcję Utwórz aplikację funkcji na platformie Azure .

    Tworzenie zasobu w subskrypcji platformy Azure

  2. Podaj następujące informacje po wyświetleniu monitów:

    Monit Wybór
    Wybierz subskrypcję Wybierz subskrypcję, która ma zostać użyta. Ten monit nie będzie wyświetlany, gdy w obszarze Zasoby jest widoczna tylko jedna subskrypcja.
    Wprowadź globalnie unikatową nazwę aplikacji funkcji Wpisz nazwę prawidłową w ścieżce adresu URL. Typ nazwy jest weryfikowany, aby upewnić się, że jest on unikatowy w usłudze Azure Functions.
    Wybieranie stosu środowiska uruchomieniowego Wybierz wersję języka, dla której uruchomiono lokalnie.
    Wybieranie lokalizacji dla nowych zasobów Aby uzyskać lepszą wydajność, wybierz region blisko Ciebie.

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

    Dziennik tworzenia zasobów platformy Azure

  3. Po zakończeniu tworzenia następujące zasoby platformy Azure są tworzone w ramach subskrypcji. Zasoby są nazwane na podstawie nazwy 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 App Service, który definiuje podstawowy host aplikacji funkcji.
    • Wystąpienie aplikacji Szczegółowe informacje połączone z aplikacją funkcji, które śledzi użycie 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 podanej nazwy aplikacji funkcji. Domyślnie są one również tworzone w tej samej nowej grupie zasobów z aplikacją funkcji. Jeśli chcesz dostosować nazwy tych zasobów lub ponownie użyć istniejących zasobów, musisz opublikować projekt z zaawansowanymi opcjami 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 obszarze Zasoby działania platformy Azure znajdź właśnie utworzony zasób aplikacji funkcji, kliknij prawym przyciskiem myszy zasób i wybierz polecenie Wdróż w aplikacji funkcji....

  2. 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 Dane wyjściowe. 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 Dane wyjściowe. 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 ten nowy adres URL żądania HTTP na pasku adresu przeglądarki. Musisz uzyskać taką samą odpowiedź stanu, jak wcześniej podczas korzystania z opublikowanej aplikacji.

Następne kroki

Użyto programu Visual Studio Code do utworzenia i opublikowania aplikacji funkcji trwałej języka Python.