Praca z kontenerami i Azure Functions

W tym artykule przedstawiono obsługę zapewnianą przez Azure Functions pracę z aplikacjami funkcji działającymi w kontenerach systemu Linux. Wybierz środowisko hostingu dla konteneryzowanej aplikacji funkcji 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

Usługa Functions obsługuje zestaw obrazów podstawowych specyficznych dla środowiska lanuage , których można użyć do generowania aplikacji funkcji konteneryzowanych. Podczas tworzenia projektu usługi Functions przy użyciu narzędzi Azure Functions Core Tools i dołączania --docker opcji narzędzia Core Tools również generuje element . Plik Dockerfile używany do tworzenia kontenera na podstawie poprawnego obrazu podstawowego.

Aktualizowanie obrazu w rejestrze

Po wprowadzeniu zmian w projekcie kodu funkcji 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 przy użyciu zaktualizowanego numeru 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.

Na tym etapie 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łna nazwa 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.

Praca z obrazami w 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:

Ustawienia aplikacji

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

Możesz włączyć Azure Functions, aby automatycznie aktualizować wdrożenie 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 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.

    Zrzut ekranu przedstawiający sposób dodawania elementu webhook w oknie Docker Hub.

  4. Po ustawieniu elementu webhook Azure Functions ponownie wdrożyć obraz przy każdej aktualizacji w 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 App Service Advanced Tools (Kudu). Aby łatwo nawiązać połączenie z kontenerem przy użyciu protokołu SSH, 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 FROM instrukcji, 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ź Azure Functions repozytoria obrazu podstawowego, aby sprawdzić, czy używasz najnowszej wersji obrazu podstawowego z obsługą protokołu SSH.

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

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

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. 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/ plik 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. Nawiązywanie połączenia 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.

    Zrzut ekranu przedstawiający najważniejsze polecenie systemu Linux uruchomione w sesji SSH.

Następne kroki

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