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:

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 -DjavaVersionparametru , 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 klawisz 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" --authlevel anonymous

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" --authlevel anonymous

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=Functionsstrony . Przeglądarka musi wyświetlić komunikat "hello", który zwraca Functionswartość , podaną do parametru name zapytania.

Naciśnij klawisze 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 azurefunctionsimagei 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/HttpExampleadresu , 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=Functionsadresu , 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 klawisze 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.

  1. Użyj następującego polecenia, aby zalogować się do wystąpienia rejestru:

    az acr login --name <REGISTRY_NAME>
    

    W poprzednim poleceniu zastąp <REGISTRY_NAME> ciąg nazwą wystąpienia usługi Container Registry.

  2. Użyj następującego 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.

  3. Użyj następującego polecenia, aby wypchnąć kontener do wystąpienia rejestru:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    
  4. Użyj następującego polecenia, aby włączyć wbudowane konto administratora, aby usługa Functions mogła nawiązać połączenie z rejestrem przy użyciu nazwy użytkownika i hasła:

    az acr update -n <REGISTRY_NAME> --admin-enabled true
    
  1. Użyj następującego polecenia, aby pobrać nazwę użytkownika i hasło administratora, które funkcje muszą połączyć się z rejestrem:

    az acr credential show -n <REGISTRY_NAME> --query "[username, passwords[0].value]" -o tsv
    

    Ważne

    Nazwa użytkownika i hasło konta administratora są ważnymi poświadczeniami. Pamiętaj, aby przechowywać je bezpiecznie i nigdy nie w dostępnej lokalizacji, takiej jak repozytorium publiczne.

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=Functionszapytania . Przeglądarka powinna wyświetlać podobne dane wyjściowe, jak po uruchomieniu funkcji lokalnie.

The output of the function run on Azure in a browser

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.

Następne kroki