Praca z kontenerami i usługą Azure Functions

W tym artykule przedstawiono obsługę, którą usługa Azure Functions zapewnia do pracy z konteneryzowanymi aplikacjami funkcji działającymi w środowisku usługi Azure Container Apps. Obsługa hostowania kontenerów aplikacji funkcji w usłudze Container Apps jest obecnie dostępna w wersji zapoznawczej. Aby uzyskać więcej informacji, zobacz Hostowanie usługi Azure Container Apps w usłudze Azure Functions.

W tym artykule przedstawiono obsługę, którą usługa Azure Functions zapewnia do pracy z aplikacjami funkcji działającymi w kontenerach systemu Linux.

Wybierz środowisko hostingu dla aplikacji funkcji konteneryzowanej w górnej części artykułu.

Jeśli chcesz przejść bezpośrednio, w poniższym artykule pokazano, jak utworzyć pierwszą funkcję działającą w kontenerze systemu Linux i wdrożyć obraz z rejestru kontenerów w obsługiwanej usłudze hostingu platformy Azure:

Tworzenie konteneryzowanych aplikacji funkcji

Funkcje ułatwiają wdrażanie i uruchamianie aplikacji funkcji jako kontenerów systemu Linux, które tworzysz i konserwujesz. Usługa Functions obsługuje zestaw obrazów podstawowych specyficznych dla języka, których można używać podczas tworzenia konteneryzowanych aplikacji funkcji.

Ważne

Podczas tworzenia własnych kontenerów należy zachować obraz podstawowy kontenera zaktualizowany do najnowszego obsługiwanego obrazu podstawowego. Obsługiwane obrazy podstawowe dla usługi Azure Functions są specyficzne dla języka i znajdują się w repozytoriach obrazów podstawowych usługi Azure Functions.

Zespół usługi Functions zobowiązuje się do publikowania comiesięcznych aktualizacji dla tych obrazów podstawowych. Regularne aktualizacje obejmują najnowsze aktualizacje wersji pomocniczej i poprawki zabezpieczeń dla środowiska uruchomieniowego i języków usługi Functions. Należy regularnie aktualizować kontener z najnowszego obrazu podstawowego i ponownie wdrożyć zaktualizowaną wersję kontenera.

Pełny przykład tworzenia lokalnej konteneryzowanej aplikacji funkcji z poziomu wiersza polecenia i publikowania obrazu w rejestrze kontenerów można znaleźć w temacie Create a function app in a local container container (Tworzenie aplikacji funkcji w kontenerze lokalnym).

Generowanie pliku Dockerfile

Narzędzia usługi Functions udostępnia opcję platformy Docker, która generuje plik Dockerfile z projektem kodu funkcji. Możesz użyć tego pliku z platformą Docker, aby utworzyć funkcje w kontenerze pochodzącym z poprawnego obrazu podstawowego (języka i wersji).

Sposób tworzenia pliku Dockerfile zależy od sposobu tworzenia projektu.

  • Podczas tworzenia projektu usługi Functions przy użyciu narzędzi Azure Functions Core Tools dołącz --docker opcję podczas uruchamiania func init polecenia, jak w poniższym przykładzie:

    func init --docker
    
  • Możesz również dodać plik Dockerfile do istniejącego projektu, używając --docker-only opcji podczas uruchamiania func init polecenia w istniejącym folderze projektu, jak w poniższym przykładzie:

    func init --docker-only
    

Pełny przykład można znaleźć w temacie Create a function app in a local container (Tworzenie aplikacji funkcji w kontenerze lokalnym).

Tworzenie aplikacji funkcji w kontenerze

Korzystając z pliku Dockerfile wygenerowanego przez narzędzia Core Tools w projekcie kodu, możesz użyć platformy Docker do utworzenia aplikacji funkcji konteneryzowanej na komputerze lokalnym. Następujące docker build polecenie tworzy obraz funkcji konteneryzowanych z projektu w katalogu lokalnym:

docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .

Aby zapoznać się z przykładem tworzenia kontenera, zobacz Kompilowanie obrazu kontenera i weryfikowanie go lokalnie.

Aktualizowanie obrazu w rejestrze

Po wprowadzeniu zmian w projekcie kodu funkcji lub konieczności zaktualizowania do najnowszego obrazu podstawowego należy ponownie skompilować kontener lokalnie i ponownie opublikować zaktualizowany obraz do wybranego rejestru kontenerów. Następujące polecenie ponownie kompiluje obraz z folderu głównego ze zaktualizowanym numerem wersji i wypycha go do rejestru:

az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .

Zastąp <REGISTRY_NAME> element wystąpieniem usługi Container Registry i <LOGIN_SERVER> nazwą serwera logowania.

W tym momencie należy zaktualizować wdrożenie, aby używało nowego obrazu. Poniższy przykład aktualizuje aplikację funkcji, aby korzystała z nowego obrazu:

az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>

W tym przykładzie <IMAGE_NAME> jest pełną nazwą nowego obrazu z wersją. Rejestry prywatne wymagają podania nazwy użytkownika i hasła. Bezpieczne przechowywanie tych poświadczeń.

Należy również rozważyć włączenie ciągłego wdrażania.

Tworzenie witryny Azure Portal przy użyciu kontenerów

Podczas tworzenia aplikacji funkcji w witrynie Azure Portal możesz wdrożyć aplikację funkcji na podstawie obrazu w rejestrze kontenerów. Aby dowiedzieć się, jak utworzyć konteneryzowaną aplikację funkcji w rejestrze kontenerów, zobacz Tworzenie aplikacji funkcji w kontenerze.

Poniższe kroki umożliwiają utworzenie i wdrożenie istniejącej konteneryzowanej aplikacji funkcji z rejestru kontenerów.

  1. W menu witryny Azure Portal lub na stronie głównej wybierz pozycję Utwórz zasób.

  2. Na stronie Nowy wybierz pozycję Aplikacja funkcji obliczeniowej>.

  3. Na stronie Podstawowe użyj ustawień aplikacji funkcji, jak określono w poniższej tabeli:

    Ustawienie Sugerowana wartość opis
    Subskrypcja Twoja subskrypcja Subskrypcja, w której tworzysz aplikację funkcji.
    Grupa zasobów myResourceGroup Nazwa nowej grupy zasobów, w której tworzysz aplikację funkcji. Należy utworzyć grupę zasobów, ponieważ istnieją znane ograniczenia podczas tworzenia nowych aplikacji funkcji w istniejącej grupie zasobów.
    Nazwa aplikacji funkcji Unikatowa nazwa* Nazwa identyfikująca nową aplikację funkcji. Prawidłowe znaki to a-z (bez uwzględniania wielkości liter), 0-9i -.
    Czy chcesz wdrożyć kod lub obraz kontenera? Obraz kontenera Wdrażanie konteneryzowanej aplikacji funkcji z rejestru. Aby utworzyć aplikację funkcji w rejestrze, zobacz Tworzenie aplikacji funkcji w kontenerze lokalnym.
    Region Preferowany region Wybierz region, który znajduje się blisko Ciebie lub w pobliżu innych usług, do których mogą uzyskiwać dostęp funkcje.

*Nazwa aplikacji musi być globalnie unikatowa we wszystkich aplikacjach hostowanych w usłudze Azure Functions.

  1. W obszarze Opcje i plany hostingu wybierz pozycję Funkcje Premium.

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

    Spowoduje to utworzenie aplikacji funkcji hostowanej przez usługę Azure Functions w planie Premium, która obsługuje dynamiczne skalowanie. Możesz również uruchomić plan usługi App Service, ale w tym rodzaju dedykowanym planie musisz zarządzać skalowaniem aplikacji funkcji.

*Nazwa aplikacji musi być unikatowa w środowisku usługi Azure Container Apps. Nie wszystkie regiony są obsługiwane w wersji zapoznawczej. Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące hostowania usługi Container Apps.

  1. W obszarze Opcje i plany hostingu wybierz pozycję Plan środowiska usługi Azure Container Apps.

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

    Spowoduje to utworzenie nowego zasobu środowiska Azure Container Apps Environment do hostowania kontenera aplikacji funkcji. Aby uzyskać więcej informacji, zobacz Hostowanie usługi Azure Container Apps w usłudze Azure Functions.

    Domyślnie środowisko jest tworzone w planie Zużycie bez nadmiarowości strefy, aby zminimalizować koszty. Możesz również wybrać istniejące środowisko usługi Container Apps. Aby dowiedzieć się więcej o środowiskach, zobacz Środowiska usługi Azure Container Apps.

  1. Zaakceptuj domyślne opcje tworzenia nowego konta magazynu na karcie Magazyn i nowe wystąpienie usługi Application Insight na karcie Monitorowanie. Możesz również użyć istniejącego konta magazynu lub wystąpienia aplikacji Szczegółowe informacje.
  1. Wybierz kartę Wdrożenie i usuń zaznaczenie pozycji Użyj obrazu Szybkiego startu. Jeśli tego nie zrobisz, aplikacja funkcji zostanie wdrożona z obrazu podstawowego dla języka aplikacji funkcji.

  2. Wybierz typ obrazu, publiczny lub prywatny. Wybierz pozycję Prywatny , jeśli używasz usługi Azure Container Registry lub innego rejestru prywatnego. Podaj nazwę obrazu, w tym prefiks rejestru. Jeśli używasz rejestru prywatnego, podaj poświadczenia uwierzytelniania rejestru obrazów.

  3. Wybierz pozycję Przejrzyj i utwórz , aby przejrzeć wybrane opcje konfiguracji aplikacji.

  4. Na stronie Przeglądanie i tworzenie przejrzyj ustawienia, a następnie wybierz pozycję Utwórz, aby aprowizować aplikację funkcji i wdrożyć obraz kontenera z rejestru.

  1. Wybierz pozycję Przejrzyj i utwórz , aby przejrzeć wybrane opcje konfiguracji aplikacji.

  2. Na stronie Przeglądanie i tworzenie przejrzyj ustawienia, a następnie wybierz pozycję Utwórz, aby aprowizować aplikację funkcji przy użyciu domyślnego obrazu podstawowego.

  3. Po utworzeniu zasobu aplikacji funkcji wybierz pozycję Przejdź do zasobu, a na stronie aplikacji funkcji wybierz pozycję Centrum wdrażania.

  4. W centrum wdrażania możesz połączyć rejestr kontenerów jako źródło obrazu. Można również włączyć funkcję GitHub Actions lub Azure Pipelines w celu bardziej niezawodnego ciągłego wdrażania aktualizacji kontenera w rejestrze.

Praca z obrazami w usłudze Azure Functions

Po wdrożeniu kontenera aplikacji funkcji z rejestru usługa Functions przechowuje informacje o obrazie źródłowym. Użyj następujących poleceń, aby pobrać dane dotyczące obrazu lub zmienić używany obraz wdrożenia:

Profile obciążeń usługi Container Apps

Profile obciążeń to funkcja usługi Container Apps, która umożliwia lepszą kontrolę nad zasobami wdrażania. Usługa Azure Functions w usłudze Azure Container Apps obsługuje również profile obciążeń. Aby uzyskać więcej informacji, zobacz Profile obciążeń w usłudze Azure Container Apps.

Profile obciążeń można tworzyć i zarządzać nimi przy użyciu interfejsu wiersza polecenia platformy Azure lub w witrynie Azure Portal.

Profile obciążeń są włączane podczas tworzenia środowiska aplikacji kontenera. Aby zapoznać się z przykładem, zobacz Tworzenie aplikacji kontenera w profilu.

Profile można dodawać, edytować i usuwać w swoim środowisku. Aby zapoznać się z przykładem, zobacz Dodawanie profilów.

Podczas tworzenia konteneryzowanej aplikacji funkcji w środowisku z włączonymi profilami obciążeń należy również określić profil, w którym ma zostać uruchomione. W tym celu należy użyć --workload-profile-name parametru az functionapp create polecenia, tak jak w tym przykładzie:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI>  --workload-profile-name  PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

W poleceniu az functionapp create--environment parametr określa środowisko Container Apps, a --image parametr określa obraz do użycia dla aplikacji funkcji. W tym przykładzie zastąp <STORAGE_NAME> ciąg nazwą użytą w poprzedniej sekcji dla konta magazynu. Zastąp również <APP_NAME> globalnie unikatową nazwą odpowiednią dla Ciebie.

Zastąp <CPU_COUNT> również żądaną liczbą wirtualnych procesorów CPU z maksymalnie 0,5 maksymalnie dozwolonym przez profil. W polu <MEMORY_SIZE>wybierz dedykowaną ilość pamięci z 1 GB do maksymalnej dozwolonej przez profil.

Ustawienia aplikacji

Usługa Azure Functions umożliwia pracę z ustawieniami aplikacji dla konteneryzowanych aplikacji funkcji w standardowy sposób. Aby uzyskać więcej informacji, zobacz Używanie ustawień aplikacji.

Włączanie ciągłego wdrażania na platformie Azure

Ważne

Wdrożenie oparte na elementach webhook nie jest obecnie obsługiwane podczas uruchamiania kontenera w planie Elastic Premium. Jeśli musisz użyć metody ciągłego wdrażania opisanej w tej sekcji, zamiast tego wdróż kontener w planie usługi App Service. W przypadku uruchamiania w ramach planu Elastic Premium należy ręcznie ponownie uruchomić aplikację za każdym razem, gdy wprowadzisz aktualizacje do kontenera w repozytorium.

Usługa Azure Functions umożliwia automatyczne aktualizowanie wdrożenia obrazu przy każdej aktualizacji obrazu w rejestrze.

  1. Użyj następującego polecenia, aby włączyć ciągłe wdrażanie i uzyskać adres URL elementu webhook:

    az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg
    

    Polecenie az functionapp deployment container config umożliwia ciągłe wdrażanie i zwraca adres URL elementu webhook wdrożenia. Ten adres URL można pobrać w dowolnym późniejszym czasie za pomocą az functionapp deployment container show-cd-url polecenia .

    Tak jak poprzednio, zastąp <APP_NAME> ciąg nazwą aplikacji funkcji.

  2. Skopiuj adres URL elementu webhook wdrożenia do schowka.

  3. Otwórz usługę Docker Hub, zaloguj się i wybierz pozycję Repozytoria na pasku nawigacyjnym. Znajdź i wybierz obraz, wybierz kartę Elementy webhook , określ nazwę elementu webhook, wklej adres URL w adresie URL elementu webhook, a następnie wybierz pozycję Utwórz.

    Screenshot showing how to add the webhook in your Docker Hub window.

  4. Po ustawieniu elementu webhook usługa Azure Functions ponownie wdraża obraz za każdym razem, gdy zaktualizujesz go w usłudze Docker Hub.

Włączanie połączeń SSH

Protokół SSH umożliwia bezpieczną komunikację między kontenerem i klientem. Po włączeniu protokołu SSH możesz nawiązać połączenie z kontenerem przy użyciu narzędzi zaawansowanych usługi App Service (Kudu). Aby łatwo nawiązać połączenie z kontenerem przy użyciu protokołu SSH, usługa Azure Functions udostępnia obraz podstawowy, który ma już włączony protokół SSH. Wystarczy edytować plik Dockerfile, a następnie ponownie skompilować i wdrożyć obraz. Następnie możesz nawiązać połączenie z kontenerem za pomocą narzędzi zaawansowanych (Kudu).

  1. W pliku Dockerfile dołącz ciąg -appservice do obrazu podstawowego w instrukcji FROM , jak w poniższym przykładzie:

    FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
    

    W tym przykładzie użyto wersji podstawowej z obsługą protokołu SSH Node.js w wersji 18. Odwiedź repozytoria obrazów podstawowych usługi Azure Functions, aby sprawdzić, czy używasz najnowszej wersji obrazu podstawowego z obsługą protokołu SSH.

  2. Skompiluj docker build obraz przy użyciu polecenia , zastąp element <DOCKER_ID> identyfikatorem konta usługi Docker Hub, jak w poniższym przykładzie.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Wypchnij zaktualizowany obraz do usługi Docker Hub, co powinno zająć znacznie mniej czasu niż pierwsze wypychanie. Teraz należy przekazać tylko zaktualizowane segmenty obrazu.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Usługa Azure Functions automatycznie ponownie wdraża obraz w aplikacji funkcji; proces odbywa się w mniej niż minutę.

  5. W przeglądarce otwórz https://<app_name>.scm.azurewebsites.net/ i zastąp <app_name> unikatową nazwą. Ten adres URL to punkt końcowy narzędzi zaawansowanych (Kudu) dla kontenera aplikacji funkcji.

  6. Zaloguj się do konta platformy Azure, a następnie wybierz protokół SSH , aby nawiązać połączenie z kontenerem. Połączenie może potrwać kilka chwil, jeśli platforma Azure nadal aktualizuje obraz kontenera.

  7. Po nawiązaniu połączenia z kontenerem uruchom top polecenie , aby wyświetlić aktualnie uruchomione procesy.

    Screenshot that shows Linux top command running in an SSH session.

Następne kroki

Następujące artykuły zawierają więcej informacji na temat wdrażania kontenerów i zarządzania nimi: