Vytvoření první kontejnerizované služby Azure Functions

V tomto článku vytvoříte aplikaci funkcí spuštěnou v kontejneru Linuxu a nasadíte ji do Azure Functions.

Nasazení kódu funkce do Azure Functions v kontejneru vyžaduje hostování plánu Premium nebo vyhrazeného plánu (App Service). Dokončením tohoto článku vám vzniknou náklady ve výši několika amerických dolarů na vašem účtu Azure, které můžete minimalizovat odstraněním prostředků, jakmile budete hotovi.

Návod

Pro většinu kontejnerizovaných pracovních zátěží hostujte své funkční aplikace v Azure Container Apps místo v Premium nebo Dedikovaném plánu. Container Apps poskytuje plně spravované, serverless prostředí s vestavěným škálováním řízeným událostmi, škálováním až na nulu a podporou GPU. Pro začátek viz Vytvořte své první kontejnerizované funkce v Azure Container Apps.

Zvolte vývojový jazyk

Nejprve pomocí nástrojů Azure Functions vytvoříte kód projektu jako aplikaci funkcí v kontejneru Dockeru pomocí základní image Linuxu specifické pro jazyk. Ujistěte se, že jste v horní části článku vybrali jazyk podle svého výběru.

Core Tools automaticky vygeneruje soubor Dockerfile pro váš projekt, který používá nejaktuálnější verzi správné základní image pro váš jazyk funkcí. Kontejner byste měli pravidelně aktualizovat z nejnovější základní image a znovu nasadit z aktualizované verze kontejneru. Další informace najdete v tématu Vytváření kontejnerizovaných aplikací funkcí.

Požadavky

Než začnete, musíte mít splněné následující požadavky:

  • Nainstalujte Azure CLI verze 2.4 nebo novější.

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Pokud chcete publikovat image kontejnerizované aplikace funkcí, kterou vytvoříte do registru kontejneru, potřebujete ID Dockeru a Desktop Docker spuštěný na místním počítači. Pokud nemáte ID Dockeru, můžete vytvořit účet Dockeru.

Musíte také dokončit část Vytvoření registru kontejneru v rychlém startu Služby Container Registry. Poznamenejte si plně kvalifikovaný název přihlašovacího serveru.

Vytvoření a aktivace virtuálního prostředí

V vhodné složce spusťte následující příkazy pro vytvoření a aktivaci virtuálního prostředí s názvem .venv. Nezapomeňte použít některou z verzí Pythonu podporovaných službou Azure Functions.

python -m venv .venv
source .venv/bin/activate

Pokud Python nenainstaloval balíček venv do distribuce Linuxu, spusťte následující příkaz:

sudo apt-get install python3-venv

V tomto aktivovaném virtuálním prostředí spustíte všechny následující příkazy.

Vytvoření a otestování projektu místních funkcí

V terminálu nebo příkazovém řádku spusťte následující příkaz pro vybraný jazyk a vytvořte projekt aplikace funkcí v aktuální složce:

func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker

V prázdné složce spusťte následující příkaz, který vygeneruje projekt Functions z archetypu Maven:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker

Parametr -DjavaVersion říká modulu runtime Functions, kterou verzi Javy použít. Pokud chcete funkce spouštět ve verzi Java 11, použijte -DjavaVersion=11. Pokud nezadáte -DjavaVersion, Maven jako výchozí nastaví Javu 8. Další informace najdete v tématu Verze Javy.

Důležité

Proměnná prostředí JAVA_HOME musí být nastavena na instalační umístění správné verze JDK pro dokončení tohoto článku.

Maven vás požádá o hodnoty potřebné k dokončení generování projektu při nasazení. Postupujte podle pokynů a zadejte následující informace:

Výzva Hodnota Popis
groupId com.fabrikam Hodnota, která jednoznačně identifikuje váš projekt ve všech projektech podle pravidel pojmenování balíčků pro Javu.
artifactId fabrikam-functions Hodnota, která je názvem JARu bez čísla verze.
verze 1.0-SNAPSHOT Vyberte výchozí hodnotu.
balíček com.fabrikam.functions Hodnota, která je balíčkem Java pro vygenerovaný kód funkce. Použijte výchozí hodnotu.

Potvrďte zadáním Y nebo stisknutím klávesy Enter.

Maven vytvoří soubory projektu v nové složce s názvem artifactId, což je fabrikam-functionsv tomto příkladu .

Tato --docker možnost vygeneruje soubor Dockerfile pro projekt, který definuje vhodný kontejner pro použití se službou Azure Functions a vybraným modulem runtime.

Přejděte do složky projektu:

cd fabrikam-functions

Pomocí následujícího příkazu přidejte do projektu funkci, kde --name argument je jedinečný název funkce a --template argument určuje aktivační událost funkce. func new vytvoří v projektu soubor kódu jazyka C#.

func new --name HttpExample --template "HTTP trigger"

Pomocí následujícího příkazu přidejte do projektu funkci, kde --name argument je jedinečný název funkce a --template argument určuje aktivační událost funkce. func new vytvoří podsložku odpovídající názvu funkce, která obsahuje konfigurační soubor s názvem function.json.

func new --name HttpExample --template "HTTP trigger"

Pokud chcete funkci otestovat místně, spusťte místního hostitele modulu runtime Azure Functions v kořenové složce projektu. Pokud chcete zajistit, aby se funkce při hostování v Dockeru volala později, zkontrolujte, jestli je úroveň autorizace nastavená na AuthorizationLevel.Anonymous, nebo ji nastavte, pokud ještě není nakonfigurovaná.

func start  
func start  
npm install
npm start
mvn clean package  
mvn azure-functions:run

Jakmile se koncový HttpExample bod zapíše do výstupu, přejděte na tento koncový bod. Ve výstupu odpovědi by se měla zobrazit uvítací zpráva.

Jakmile se koncový HttpExample bod zapíše do výstupu, přejděte na http://localhost:7071/api/HttpExample?name=Functions. Prohlížeč musí zobrazit zprávu "hello", která vrátí zpět Functions, hodnotu zadanou parametrem name dotazu.

Stisknutím kláves Ctrl+C (Command+C na macOS) zastavte hostitele.

Postavte obraz kontejneru a ověřte lokálně

(Volitelné) Prozkoumejte soubor Dockerfile v kořenové složce projektu. Soubor Dockerfile popisuje požadované prostředí pro spuštění aplikace funkcí v Linuxu. Úplný seznam podporovaných základních obrazů pro Azure Functions naleznete na stránce základní image Azure Functions.

V kořenové složce projektu spusťte příkaz docker buildu , zadejte název jako azurefunctionsimagea označte jako v1.0.0. Položku <DOCKER-ID> nahraďte ID vašeho účtu Docker Hubu. Tento příkaz sestaví image Dockeru pro kontejner.

docker build --tag <DOCKER-ID>/azurefunctionsimage:v1.0.0 .

Po dokončení příkazu můžete nový kontejner spustit místně.

Pokud chcete ověřit sestavení, spusťte image v místním kontejneru pomocí příkazu docker run , nahraďte <DOCKER-ID> znovu ID účtu Docker Hubu a přidejte argument porty takto -p 8080:80:

docker run -p 8080:80 -it <DOCKER-ID>/azurefunctionsimage:v1.0.0

Po spuštění obrázku v místním kontejneru přejděte na http://localhost:8080/api/HttpExample, který musí zobrazit stejnou zprávu s pozdravem jako předtím. Vzhledem k tomu, že funkce aktivovaná protokolem HTTP, kterou jste vytvořili, používá anonymní autorizaci, můžete volat funkci spuštěnou v kontejneru, aniž byste museli získat přístupový klíč. Další informace najdete v tématu Autorizační klíče.

Po spuštění image v místním kontejneru přejděte na http://localhost:8080/api/HttpExample?name=Functions, který musí zobrazit stejnou zprávu "hello" jako předtím. Vzhledem k tomu, že funkce aktivovaná protokolem HTTP, kterou jste vytvořili, používá anonymní autorizaci, můžete volat funkci spuštěnou v kontejneru, aniž byste museli získat přístupový klíč. Další informace najdete v tématu Autorizační klíče.

Po ověření funkční aplikace v kontejneru ukončete spuštění stisknutím kláves Ctrl+C (Command+C v macOS).

Publikování image kontejneru do registru

Pokud chcete image kontejneru zpřístupnit pro nasazení do hostitelského prostředí, musíte ji odeslat do registru kontejneru. Osvědčeným postupem zabezpečení je použít instanci služby Azure Container Registry a vynutit připojení založená na spravovaných identitách. Docker Hub vyžaduje, abyste se ověřili pomocí sdílených tajných kódů, díky kterým bude vaše nasazení zranitelnější.

Azure Container Registry je služba privátního registru pro vytváření, ukládání a správu imagí kontejnerů a souvisejících artefaktů. Pro publikování kontejnerů do služeb Azure byste měli použít službu privátního registru.

  1. Pomocí tohoto příkazu se přihlaste k instanci registru pomocí aktuálních přihlašovacích údajů Azure. Nahraďte <REGISTRY-NAME> názvem vaší instance služby Container Registry.

    az acr login --name <REGISTRY-NAME>
    
  2. Pomocí tohoto příkazu označte image plně kvalifikovaným názvem přihlašovacího serveru registru. Nahraďte <LOGIN-SERVER> plně kvalifikovaným názvem vašeho přihlašovacího serveru registru a <DOCKER-ID> vaším Docker ID.

    docker tag <DOCKER-ID>/azurefunctionsimage:v1.0.0 <LOGIN-SERVER>/azurefunctionsimage:v1.0.0 
    
  3. Pomocí tohoto příkazu odešlete kontejner do instance registru:

    docker push <LOGIN-SERVER>/azurefunctionsimage:v1.0.0
    

Vytvoření podpůrných prostředků Azure pro vaši funkci

Než budete moct nasadit kontejner do Azure, musíte vytvořit tři prostředky:

  • Skupina prostředků, což je logický kontejner pro související prostředky.
  • Účet úložiště, který slouží k udržování stavu a dalších informací o vašich funkcích.
  • Aplikace funkcí, která poskytuje prostředí pro spouštění kódu funkce. Aplikační funkce mapuje váš místní projekt funkcí a vám umožňuje seskupit funkce jako logickou jednotku pro snadnější správu, nasazení a sdílení prostředků.

Důležité

Tento článek nyní ukazuje, jak se připojit k účtu služby Azure Storage i registru kontejneru pomocí připojovacích řetězců a dalších sdílených tajných přihlašovacích údajů. Pro nejlepší bezpečnost používejte pouze spravované připojení založené na identitě jak k vašemu úložnému účtu, tak k Azure Container Registry pomocí autentizace Microsoft Entra. Další informace najdete v příručce pro vývojáře functions.

K vytvoření těchto položek použijte následující příkazy. Podporuje se Azure CLI i PowerShell. Pro vytvoření Azure zdrojů pomocí Azure PowerShell potřebujete také modul Az PowerShell verze 5.9.0 nebo novější.

  1. Pokud jste to ještě neudělali, přihlaste se do Azure.

    az login
    

    Příkaz az login vás přihlásí ke svému účtu Azure.

  2. Vytvořte skupinu prostředků s názvem AzureFunctionsContainers-rg ve zvolené oblasti.

    az group create --name AzureFunctionsContainers-rg --location <REGION>
    

    Příkaz az group create vytvoří skupinu prostředků. V předchozím příkazu nahraďte <REGION> ho regionem ve vašem okolí pomocí dostupného regionálního kódu vráceného příkazem az account list-locations .

  3. Vytvořte účet úložiště pro obecné účely ve své skupině prostředků a oblasti.

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
    

    Příkaz az storage account create vytvoří účet úložiště.

    V předchozím příkladu nahraďte <STORAGE_NAME> název, který jste si vybrali a který je unikátní v Azure Storage. Názvy úložišť mohou obsahovat pouze 3 až 24 znaků, čísla a malá písmena. Standard_LRS určuje účet pro obecné účely podporovaný službou Functions.

  4. Pomocí příkazu vytvořte Premium plán pro Azure Functions pojmenovaný myPremiumPlan v cenové úrovni Elastic Premium 1 (), ve vašem --sku EP1, a v Linuxovém kontejneru (<REGION>).

    az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
    

    V této části používáme plán Premium, který se dá podle potřeby škálovat. Další informace o hostování najdete v porovnání plánů hostování azure Functions. Další informace o výpočtu nákladů najdete na stránce s cenami služby Functions.

    Příkaz také vytvoří přidruženou instanci Aplikace Azure Insights ve stejné skupině prostředků, pomocí které můžete monitorovat aplikaci funkce a zobrazit protokoly. Další informace najdete v tématu Monitorování Azure Functions. Instance nenese žádné náklady, dokud ji neaktivujete.

Vytvoření a konfigurace aplikace funkcí v Azure pomocí image

Aplikace funkcí v Azure spravuje provádění vašich funkcí v plánu hostování Azure Functions. V této části použijete prostředky Azure z předchozí části k vytvoření funkční aplikace z image v registru kontejneru a její konfiguraci s připojovacím řetězcem pro Azure Storage.

  1. Vytvořte funkční aplikaci pomocí následujícího příkazu, v závislosti na vašem registru kontejnerů:

    az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 
    

    V tomto příkladu nahraďte <STORAGE_NAME> názvem, který jste použili v předchozí části účtu úložiště. Nahradte <APP_NAME> globálně jedinečným názvem, který je vhodný pro vás, a <DOCKER_ID> nebo <LOGIN_SERVER> vaším ID účtu na Docker Hubu nebo serverem Container Registry. Když nasazujete z vlastního registru kontejneru, název image označuje adresu URL registru.

    Při prvním vytvoření funkční aplikace načte počáteční image z vašeho Docker Hubu. Z registru kontejneru můžete také povolit průběžné nasazování do Azure.

    Návod

    PoužijteDisableColor nastavení v souboru host.json, abyste zabránili zápisu ANSI řídicích znaků do kontejnerových logů.

  2. Pomocí následujícího příkazu získáte připojovací řetězec pro účet úložiště, který jste vytvořili:

    az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
    

    Řetězec připojení pro účet úložiště je vrácen pomocí příkazu az storage account show-connection-string.

    Důležité

    Tento článek v současné době ukazuje, jak se připojit k výchozímu účtu úložiště pomocí řetězce připojení. 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.

    Nahraďte <STORAGE_NAME> názvem účtu úložiště, který jste vytvořili dříve.

  3. Pomocí následujícího příkazu přidejte nastavení do aplikace funkcí:

    az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
    

    Použijte az functionapp config appsettings set příkaz k vytvoření prostředí.

    V tomto příkazu nahraďte <APP_NAME> názvem vaší funkční aplikace a <CONNECTION_STRING> připojovacím řetězcem z předchozího kroku. připojovací řetězec je dlouhý kódovaný řetězec, který začíná na DefaultEndpointProtocol=.

  4. Tato funkce teď může použít tento připojovací řetězec pro přístup k účtu úložiště.

Ověření funkcí v Azure

Když je image nasazená do vaší aplikace funkcí v Azure, můžete tuto funkci vyvolat prostřednictvím požadavků HTTP.

  1. Spuštěním následujícího az functionapp function show příkazu získejte adresu URL nové funkce:

    az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate 
    

    Nahraďte <APP_NAME> názvem vaší funkční aplikace.

  1. Pomocí adresy URL, kterou jste právě získali, volejte HttpExample koncový bod funkce, přičemž připojte dotazovací řetězec ?name=Functions.
  1. K volání koncového bodu funkce použijte adresu URL, kterou jste právě získali HttpExample .

Když přejdete na tuto adresu URL, prohlížeč musí zobrazit podobný výstup jako při místním spuštění funkce.

Vyčištění prostředků

Pokud chcete pokračovat ve spolupráci s Azure Functions s využitím zdrojů, které jste vytvořili v tomto článku, můžete všechny tyto zdroje nechat na místě. Protože jste vytvořili prémiový plán pro Azure Functions, nese vám průběžné náklady ve výši jednoho nebo dvou USD denně.

Aby se předešlo průběžným nákladům, smažte skupinu zdrojů a AzureFunctionsContainers-rg vyčistíte všechny zdroje v této skupině.

az group delete --name AzureFunctionsContainers-rg

Další kroky