Práce s kontejnery a Azure Functions

Tento článek ukazuje podporu, kterou služba Azure Functions poskytuje pro práci s kontejnerizovanými aplikacemi funkcí spuštěnými v prostředí Azure Container Apps. Podpora hostování kontejnerů aplikací funkcí v Container Apps je aktuálně ve verzi Preview. Další informace najdete v tématu Azure Container Apps hostování služby Azure Functions.

Tento článek ukazuje podporu, kterou Azure Functions poskytuje pro práci s aplikacemi funkcí běžícími v kontejnerech Linuxu.

V horní části článku zvolte hostitelské prostředí pro vaši kontejnerizovanou aplikaci funkcí.

Pokud chcete rovnou přejít, v následujícím článku se dozvíte, jak vytvořit první funkci spuštěnou v kontejneru Linuxu a nasadit image z registru kontejneru do podporované hostitelské služby Azure:

Vytváření kontejnerizovaných aplikací funkcí

Funkce usnadňují nasazení a spouštění aplikací funkcí jako linuxových kontejnerů, které vytváříte a udržujete. Funkce udržuje sadu základních imagí specifických pro jazyk, které můžete použít při vytváření kontejnerizovaných aplikací funkcí.

Důležité

Při vytváření vlastních kontejnerů musíte zachovat základní image kontejneru aktualizovanou na nejnovější podporovanou základní image. Podporované základní image pro Azure Functions jsou specifické pro jazyk a nacházejí se v základních imagích Azure Functions.

Tým Functions se zavazuje publikovat měsíční aktualizace těchto základních imagí. Mezi běžné aktualizace patří nejnovější aktualizace podverze a opravy zabezpečení pro modul runtime i jazyky Functions. Kontejner byste měli pravidelně aktualizovat z nejnovější základní image a znovu nasadit aktualizovanou verzi kontejneru.

Úplný příklad vytvoření místní kontejnerizované aplikace funkcí z příkazového řádku a publikování image do registru kontejneru najdete v tématu Vytvoření aplikace funkcí v místním kontejneru.

Vygenerování souboru Dockerfile

Nástroje Functions poskytují možnost Dockeru, která vygeneruje soubor Dockerfile s projektem kódu funkcí. Tento soubor s Dockerem můžete použít k vytvoření funkcí v kontejneru, který je odvozen od správné základní image (jazyka a verze).

Způsob vytvoření souboru Dockerfile závisí na tom, jak vytvoříte projekt.

  • Když vytvoříte projekt Functions pomocí nástrojů Azure Functions Core Tools, při spuštění func init příkazu zahrňte --docker možnost, jak je znázorněno v následujícím příkladu:

    func init --docker
    
  • Soubor Dockerfile můžete také přidat do existujícího projektu pomocí --docker-only možnosti při spuštění func init příkazu v existující složce projektu, jak je znázorněno v následujícím příkladu:

    func init --docker-only
    

Úplný příklad najdete v tématu Vytvoření aplikace funkcí v místním kontejneru.

Vytvoření aplikace funkcí v kontejneru

Pomocí souboru Dockerfile vygenerovaného nástroji Core Tools v projektu kódu můžete pomocí Dockeru vytvořit kontejnerizovanou aplikaci funkcí na místním počítači. Následující docker build příkaz vytvoří image kontejnerizovaných funkcí z projektu v místním adresáři:

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

Příklad vytvoření kontejneru najdete v tématu Sestavení image kontejneru a místní ověření.

Aktualizace image v registru

Když provedete změny projektu kódu funkcí nebo potřebujete aktualizovat nejnovější základní image, musíte kontejner znovu sestavit místně a znovu publikovat aktualizovanou image do zvoleného registru kontejneru. Následující příkaz znovu sestaví image z kořenové složky s aktualizovaným číslem verze a odešle ji do registru:

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

Nahraďte <REGISTRY_NAME> instanci služby Container Registry a <LOGIN_SERVER> názvem přihlašovacího serveru.

V tomto okamžiku je potřeba aktualizovat nasazení tak, aby používalo novou image. Následující příklad aktualizuje aplikaci funkcí tak, aby používala novou image:

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

V tomto příkladu <IMAGE_NAME> je úplný název nové image s verzí. Soukromé registry vyžadují, abyste zadali uživatelské jméno a heslo. Bezpečně uložte tyto přihlašovací údaje.

Měli byste také zvážit povolení průběžného nasazování.

Vytvoření webu Azure Portal pomocí kontejnerů

Když vytvoříte aplikaci funkcí na webu Azure Portal, můžete ji nasadit z image v registru kontejneru. Informace o tom, jak vytvořit kontejnerizovanou aplikaci funkcí v registru kontejneru, najdete v tématu Vytvoření aplikace funkcí v kontejneru.

Následující kroky vytvoří a nasadí existující kontejnerizovanou aplikaci funkcí z registru kontejneru.

  1. V nabídce webu Azure Portal nebo na domovské stránce vyberte Vytvořit prostředek.

  2. Na stránce Nový vyberte Aplikaci výpočetních>funkcí.

  3. Na stránce Základy použijte nastavení aplikace funkcí, jak je uvedeno v následující tabulce:

    Nastavení Navrhovaná hodnota Popis
    Předplatné Vaše předplatné Předplatné, ve kterém vytvoříte aplikaci funkcí.
    Skupina prostředků myResourceGroup Název nové skupiny prostředků, ve které vytvoříte aplikaci funkcí. Skupinu prostředků byste měli vytvořit, protože při vytváření nových aplikací funkcí v existující skupině prostředků existují známá omezení.
    Název aplikace funkcí Jedinečný název* Název identifikující novou aplikaci funkcí. Platné znaky jsou a-z (bez rozlišování malých a velkých písmen), 0-9 a -.
    Chcete nasadit kód nebo image kontejneru? Image kontejneru Nasaďte kontejnerizovanou aplikaci funkcí z registru. Pokud chcete vytvořit aplikaci funkcí v registru, přečtěte si téma Vytvoření aplikace funkcí v místním kontejneru.
    Oblast Upřednostňovaná oblast Vyberte oblast, která je blízko vás nebo blízko jiných služeb, ke kterým mají vaše funkce přístup.

*Název aplikace musí být globálně jedinečný mezi všemi hostovanými aplikacemi Azure Functions.

  1. V možnostech hostování a plánech zvolte Functions Premium.

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

    Tím se vytvoří aplikace funkcí hostovaná službou Azure Functions v plánu Premium, která podporuje dynamické škálování. Můžete se také rozhodnout spustit v plánu služby App Service, ale v tomto druhu vyhrazeného plánu musíte spravovat škálování aplikace funkcí.

*Název aplikace musí být jedinečný v rámci prostředí Azure Container Apps. Ve verzi Preview nejsou podporované všechny oblasti. Další informace najdete v tématu Důležité informace o hostování kontejnerových aplikací.

  1. V možnostech hostování a plánech zvolte plán prostředí Azure Container Apps.

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

    Tím se vytvoří nový prostředek prostředí Azure Container Apps pro hostování kontejneru aplikace funkcí. Další informace najdete v tématu Azure Container Apps hostování služby Azure Functions.

    Ve výchozím nastavení se prostředí vytváří v plánu Consumption bez redundance zón, aby se minimalizovaly náklady. Můžete také zvolit existující prostředí Container Apps. Další informace o prostředích najdete v tématu Prostředí Azure Container Apps.

  1. Přijměte výchozí možnosti vytvoření nového účtu úložiště na kartě Úložiště a nové instance Application Insight na kartě Monitorování. Můžete také použít existující účet úložiště nebo instanci Přehledy aplikace.
  1. Vyberte kartu Nasazení a zrušte výběr image Použít rychlý start. Pokud to neuděláte, aplikace funkcí se nasadí ze základní image jazyka vaší aplikace funkcí.

  2. Zvolte typ image, veřejný nebo soukromý. Pokud používáte Službu Azure Container Registry nebo jiný privátní registr, zvolte privátní . Zadejte název image včetně předpony registru. Pokud používáte privátní registr, zadejte přihlašovací údaje pro ověřování registru image.

  3. Výběrem možnosti Zkontrolovat a vytvořit zkontrolujte výběry konfigurace aplikace.

  4. Na stránce Zkontrolovat a vytvořit zkontrolujte nastavení a pak výběrem možnosti Vytvořit zřídíte aplikaci funkcí a nasadíte image kontejneru z registru.

  1. Výběrem možnosti Zkontrolovat a vytvořit zkontrolujte výběry konfigurace aplikace.

  2. Na stránce Zkontrolovat a vytvořit zkontrolujte nastavení a pak vyberte Vytvořit, abyste aplikaci funkcí zřídili pomocí výchozí základní image.

  3. Po vytvoření prostředku aplikace funkcí vyberte Přejít k prostředku a na stránce aplikace funkcí vyberte Centrum nasazení.

  4. V Centru nasazení můžete registr kontejneru připojit jako zdroj image. Můžete také povolit GitHub Actions nebo Azure Pipelines pro robustnější průběžné nasazování aktualizací do kontejneru v registru.

Práce s obrázky ve službě Azure Functions

Když je kontejner vaší aplikace funkcí nasazený z registru, služba Functions uchovává informace o zdrojové imagi. K získání dat o imagi nebo změně použité image nasazení použijte následující příkazy:

Profily úloh Container Apps

Profily úloh jsou funkce Container Apps, které vám umožňují lépe řídit prostředky nasazení. Azure Functions v Azure Container Apps také podporuje profily úloh. Další informace najdete v tématu Profily úloh v Azure Container Apps.

Profily úloh můžete vytvářet a spravovat pomocí Azure CLI nebo na webu Azure Portal.

Profily úloh povolíte při vytváření prostředí kontejnerové aplikace. Příklad najdete v tématu Vytvoření aplikace kontejneru v profilu.

Profily můžete přidávat, upravovat a odstraňovat ve svém prostředí. Příklad najdete v tématu Přidání profilů.

Když vytvoříte kontejnerizovanou aplikaci funkcí v prostředí s povolenými profily úloh, měli byste také zadat profil, ve kterém se má spustit. Provedete to pomocí --workload-profile-name parametru příkazu, například v tomto příkladu az functionapp create :

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> 

az functionapp create V příkazu parametr určuje prostředí Container Apps a --image parametr určuje image, --environment která se má použít pro aplikaci funkcí. V tomto příkladu nahraďte <STORAGE_NAME> názvem, který jste použili v předchozí části účtu úložiště. Nahraďte <APP_NAME> také globálně jedinečný název, který je pro vás vhodný.

Nahraďte <CPU_COUNT> také požadovaný počet virtuálních procesorů minimálně 0,5 až do maximálního povoleného počtu virtuálních procesorů. V <MEMORY_SIZE>případě zvolte velikost vyhrazené paměti od 1 GB až do maximálního povoleného profilu.

Nastavení aplikace

Azure Functions umožňuje pracovat s nastavením aplikace pro kontejnerizované aplikace funkcí standardním způsobem. Další informace naleznete v tématu Použití nastavení aplikace.

Povolení průběžného nasazování do Azure

Důležité

Nasazení založené na webhooku se v současné době nepodporuje při spouštění kontejneru v plánu Elastic Premium. Pokud potřebujete použít metodu průběžného nasazování popsanou v této části, místo toho nasaďte kontejner do plánu služby App Service. Při spuštění v plánu Elastic Premium je potřeba ručně restartovat aplikaci pokaždé, když v úložišti provedete aktualizace kontejneru.

Službu Azure Functions můžete povolit, aby automaticky aktualizovala nasazení image při každé aktualizaci image v registru.

  1. Pomocí následujícího příkazu povolte průběžné nasazování a získejte adresu URL webhooku:

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

    Příkaz az functionapp deployment container config povolí průběžné nasazování a vrátí adresu URL webhooku nasazení. Tuto adresu URL můžete později načíst pomocí az functionapp deployment container show-cd-url příkazu.

    Stejně jako předtím nahraďte <APP_NAME> názvem vaší aplikace funkcí.

  2. Zkopírujte adresu URL webhooku nasazení do schránky.

  3. Otevřete Docker Hub, přihlaste se a na navigačním panelu vyberte Úložiště . Vyhledejte a vyberte obrázek, vyberte kartu Webhooky , zadejte název webhooku, vložte adresu URL do adresy URL webhooku a pak vyberte Vytvořit.

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

  4. Když máte nastavený webhook, Azure Functions vaši image znovu nasadí při každé aktualizaci v Docker Hubu.

Povolení připojení SSH

SSH umožňuje zabezpečenou komunikaci mezi kontejnerem a klientem. S povoleným SSH se můžete ke kontejneru připojit pomocí rozšířených nástrojů App Service (Kudu). Pro snadné připojení ke kontejneru pomocí SSH poskytuje Azure Functions základní image, která už má povolený SSH. Soubor Dockerfile stačí upravit, pak znovu sestavit a znovu nasadit image. K kontejneru se pak můžete připojit prostřednictvím rozšířených nástrojů (Kudu).

  1. V souboru Dockerfile připojte FROMřetězec -appservice k základní imagi v instrukci, jak je znázorněno v následujícím příkladu:

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

    Tento příklad používá verzi základní image s podporou SSH Node.js verze 18. Navštivte úložiště základních imagí Azure Functions a ověřte, že používáte nejnovější verzi základní image s podporou SSH.

  2. Znovu sestavte image pomocí docker build příkazu, nahraďte <DOCKER_ID> ID účtu Docker Hubu, jak je znázorněno v následujícím příkladu.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Nasdílejte aktualizovanou image do Docker Hubu, což by mělo trvat výrazně kratší dobu než první nasdílení změn. Teď je potřeba nahrát jenom aktualizované segmenty obrázku.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Azure Functions automaticky nasadí image do vaší aplikace functions; proces probíhá za méně než minutu.

  5. V prohlížeči otevřete https://<app_name>.scm.azurewebsites.net/ a nahraďte <app_name> jedinečným názvem. Tato adresa URL je koncový bod Advanced Tools (Kudu) pro kontejner vaší aplikace funkcí.

  6. Přihlaste se ke svému účtu Azure a vyberte SSH , abyste vytvořili připojení ke kontejneru. Připojení může chvíli trvat, pokud Azure stále aktualizuje image kontejneru.

  7. Po navázání připojení s vaším kontejnerem spusťte top příkaz, který zobrazí aktuálně spuštěné procesy.

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

Další kroky

Další informace o nasazení a správě kontejnerů najdete v následujících článcích: