Tworzenie pierwszej konteneryzowanej usługi Azure Functions

W tym artykule utworzysz aplikację funkcji działającą w kontenerze systemu Linux i wdrożysz ją w usłudze Azure Functions.

Wdrożenie kodu funkcji w usłudze Azure Functions w kontenerze wymaga hostingu planu Premium lub planu dedykowanego (App Service). Ukończenie tego artykułu wiąże się z kosztami kilku dolarów amerykańskich na koncie platformy Azure, które można zminimalizować, czyszcząc zasoby po zakończeniu pracy.

Inne opcje wdrażania kontenera aplikacji funkcji na platformie Azure obejmują:

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 pomocniczych zasobów platformy Azure dla funkcji

Przed wdrożeniem kontenera na platformie Azure należy utworzyć trzy zasoby:

  • Grupa zasobów, która jest kontenerem logicznym dla powiązanych zasobów.
  • Konto magazynu, które służy do obsługi stanu i innych informacji o funkcjach.
  • Aplikacja funkcji, która udostępnia środowisko do wykonywania kodu funkcji. Aplikacja funkcji mapuje na lokalny projekt funkcji i umożliwia grupowanie funkcji jako jednostki logicznej w celu łatwiejszego zarządzania, wdrażania i udostępniania zasobów.

Użyj następujących poleceń, aby utworzyć te elementy. Obsługiwane są zarówno interfejs wiersza polecenia platformy Azure, jak i program PowerShell. Aby utworzyć zasoby platformy Azure przy użyciu programu Azure PowerShell, potrzebny jest również moduł Az programu PowerShell w wersji 5.9.0 lub nowszej.

  1. Jeśli jeszcze tego nie zrobiono, zaloguj się do platformy Azure.

    az login
    

    Polecenie az login powoduje zalogowanie cię do konta platformy Azure.

  2. Utwórz grupę zasobów o nazwie AzureFunctionsContainers-rg w wybranym regionie.

    az group create --name AzureFunctionsContainers-rg --location <REGION>
    

    Polecenie az group create tworzy grupę zasobów. W powyższym poleceniu zastąp ciąg <REGION> regionem w pobliżu, używając dostępnego kodu regionu zwróconego z polecenia az account list-locations .

  3. Utwórz konto magazynu ogólnego przeznaczenia w grupie zasobów i regionie.

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
    

    Polecenie az storage account create tworzy konto magazynu.

    W poprzednim przykładzie zastąp <STORAGE_NAME> ciąg nazwą odpowiednią dla Ciebie i unikatową w usłudze Azure Storage. Nazwy magazynu muszą zawierać od 3 do 24 znaków i tylko małe litery. Standard_LRS określa konto ogólnego przeznaczenia obsługiwane przez funkcje.

  4. Użyj polecenia , aby utworzyć plan Premium dla usługi Azure Functions o nazwie myPremiumPlan w warstwie cenowej Elastic Premium 1 (--sku EP1), w <REGION>kontenerze systemu i linux (--is-linux).

    az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
    

    W tym miejscu użyjemy planu Premium, który może być skalowany zgodnie z potrzebami. Aby uzyskać więcej informacji na temat hostingu, zobacz Porównanie planów hostingu usługi Azure Functions. Aby uzyskać więcej informacji na temat sposobu obliczania kosztów, zobacz stronę cennika usługi Functions.

    Polecenie tworzy również skojarzone wystąpienie aplikacja systemu Azure Szczegółowe informacje w tej samej grupie zasobów, za pomocą której można monitorować aplikację funkcji i wyświetlać dzienniki. Aby uzyskać więcej informacji, zobacz Monitorowanie usługi Azure Functions. Wystąpienie nie wiąże się z żadnymi kosztami do momentu jego aktywowania.

Tworzenie i konfigurowanie aplikacji funkcji na platformie Azure przy użyciu obrazu

Aplikacja funkcji na platformie Azure zarządza wykonywaniem funkcji w planie hostingu usługi Azure Functions. W tej sekcji użyjesz zasobów platformy Azure z poprzedniej sekcji, aby utworzyć aplikację funkcji na podstawie obrazu w rejestrze kontenerów i skonfigurować ją przy użyciu parametry połączenia do usługi Azure Storage.

  1. Utwórz aplikację funkcji przy użyciu następującego polecenia, w zależności od rejestru kontenerów:

    az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 
    

    W tym przykładzie zastąp <STORAGE_NAME> ciąg nazwą użytą w poprzedniej sekcji dla konta magazynu. Zastąp <APP_NAME> również globalnie unikatową nazwą odpowiednią dla Ciebie i <DOCKER_ID> lub <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. Możesz również włączyć ciągłe wdrażanie na platformie Azure z rejestru kontenerów.

    Napiwek

    Możesz użyć DisableColor ustawienia w pliku host.json , aby zapobiec zapisywaniu znaków kontrolek ANSI w dziennikach kontenera.

  2. Użyj następującego polecenia, aby uzyskać parametry połączenia dla utworzonego konta magazynu:

    az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
    

    Parametry połączenia dla konta magazynu jest zwracany za pomocą az storage account show-connection-string polecenia .

    Zastąp <STORAGE_NAME> ciąg nazwą utworzonego wcześniej konta magazynu.

  3. Użyj następującego polecenia, aby dodać ustawienie do aplikacji funkcji:

    az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
    

    Polecenie az functionapp config appsettings set tworzy ustawienie.

    W tym poleceniu zastąp <APP_NAME> ciąg nazwą aplikacji funkcji i <CONNECTION_STRING> parametry połączenia z poprzedniego kroku. Połączenie powinno być długimi zakodowanymi parametrami rozpoczynającymi się od DefaultEndpointProtocol=.

  4. Funkcja może teraz używać tej parametry połączenia w celu uzyskania dostępu do konta magazynu.

Weryfikowanie funkcji na platformie Azure

Obraz wdrożony w aplikacji funkcji na platformie Azure umożliwia teraz wywoływanie funkcji za pośrednictwem żądań HTTP.

  1. Uruchom następujące az functionapp function show polecenie, aby uzyskać adres URL nowej funkcji:

    az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate 
    

    Zastąp <APP_NAME> ciąg nazwą aplikacji funkcji.

  1. Użyj właśnie uzyskanego HttpExample adresu URL, aby wywołać punkt końcowy funkcji, dołączając ciąg ?name=Functionszapytania .
  1. Użyj właśnie uzyskanego HttpExample adresu URL, aby wywołać punkt końcowy funkcji.

Po przejściu do tego adresu URL przeglądarka musi wyświetlać podobne dane wyjściowe, jak podczas lokalnego uruchamiania funkcji.

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. Ponieważ utworzono plan Premium dla usługi Azure Functions, poniesiesz jeden lub dwa USD dziennie w kosztach bieżących.

Aby uniknąć bieżących kosztów, usuń grupę AzureFunctionsContainers-rg zasobów, aby wyczyścić wszystkie zasoby w tej grupie:

az group delete --name AzureFunctionsContainers-rg

Następne kroki