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.
Wymagania wstępne
W celu ukończenia tego samouczka:
Zainstalowanie programu Visual Studio Code.
Zainstaluj rozszerzenie programu Visual Studio Code usługi Azure Functions.
Upewnij się, że masz najnowszą wersję narzędzi Azure Functions Core Tools.
Rozszerzenie Durable Functions wymaga konta usługi Azure Storage. Wymagana jest subskrypcja platformy Azure.
Upewnij się, że masz zainstalowaną wersję 3.7, 3.8, 3.9 lub 3.10 języka Python .
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.
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...
.Wybierz pustą lokalizację folderu dla projektu i wybierz pozycję Wybierz.
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.
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.
Otwórz requirements.txt w edytorze i zmień jego zawartość na następujący kod:
azure-functions azure-functions-durable
Otwórz zintegrowany terminal edytora w bieżącym folderze (Ctrl+Shift+').
W zintegrowanym terminalu aktywuj środowisko wirtualne w bieżącym folderze w zależności od systemu operacyjnego:
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.
W palecie poleceń wyszukaj i wybierz pozycję
Azure Functions: Create Function...
.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
W palecie poleceń wyszukaj i wybierz pozycję
Azure Functions: Create Function...
.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)
W palecie poleceń wyszukaj i wybierz pozycję
Azure Functions: Create Function...
.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:
- Środowisko uruchomieniowe usługi Azure Functions w wersji 4.16 lub nowszej
- Narzędzia Azure Functions Core Tools w wersji 4.0.5095 lub nowszej (jeśli są uruchomione lokalnie)
- azure-functions-durable v1.2.4+
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-durable
Blueprint
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.
- Aby przetestować funkcję, ustaw punkt przerwania w
Hello
kodzie funkcji działania (Hello/__init__.py). Naciśnij klawisz F5 lub wybierz zDebug: Start Debugging
palety poleceń, aby uruchomić projekt aplikacji funkcji. Dane wyjściowe z pakietu Core Tools są wyświetlane na panelu terminalu.
- Aby przetestować funkcję, ustaw punkt przerwania w
hello
kodzie funkcji działania. Naciśnij klawisz F5 lub wybierz zDebug: 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).
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.
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 W panelu terminalu skopiuj punkt końcowy adresu URL funkcji wyzwalanej przez protokół HTTP.
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 dohttp://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.
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 dohttp://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.
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"
}
- 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.
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....
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....
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.
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.
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 .
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.
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.
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....
Po wyświetleniu monitu o zastąpienie poprzednich wdrożeń wybierz pozycję Wdróż , aby wdrożyć kod funkcji w nowym zasobie aplikacji funkcji.
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.
Testowanie funkcji na platformie Azure
- 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
- 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
- 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.