Dela via


Skapa dina första containerbaserade funktioner i Azure Container Apps

I den här artikeln skapar du en funktionsapp som körs i en Linux-container och distribuerar den till en Azure Container Apps-miljö från ett containerregister. Genom att distribuera till Container Apps kan du integrera dina funktionsappar i molnbaserade mikrotjänster. Mer information finns i Azure Container Apps-värdtjänster för Azure Functions.

Den här artikeln visar hur du skapar funktioner som körs i en Linux-container och distribuerar containern till en Container Apps-miljö.

Att slutföra den här snabbstarten medför en liten kostnad på några USD cent eller mindre i ditt Azure-konto, vilket du kan minimera genom att rensa resurser när du är klar.

Välj programmeringsspråk

Först använder du Azure Functions-verktyg för att skapa din projektkod som en funktionsapp i en Docker-container med hjälp av en språkspecifik Linux-basavbildning. Se till att välja valfritt språk överst i artikeln.

Core Tools genererar automatiskt en Dockerfile för projektet som använder den senaste versionen av rätt basavbildning för funktionsspråket. Du bör regelbundet uppdatera containern från den senaste basavbildningen och distribuera om från den uppdaterade versionen av containern. Mer information finns i Skapa containerbaserade funktionsappar.

Förutsättningar

Innan du börjar måste du ha följande krav på plats:

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Om du vill publicera den containerbaserade funktionsappavbildningen som du skapar i ett containerregister behöver du ett Docker-ID och Docker som körs på den lokala datorn. Om du inte har något Docker-ID kan du skapa ett Docker-konto.

Du måste också slutföra avsnittet Skapa ett containerregister i snabbstarten containerregister för att skapa en registerinstans. Anteckna namnet på din fullständigt kvalificerade inloggningsserver.

Skapa och aktivera en virtuell miljö

I en lämplig mapp kör du följande kommandon för att skapa och aktivera en virtuell miljö med namnet .venv. Se till att använda någon av De Python-versioner som stöds av Azure Functions.

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

Om Python inte installerade venv-paketet på Linux-distributionen kör du följande kommando:

sudo apt-get install python3-venv

Du kör alla efterföljande kommandon i den här aktiverade virtuella miljön.

Skapa och testa projektet med lokala funktioner

I en terminal eller kommandotolk kör du följande kommando för det valda språket för att skapa ett funktionsappsprojekt i den aktuella mappen:

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

I en tom mapp kör du följande kommando för att generera Functions-projektet från en Maven-arketyp:

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

Parametern -DjavaVersion talar om för Functions-körningen vilken version av Java som ska användas. Använd -DjavaVersion=11 om du vill att funktionerna ska köras på Java 11. När du inte anger -DjavaVersionanger Maven som standard Java 8. Mer information finns i Java-versioner.

Viktigt!

Miljövariabeln JAVA_HOME måste anges till installationsplatsen för rätt version av JDK för att slutföra den här artikeln.

Maven ber dig om de värden som behövs för att slutföra genereringen av projektet vid distributionen. Följ anvisningarna och ange följande information:

Prompt Värde beskrivning
groupId com.fabrikam Ett värde som unikt identifierar projektet i alla projekt, enligt namngivningsreglerna för paket för Java.
artifactId fabrikam-functions Ett värde som är namnet på jar-filen, utan ett versionsnummer.
version 1.0-SNAPSHOT Välj standardvärdet.
paket com.fabrikam.functions Ett värde som är Java-paketet för den genererade funktionskoden. Använd standardvärdet.

Skriv Y eller tryck på Retur för att bekräfta.

Maven skapar projektfilerna i en ny mapp med namnet artifactId, som i det här exemplet är fabrikam-functions.

Alternativet --docker genererar en Dockerfile för projektet, som definierar en lämplig container för användning med Azure Functions och den valda körningen.

Navigera till projektmappen:

cd fabrikam-functions

Använd följande kommando för att lägga till en funktion i projektet, där --name argumentet är det unika namnet på din funktion och --template argumentet anger funktionens utlösare. func new skapar en C#-kodfil i projektet.

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

Använd följande kommando för att lägga till en funktion i projektet, där --name argumentet är det unika namnet på din funktion och --template argumentet anger funktionens utlösare. func new skapar en undermapp som matchar funktionsnamnet som innehåller en konfigurationsfil med namnet function.json.

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

Om du vill testa funktionen lokalt startar du den lokala Azure Functions-körningsvärden i roten i projektmappen.

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

När slutpunkten har skrivits till utdata går du HttpExample till slutpunkten. Du bör se ett välkomstmeddelande i svarsutdata.

När du ser slutpunkten HttpExample som skrivits till utdata går du till http://localhost:7071/api/HttpExample?name=Functions. Webbläsaren måste visa ett "hello"-meddelande som ekar tillbaka Functions, värdet som anges till name frågeparametern.

Tryck på Ctrl+C (Kommando+C på macOS) för att stoppa värden.

Skapa containeravbildningen och verifiera lokalt

(Valfritt) Granska Dockerfile i roten för projektmappen. Dockerfile beskriver den miljö som krävs för att köra funktionsappen i Linux. Den fullständiga listan över basavbildningar som stöds för Azure Functions finns på basavbildningssidan för Azure Functions.

Kör kommandot docker build i rotprojektmappen, ange ett namn som azurefunctionsimageoch tagga som v1.0.0. Ersätt <DOCKER_ID> med ditt konto-ID för Docker Hub. Det här kommandot skapar Docker-avbildningen för containern.

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

När kommandot har slutförts kan du köra den nya containern lokalt.

Kontrollera bygget genom att köra avbildningen i en lokal container med kommandot docker run , ersätta <DOCKER_ID> igen med ditt Docker Hub-konto-ID och lägga till portargumentet som -p 8080:80:

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

När avbildningen startar i den lokala containern bläddrar du till http://localhost:8080/api/HttpExample, som måste visa samma hälsningsmeddelande som tidigare. Eftersom den HTTP-utlösta funktion som du skapade använder anonym auktorisering kan du anropa funktionen som körs i containern utan att behöva hämta en åtkomstnyckel. Mer information finns i auktoriseringsnycklar.

När avbildningen startar i den lokala containern bläddrar du till http://localhost:8080/api/HttpExample?name=Functions, som måste visa samma "hello"-meddelande som tidigare. Eftersom den HTTP-utlösta funktion som du skapade använder anonym auktorisering kan du anropa funktionen som körs i containern utan att behöva hämta en åtkomstnyckel. Mer information finns i auktoriseringsnycklar.

När du har verifierat funktionsappen i containern trycker du på Ctrl+C (Kommando+C på macOS) för att stoppa körningen.

Publicera containeravbildningen till ett register

Om du vill göra containeravbildningen tillgänglig för distribution till en värdmiljö måste du skicka den till ett containerregister.

Azure Container Registry är en privat registertjänst för att skapa, lagra och hantera containeravbildningar och relaterade artefakter. Du bör använda en privat registertjänst för att publicera dina containrar till Azure-tjänster.

  1. Använd det här kommandot för att logga in på registerinstansen med dina aktuella Azure-autentiseringsuppgifter:

    az acr login --name <REGISTRY_NAME>
    

    I föregående kommando ersätter du <REGISTRY_NAME> med namnet på containerregisterinstansen.

  2. Använd det här kommandot för att tagga avbildningen med det fullständigt kvalificerade namnet på registerinloggningsservern:

    docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 
    

    Ersätt <LOGIN_SERVER> med det fullständigt kvalificerade namnet på registerinloggningsservern och <DOCKER_ID> med ditt Docker-ID.

  3. Använd det här kommandot för att skicka containern till registerinstansen:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    

Skapa stödresurser för Azure-resurser för din funktion

Innan du kan distribuera din container till Azure måste du skapa tre resurser:

  • En resursgrupp, som är en logisk container för relaterade resurser.
  • Ett lagringskonto som används för att underhålla tillstånd och annan information om dina funktioner.
  • En Azure Container Apps-miljö med en Log Analytics-arbetsyta.

Använd följande kommandon för att skapa dessa objekt.

  1. Om du inte redan har gjort det loggar du in på Azure.

    Kommandot az login loggar in dig på ditt Azure-konto. Använd az account set när du har fler än en prenumeration associerad med ditt konto.

  2. Kör följande kommando för att uppdatera Azure CLI till den senaste versionen:

    az upgrade
    

    Om din version av Azure CLI inte är den senaste versionen påbörjas en installation. Hur uppgraderingen fungerar beror på operativsystemet. Du kan fortsätta när uppgraderingen är klar.

  3. Kör följande kommandon som uppgraderar Azure Container Apps-tillägget och registrerar namnområden som krävs av Container Apps:

    az extension add --name containerapp --upgrade -y
    az provider register --namespace Microsoft.Web 
    az provider register --namespace Microsoft.App 
    az provider register --namespace Microsoft.OperationalInsights 
    
  4. Skapa en resursgrupp med namnet AzureFunctionsContainers-rg.

    az group create --name AzureFunctionsContainers-rg --location eastus
    

    Det här az group create kommandot skapar en resursgrupp i regionen USA, östra. Om du i stället vill använda en region nära dig använder du en tillgänglig regionkod som returneras från kommandot az account list-locations . Du måste ändra efterföljande kommandon för att använda din anpassade region i stället eastusför .

  5. Skapa Azure Container App-miljö med arbetsbelastningsprofiler aktiverade.

    az containerapp env create --name MyContainerappEnvironment --enable-workload-profiles --resource-group AzureFunctionsContainers-rg --location eastus
    

    Det kan ta några minuter att köra kommandot.

  6. Skapa ett allmänt lagringskonto i din resursgrupp och region.

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

    Kommandot az storage account create skapar lagringskontot.

    I föregående exempel ersätter du <STORAGE_NAME> med ett namn som är lämpligt för dig och unikt i Azure Storage. Lagringsnamn får endast innehålla siffror på 3 till 24 tecken och gemener. Standard_LRS anger ett allmänt konto som stöds av Functions.

Skapa och konfigurera en funktionsapp i Azure med avbildningen

En funktionsapp i Azure hanterar körningen av dina funktioner i din Azure Container Apps-miljö. I det här avsnittet använder du Azure-resurserna från föregående avsnitt för att skapa en funktionsapp från en avbildning i ett containerregister i en Container Apps-miljö. Du konfigurerar också den nya miljön med en niska veze till det Azure Storage-konto som krävs.

az functionapp create Använd kommandot för att skapa en funktionsapp i den nya hanterade miljön som backas upp av Azure Container Apps:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime dotnet-isolated --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime java --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime powershell --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime python --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --assign-identity 

az functionapp create I kommandot anger parametern --environment Container Apps-miljön och parametern --image anger den avbildning som ska användas för funktionsappen. I det här exemplet ersätter <STORAGE_NAME> du med det namn som du använde i föregående avsnitt för lagringskontot. Ersätt <APP_NAME> också med ett globalt unikt namn som passar dig och <LOGIN_SERVER> med din fullständigt kvalificerade Container Registry-server.

Om du vill använda en systemtilldelad hanterad identitet för att komma åt containerregistret måste du aktivera hanterade identiteter i din app och ge den systemtilldelade hanterade identiteten åtkomst till containerregistret. Det här exemplet använder az functionapp identity assign och az role assignment create kommandot för att aktivera hanterade identiteter i appen och tilldela den systemtilldelade identiteten ACRPull till rollen i containerregistret:

FUNCTION_APP_ID=$(az functionapp identity assign --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --query principalId --output tsv)
ACR_ID=$(az acr show --name <REGISTRY_NAME> --query id --output tsv)
az role assignment create --assignee $FUNCTION_APP_ID --role AcrPull --scope $ACR_ID

I det här exemplet ersätter <APP_NAME> du och <REGISTRY_NAME> med namnet på funktionsappen respektive containerregistret.

När du anger --workload-profile-name "Consumption" skapas din app i en miljö med standardprofilen Consumption för arbetsbelastningen, vilket kostar samma sak som att köra i en förbrukningsplan för containerappar. När du först skapar funktionsappen hämtas den första avbildningen från registret.

I det här läget körs dina funktioner i en Container Apps-miljö, och de nödvändiga programinställningarna har redan lagts till. När det behövs kan du lägga till andra inställningar i funktionsappen på standardsättet för Functions. Mer information finns i Använda programinställningar.

Dricks

När du gör efterföljande ändringar i funktionskoden måste du återskapa containern, publicera om avbildningen till registret och uppdatera funktionsappen med den nya avbildningsversionen. Mer information finns i Uppdatera en avbildning i registret

Verifiera dina funktioner i Azure

När avbildningen har distribuerats till funktionsappen i Azure kan du nu anropa funktionen via HTTP-begäranden.

  1. Kör följande az functionapp function show kommando för att hämta URL:en för den nya funktionen:

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

    Ersätt <APP_NAME> med namnet på funktionsappen.

  1. Använd url:en som du nyss hämtade för att anropa funktionsslutpunkten HttpExample och lägga till frågesträngen ?name=Functions.
  1. Använd den URL som du nyss hämtade för att anropa funktionsslutpunkten HttpExample .

När du navigerar till den här URL:en måste webbläsaren visa liknande utdata som när du körde funktionen lokalt.

Begärande-URL:en bör se ut ungefär så här:

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample?name=functions

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample

Rensa resurser

Om du vill fortsätta arbeta med Azure Function med hjälp av de resurser som du skapade i den här artikeln kan du lämna alla dessa resurser på plats.

När du är klar med distributionen av funktionsappen AzureFunctionsContainers-rg tar du bort resursgruppen för att rensa alla resurser i gruppen:

az group delete --name AzureFunctionsContainers-rg

Nästa steg