Tworzenie pierwszej konteneryzowanej usługi Azure Functions w usłudze Azure Arc (wersja zapoznawcza)
W tym artykule utworzysz aplikację funkcji działającą w kontenerze systemu Linux i wdrożysz ją w klastrze Kubernetes z obsługą usługi Azure Arc z rejestru kontenerów. Podczas tworzenia własnego kontenera możesz dostosować środowisko wykonywania dla aplikacji funkcji. Aby dowiedzieć się więcej, zobacz App Service, Functions i Logic Apps w usłudze Azure Arc.
Uwaga
Obsługa wdrażania kontenera niestandardowego w klastrze Kubernetes z obsługą usługi Azure Arc jest obecnie dostępna w wersji zapoznawczej.
Funkcje można również opublikować w klastrze Kubernetes z włączoną usługą Azure Arc bez uprzedniego utworzenia kontenera. Aby dowiedzieć się więcej, zobacz Tworzenie pierwszej funkcji w usłudze Azure Arc (wersja zapoznawcza)
Wybierz język programowania
Najpierw użyjesz narzędzi usługi Azure Functions, aby utworzyć kod projektu jako aplikację funkcji w kontenerze platformy Docker przy użyciu obrazu podstawowego systemu Linux specyficznego dla języka. Pamiętaj, aby wybrać wybrany język w górnej części artykułu.
Narzędzia Core Tools automatycznie generują plik Dockerfile dla projektu, który używa najbardziej aktualnej wersji poprawnego obrazu podstawowego dla języka funkcji. Należy regularnie aktualizować kontener z najnowszego obrazu podstawowego i ponownie wdrażać go ze zaktualizowanej wersji kontenera. Aby uzyskać więcej informacji, zobacz Tworzenie konteneryzowanych aplikacji funkcji.
Wymagania wstępne
Przed rozpoczęciem należy spełnić następujące wymagania:
Zainstaluj zestaw .NET 8.0 SDK.
Zainstaluj narzędzia Azure Functions Core Tools w wersji 4.0.5198 lub nowszej.
- Zainstaluj narzędzia Azure Functions Core Tools w wersji 4.x.
- Zainstaluj wersję Node.js obsługiwaną przez usługę Azure Functions.
- Zainstaluj wersję języka Python obsługiwaną przez usługę Azure Functions.
- Zainstaluj zestaw .NET 6 SDK.
Zainstaluj wersję zestawu Java Developer Kit obsługiwanego przez usługę Azure Functions.
Zainstaluj program Apache Maven w wersji 3.0 lub nowszej.
- Interfejs wiersza polecenia platformy Azure w wersji 2.4 lub nowszej.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Aby opublikować obraz aplikacji funkcji konteneryzowanej tworzony w rejestrze kontenerów, potrzebny jest identyfikator platformy Docker i platforma Docker uruchomiona na komputerze lokalnym. Jeśli nie masz identyfikatora platformy Docker, możesz utworzyć konto platformy Docker.
Należy również ukończyć sekcję Tworzenie rejestru kontenerów w przewodniku Szybki start usługi Container Registry, aby utworzyć wystąpienie rejestru. Zanotuj w pełni kwalifikowaną nazwę serwera logowania.
Tworzenie i aktywowanie środowiska wirtualnego
W odpowiednim folderze uruchom następujące polecenia, aby utworzyć i aktywować środowisko wirtualne o nazwie .venv
. Upewnij się, że używasz jednej z wersji języka Python obsługiwanych przez usługę Azure Functions.
python -m venv .venv
source .venv/bin/activate
Jeśli język Python nie zainstalował pakietu venv w dystrybucji systemu Linux, uruchom następujące polecenie:
sudo apt-get install python3-venv
Wszystkie kolejne polecenia są uruchamiane w tym aktywowanym środowisku wirtualnym.
Tworzenie i testowanie projektu funkcji lokalnych
W terminalu lub wierszu polecenia uruchom następujące polecenie dla wybranego języka, aby utworzyć projekt aplikacji funkcji w bieżącym folderze:
func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker
W pustym folderze uruchom następujące polecenie, aby wygenerować projekt usługi Functions na podstawie archetypu narzędzia Maven:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker
Parametr -DjavaVersion
informuje środowisko uruchomieniowe usługi Functions o wersji języka Java do użycia. Użyj polecenia -DjavaVersion=11
, jeśli chcesz, aby funkcje działały w języku Java 11. Jeśli nie określisz -DjavaVersion
parametru , program Maven domyślnie maven to Java 8. Aby uzyskać więcej informacji, zobacz Wersje języka Java.
Ważne
Aby ukończyć ten artykuł, zmienna JAVA_HOME
środowiskowa musi być ustawiona na lokalizację instalacji prawidłowej wersji zestawu JDK.
Narzędzie Maven prosi o podanie wartości potrzebnych do zakończenia generowania projektu we wdrożeniu. Postępuj zgodnie z monitami i podaj następujące informacje:
Monit | Wartość | Opis |
---|---|---|
groupId | com.fabrikam |
Wartość, która jednoznacznie identyfikuje projekt we wszystkich projektach, zgodnie z regułami nazewnictwa pakietów dla języka Java. |
artifactId | fabrikam-functions |
Wartość, która jest nazwą pliku jar bez numeru wersji. |
version | 1.0-SNAPSHOT |
Wybierz wartość domyślną. |
pakiet | com.fabrikam.functions |
Wartość, która jest pakietem Java dla wygenerowanego kodu funkcji. Użyj wartości domyślnej. |
Wpisz Y
lub naciśnij Enter, aby potwierdzić.
Narzędzie Maven tworzy pliki projektu w nowym folderze o nazwie artifactId, który w tym przykładzie to fabrikam-functions
.
Opcja --docker
generuje plik Dockerfile dla projektu, który definiuje odpowiedni kontener do użycia z usługą Azure Functions i wybranym środowiskiem uruchomieniowym.
Przejdź do folderu projektu:
cd fabrikam-functions
Użyj następującego polecenia, aby dodać funkcję do projektu, gdzie --name
argument jest unikatową nazwą funkcji, a --template
argument określa wyzwalacz funkcji. func new
tworzy plik kodu w języku C# w projekcie.
func new --name HttpExample --template "HTTP trigger"
Użyj następującego polecenia, aby dodać funkcję do projektu, gdzie --name
argument jest unikatową nazwą funkcji, a --template
argument określa wyzwalacz funkcji. func new
Tworzy podfolder pasujący do nazwy funkcji zawierającej plik konfiguracji o nazwie function.json.
func new --name HttpExample --template "HTTP trigger"
Aby przetestować funkcję lokalnie, uruchom lokalnego hosta środowiska uruchomieniowego usługi Azure Functions w katalogu głównym folderu projektu.
func start
func start
npm install
npm start
mvn clean package
mvn azure-functions:run
Po wyświetleniu punktu końcowego zapisanego HttpExample
w danych wyjściowych przejdź do tego punktu końcowego. W danych wyjściowych odpowiedzi powinien zostać wyświetlony komunikat powitalny.
Po wyświetleniu punktu końcowego zapisanego HttpExample
w danych wyjściowych przejdź do http://localhost:7071/api/HttpExample?name=Functions
strony . Przeglądarka musi wyświetlić komunikat "hello", który zwraca Functions
wartość , podaną do parametru name
zapytania.
Naciśnij Ctrl+C (polecenie+C w systemie macOS), aby zatrzymać hosta.
Kompilowanie obrazu kontenera i weryfikowanie go lokalnie
(Opcjonalnie) Sprawdź plik Dockerfile w katalogu głównym folderu projektu. Plik Dockerfile opisuje wymagane środowisko do uruchamiania aplikacji funkcji w systemie Linux. Pełną listę obsługiwanych obrazów podstawowych dla usługi Azure Functions można znaleźć na stronie obrazu podstawowego usługi Azure Functions.
W folderze głównym projektu uruchom polecenie docker build , podaj nazwę jako azurefunctionsimage
i tag jako v1.0.0
. Zastąp ciąg <DOCKER_ID>
identyfikatorem konta usługi Docker Hub. To polecenie powoduje skompilowanie obrazu platformy Docker dla kontenera.
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
Po zakończeniu działania polecenia można uruchomić nowy kontener lokalnie.
Aby zweryfikować kompilację, uruchom obraz w kontenerze lokalnym przy użyciu polecenia docker run , zastąp <DOCKER_ID>
ponownie identyfikatorem konta usługi Docker Hub i dodaj argument portów jako -p 8080:80
:
docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0
Po uruchomieniu obrazu w kontenerze lokalnym przejdź do http://localhost:8080/api/HttpExample
adresu , który musi wyświetlić ten sam komunikat powitania, jak poprzednio. Ponieważ utworzona funkcja wyzwalana przez protokół HTTP używa autoryzacji anonimowej, można wywołać funkcję działającą w kontenerze bez konieczności uzyskiwania klucza dostępu. Aby uzyskać więcej informacji, zobacz klucze autoryzacji.
Po uruchomieniu obrazu w kontenerze lokalnym przejdź do http://localhost:8080/api/HttpExample?name=Functions
adresu , który musi wyświetlać ten sam komunikat "hello", co poprzednio. Ponieważ utworzona funkcja wyzwalana przez protokół HTTP używa autoryzacji anonimowej, można wywołać funkcję działającą w kontenerze bez konieczności uzyskiwania klucza dostępu. Aby uzyskać więcej informacji, zobacz klucze autoryzacji.
Po zweryfikowaniu aplikacji funkcji w kontenerze naciśnij Ctrl+C (Polecenie+C w systemie macOS), aby zatrzymać wykonywanie.
Publikowanie obrazu kontenera w rejestrze
Aby udostępnić obraz kontenera do wdrożenia w środowisku hostingu, należy wypchnąć go do rejestru kontenerów.
Azure Container Registry to prywatna usługa rejestru służąca do tworzenia, przechowywania obrazów kontenerów i powiązanych artefaktów oraz zarządzania nimi. Do publikowania kontenerów w usługach platformy Azure należy użyć prywatnej usługi rejestru.
Użyj tego polecenia, aby zalogować się do wystąpienia rejestru przy użyciu bieżących poświadczeń platformy Azure:
az acr login --name <REGISTRY_NAME>
W poprzednim poleceniu zastąp
<REGISTRY_NAME>
ciąg nazwą wystąpienia usługi Container Registry.Użyj tego polecenia, aby otagować obraz przy użyciu w pełni kwalifikowanej nazwy serwera logowania rejestru:
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Zastąp
<LOGIN_SERVER>
ciąg w pełni kwalifikowaną nazwą serwera logowania rejestru i<DOCKER_ID>
identyfikatorem platformy Docker.Użyj tego polecenia, aby wypchnąć kontener do wystąpienia rejestru:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Tworzenie środowiska Kubernetes usługi App Service
Przed rozpoczęciem należy utworzyć środowisko Kubernetes usługi App Service dla klastra Kubernetes z obsługą usługi Azure Arc.
Uwaga
Podczas tworzenia środowiska pamiętaj, aby zanotować zarówno nazwę lokalizacji niestandardowej, jak i nazwę grupy zasobów zawierającej lokalizację niestandardową. Można ich użyć do znalezienia niestandardowego identyfikatora lokalizacji, który będzie potrzebny podczas tworzenia aplikacji funkcji w środowisku.
Jeśli środowisko nie zostało utworzone, zapoznaj się z administratorem klastra.
Dodawanie rozszerzeń interfejsu wiersza polecenia platformy Azure
Uruchom środowisko powłoki Bash w usłudze Azure Cloud Shell.
Ponieważ te polecenia interfejsu wiersza polecenia nie są jeszcze częścią podstawowego zestawu interfejsu wiersza polecenia, dodaj je za pomocą następujących poleceń:
az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube
Tworzenie zasobów platformy Azure
Przed wdrożeniem kontenera w nowym środowisku Kubernetes usługi App Service należy utworzyć jeszcze dwa zasoby:
- Konto magazynu. Chociaż ten artykuł tworzy konto magazynu, w niektórych przypadkach konto magazynu może nie być wymagane. Aby uzyskać więcej informacji, zobacz Klastry z obsługą usługi Azure Arc w artykule dotyczącym magazynu.
- Aplikacja funkcji, która udostępnia kontekst uruchamiania kontenera. Aplikacja funkcji działa w środowisku Kubernetes usługi App Service i mapuje je na lokalny projekt funkcji. Aplikacja funkcji umożliwia grupowanie funkcji jako jednostki logicznej, co ułatwia wdrażanie i udostępnianie zasobów oraz zarządzanie nimi.
Uwaga
Aplikacje funkcji działają w środowisku Kubernetes usługi App Service w planie dedykowanego (App Service). Podczas tworzenia aplikacji funkcji bez istniejącego planu zostanie utworzony plan.
Tworzenie konta magazynu
Użyj polecenia az storage account create, aby utworzyć konto magazynu ogólnego przeznaczenia w grupie zasobów i regionie:
az storage account create --name <STORAGE_NAME> --location westeurope --resource-group myResourceGroup --sku Standard_LRS
Uwaga
W niektórych przypadkach konto magazynu może nie być wymagane. Aby uzyskać więcej informacji, zobacz Klastry z obsługą usługi Azure Arc w artykule dotyczącym magazynu.
W poprzednim przykładzie zastąp <STORAGE_NAME>
ciąg nazwą odpowiednią dla Ciebie i unikatową w usłudze Azure Storage. Nazwy muszą zawierać od trzech do 24 znaków i tylko małe litery. Standard_LRS
określa konto ogólnego przeznaczenia, które jest obsługiwane przez funkcje. Wartość --location
jest standardowym regionem świadczenia usługi Azure.
Tworzenie aplikacji funkcji
Uruchom polecenie az functionapp create, aby utworzyć nową aplikację funkcji w środowisku.
az functionapp create --name <APP_NAME> --custom-location <CUSTOM_LOCATION_ID> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD>
W tym przykładzie zastąp <CUSTOM_LOCATION_ID>
element identyfikatorem lokalizacji niestandardowej określonej dla środowiska Kubernetes usługi App Service. Zastąp <STORAGE_NAME>
również nazwą konta użytego w poprzednim kroku, <APP_NAME>
nazwą globalnie unikatową oraz <DOCKER_ID>
<LOGIN_SERVER>
identyfikatorem konta usługi Docker Hub lub serwerem usługi Container Registry. Podczas wdrażania z niestandardowego rejestru kontenerów nazwa obrazu wskazuje adres URL rejestru.
Po pierwszym utworzeniu aplikacji funkcji pobiera on początkowy obraz z usługi Docker Hub.
Ustawianie wymaganych ustawień aplikacji
Uruchom następujące polecenia, aby utworzyć ustawienie aplikacji dla konta magazynu parametry połączenia:
storageConnectionString=$(az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv)
az functionapp config appsettings set --name <app_name> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=$storageConnectionString
Ten kod musi być uruchamiany w usłudze Cloud Shell lub w powłoce Bash na komputerze lokalnym. Zastąp <STORAGE_NAME>
ciąg nazwą konta magazynu i <APP_NAME>
nazwą aplikacji funkcji.
Wywoływanie funkcji na platformie Azure
Ponieważ funkcja używa wyzwalacza HTTP, należy go wywołać, wysyłając żądanie HTTP do jego adresu URL w przeglądarce lub za pomocą narzędzia takiego jak curl.
Skopiuj pełny adres URL wywołania widoczny w danych wyjściowych polecenia publikowania na pasku adresu przeglądarki, dołączając parametr ?name=Functions
zapytania . Przeglądarka powinna wyświetlać podobne dane wyjściowe, jak po uruchomieniu funkcji lokalnie.
Czyszczenie zasobów
Jeśli chcesz kontynuować pracę z funkcją platformy Azure przy użyciu zasobów utworzonych w tym artykule, możesz pozostawić wszystkie te zasoby na miejscu.
Po zakończeniu pracy z wdrożeniem tej aplikacji funkcji usuń grupę AzureFunctionsContainers-rg
zasobów, aby wyczyścić wszystkie zasoby w tej grupie:
az group delete --name AzureFunctionsContainers-rg
Spowoduje to usunięcie tylko zasobów utworzonych w tym artykule. Podstawowe środowisko usługi Azure Arc pozostaje na miejscu.