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. 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 funkcí 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 existující nasazení tak, aby používalo novou image. Aplikaci funkcí můžete aktualizovat tak, aby používala novou image buď pomocí Azure CLI, nebo na webu Azure Portal:

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. V části Vybrat možnost hostování zvolte Vybrat plán>Premium.

    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í.

  4. 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.
    Plán Linuxu Nový plán (výchozí) Vytvoří nový plán Premium pro hostování vaší aplikace. Můžete také zvolit existující plán Premium.
    Cenový plán Elastic Premium EP1 EP1 je cenově dostupný plán. Pokud potřebujete, můžete zvolit větší plán.
    Redundance zón Zakázáno Tuto funkci nepotřebujete v neprodukční aplikaci.

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

  5. 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 Application Insights.

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

  7. 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.

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

  9. 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.

Vytvoření webu Azure Portal pomocí kontejnerů

Když vytvoříte aplikaci funkcí hostované v Container Apps 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. V části Vybrat možnost hostování zvolte Prostředí>Container Apps Select.

  4. 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 -.
    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 jedinečný v rámci prostředí Azure Container Apps.

  5. Na stránce Základy přijměte navrhované nové prostředí pro prostředí Azure Container Apps. Aby se minimalizovaly náklady, vytvoří se nové výchozí prostředí ve službě Consumption + Dedicated s výchozím profilem úlohy a bez redundance zóny. Další informace najdete v tématu Azure Container Apps hostování služby Azure Functions.

    Můžete také použít existující prostředí Container Apps. Pokud chcete vytvořit vlastní prostředí, vyberte Vytvořit nové. Na stránce Vytvořit prostředí Container Apps můžete přidat nedefaultní profily úloh nebo povolit redundanci zón. Další informace o prostředích najdete v tématu Prostředí Azure Container Apps.

  6. Vyberte kartu Nasazení a zrušte výběr image Použít rychlý start. Jinak se aplikace funkcí nasadí ze základní image pro váš jazyk aplikace funkcí.

  7. 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. Veřejné nastavení podporuje jenom image uložené veřejně v Docker Hubu.

  8. V části Přidělení prostředků kontejneru vyberte požadovaný počet jader procesoru a dostupnou paměť. Pokud má vaše prostředí přidané další profily úloh, můžete vybrat nedefaultní profil úlohy. Možnosti na této stránce ovlivňují náklady na hostování vaší aplikace. Informace o odhadu potenciálních nákladů najdete na stránce s cenami služby Container Apps.

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

  10. 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.

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.

Můžete také nastavit množství prostředků procesoru a paměti přidělených vaší aplikaci.

Profily úloh a přidělení prostředků 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. Profil zadáte 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ý.

Pokud chcete nastavit prostředky přidělené aplikaci, nahraďte <CPU_COUNT> požadovaným počtem 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.

Příkaz můžete použít az functionapp container set ke správě přidělených prostředků a profilu úloh používaného vaší aplikací.

az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name  <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

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

Když hostujete kontejnerizovanou aplikaci funkcí v Azure Container Apps, existují dva způsoby, jak nastavit průběžné nasazování z úložiště zdrojového kódu:

V současné době nemůžete průběžně nasazovat kontejnery na základě změn imagí v registru kontejneru. Místo toho musíte použít tyto kanály průběžného nasazování založené na zdrojovém kódu.

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.

Můžete také nakonfigurovat průběžné nasazení z úložiště zdrojového kódu pomocí Azure Pipelines nebo GitHub Actions.

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.

    Snímek obrazovky znázorňující, jak přidat webhook v okně Centra Dockeru

  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.

    Snímek obrazovky znázorňující hlavní příkaz Linuxu spuštěný v relaci SSH

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