Sdílet prostřednictvím


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 hostování Azure Functions pomocí Azure Container Apps.

Důležité

Nyní je k dispozici nová metoda hostování pro spouštění Azure Functions přímo v Azure Container Apps (viz oznámení) a doporučuje se pro většinu nových úloh. Díky této integraci můžete využívat všechny funkce a možnosti Azure Container Apps a zároveň využívat programovací model funkcí a jednoduchost automatického škálování poskytované službou Azure Functions.

Další informace najdete v tématu Nativní podpora azure Functions v Azure Container Apps.

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:

Důležité

Tento článek aktuálně ukazuje, jak se připojit k výchozímu účtu úložiště pomocí připojovacího řetězce. Pro zajištění nejlepšího zabezpečení byste místo toho měli vytvořit připojení založené na spravované identitě ke službě Azure Storage pomocí ověřování Microsoft Entra. Další informace najdete v příručce pro vývojáře functions.

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í obrazy pro Azure Functions jsou specifické pro jazyk a nacházejí se v úložištích základních obrazů Azure Functions.

Tým Functions se zavazuje publikovat měsíční aktualizace těchto základních imagí. Pravidelné aktualizace zahrnují nejnovější aktualizace menších verzí a opravy zabezpečení jak pro prostředí Functions runtime, tak pro jazyky. Kontejner byste měli pravidelně aktualizovat z nejnovější základní image a znovu nasadit aktualizovanou verzi kontejneru. Pro více informací, viz Údržba vlastních kontejnerů.

Ú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í --docker příkazu zahrňte func init 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 Výpočetní>Aplikace 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 funkční aplikaci.
    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 Function 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 Elastická databáze úrovně Premium EP1 EP1 je cenově dostupný plán. Pokud potřebujete, můžete zvolit větší plán.
    Zónová redundance Invalidní 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 funkční aplikace vyberte Přejít k prostředku a na stránce funkční aplikace 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 Výpočetní>Aplikace funkcí.

  3. V části Vybrat možnost hostování zvolte prostředí aplikací Container>Vybrat.

  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 funkční aplikaci.
    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 Function 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 hostování Azure Functions pomocí Azure Container Apps.

    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 Použít rychlý start image. Jinak je funkční aplikace nasazena ze základního image pro vámi zvolený jazyk funkční aplikace.

  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 poté vyberte Vytvořit, abyste nasadili aplikační funkci a image kontejneru z registru.

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

Když je kontejner vaší funkční aplikace nasazený z registru, služba Functions uchovává informace o zdrojovém image.

K získání dat o obrazu nebo změně nasazovacího obrazu 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í parametru --workload-profile-name příkazu, například takto: 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 --environment parametr určuje image, --image 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ě. Také nahraďte <APP_NAME> globálně jedinečným názvem, 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ů. Pro <MEMORY_SIZE> zvolte velikost vyhrazené paměti od 1 GB až do maximálně povoleného profilem.

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.

Návod

Kontejnerizovaná aplikace funkcí ve výchozím nastavení monitoruje port 80 příchozích požadavků. Pokud vaše aplikace musí používat jiný port, změňte tento výchozí port pomocí WEBSITES_PORT 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.

Průběžné nasazování můžete také nakonfigurovat 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> jménem aplikace vaší funkce.

  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 řetězec -appservice k základnímu obrazu ve vaší instrukci, jak je znázorněno v následujícím příkladu:

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

    V tomto příkladu se používá základní image verze Node.js verze 18 s podporou SSH. 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í příkazu docker build, nahraďte <DOCKER_ID> vaším ID účtu Docker Hub, jak je znázorněno v následujícím příkladu.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Nahrajte aktualizovaný obraz do Docker Hubu, což by mělo trvat výrazně kratší dobu než první nahrá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: