Tworzenie aplikacji funkcji w lokalnym kontenerze systemu Linux

W tym artykule pokazano, jak za pomocą narzędzi Azure Functions Core utworzyć pierwszą funkcję w kontenerze systemu Linux na komputerze lokalnym, zweryfikować funkcję lokalnie, a następnie opublikować konteneryzowaną funkcję w rejestrze kontenerów. Z poziomu rejestru kontenerów można łatwo wdrożyć funkcje konteneryzowane na platformie Azure.

Pełny przykład wdrażania konteneryzowanych funkcji na platformie Azure, które obejmują kroki opisane w tym artykule, zobacz jeden z następujących artykułów:

Aplikację funkcji można również utworzyć w witrynie Azure Portal przy użyciu istniejącej konteneryzowanej aplikacji funkcji z rejestru kontenerów. Aby uzyskać więcej informacji, zobacz Tworzenie w witrynie Azure Portal przy użyciu kontenerów.

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.

Następne kroki