Arbeta med containrar och Azure Functions

Den här artikeln visar det stöd som Azure Functions tillhandahåller för att arbeta med containerbaserade funktionsappar som körs i en Azure Container Apps-miljö. Stöd för att hantera funktionsappcontainrar i Container Apps finns för närvarande i förhandsversion. Mer information finns i Azure Container Apps-värdtjänster för Azure Functions.

Den här artikeln visar det stöd som Azure Functions tillhandahåller för att arbeta med funktionsappar som körs i Linux-containrar.

Välj värdmiljön för din containerbaserade funktionsapp överst i artikeln.

Om du vill hoppa direkt visar följande artikel hur du skapar din första funktion som körs i en Linux-container och distribuerar avbildningen från ett containerregister till en Azure-värdtjänst som stöds:

Skapa containerbaserade funktionsappar

Funktioner gör det enkelt att distribuera och köra funktionsappar som Linux-containrar som du skapar och underhåller. Functions har en uppsättning språkspecifika basavbildningar som du kan använda när du skapar containerbaserade funktionsappar.

Viktigt!

När du skapar egna containrar måste du hålla basavbildningen av containern uppdaterad till den senaste basavbildningen som stöds. Basavbildningar som stöds för Azure Functions är språkspecifika och finns i basavbildningslagringarna för Azure Functions.

Functions-teamet har åtagit sig att publicera månatliga uppdateringar för dessa basavbildningar. Regelbundna uppdateringar omfattar de senaste delversionsuppdateringarna och säkerhetskorrigeringarna för både Functions-körningen och språken. Du bör regelbundet uppdatera containern från den senaste basavbildningen och distribuera om den uppdaterade versionen av containern.

Ett fullständigt exempel på hur du skapar den lokala containerbaserade funktionsappen från kommandoraden och publicerar avbildningen till ett containerregister finns i Skapa en funktionsapp i en lokal container.

Generera Dockerfile

Functions-verktyg tillhandahåller ett Docker-alternativ som genererar en Dockerfile med ditt funktionskodprojekt. Du kan använda den här filen med Docker för att skapa dina funktioner i en container som härleds från rätt basavbildning (språk och version).

Hur du skapar en Dockerfile beror på hur du skapar projektet.

  • När du skapar ett Functions-projekt med Hjälp av Azure Functions Core Tools tar du med --docker alternativet när du kör func init kommandot, som i följande exempel:

    func init --docker
    
  • Du kan också lägga till en Dockerfile i ett befintligt projekt med hjälp --docker-only av alternativet när du kör func init kommandot i en befintlig projektmapp, som i följande exempel:

    func init --docker-only
    

Ett fullständigt exempel finns i Skapa en funktionsapp i en lokal container.

Skapa din funktionsapp i en container

Med en Core Tools-genererad Dockerfile i kodprojektet kan du använda Docker för att skapa den containerbaserade funktionsappen på den lokala datorn. Följande docker build kommando skapar en avbildning av dina containerbaserade funktioner från projektet i den lokala katalogen:

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

Ett exempel på hur du skapar containern finns i Skapa containeravbildningen och verifiera lokalt.

Uppdatera en avbildning i registret

När du gör ändringar i funktionskodprojektet eller behöver uppdatera till den senaste basavbildningen måste du återskapa containern lokalt och publicera om den uppdaterade avbildningen till det valda containerregistret. Följande kommando återskapar avbildningen från rotmappen med ett uppdaterat versionsnummer och skickar den till registret:

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

Ersätt <REGISTRY_NAME> med containerregisterinstansen och <LOGIN_SERVER> med namnet på inloggningsservern.

Nu måste du uppdatera distributionen för att använda den nya avbildningen. I följande exempel uppdateras funktionsappen så att den nya avbildningen används:

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

I det här exemplet <IMAGE_NAME> är det fullständiga namnet på den nya avbildningen med version. Privata register kräver att du anger ett användarnamn och lösenord. Lagra dessa autentiseringsuppgifter på ett säkert sätt.

Du bör också överväga att aktivera kontinuerlig distribution.

Skapa Azure-portalen med containrar

När du skapar en funktionsapp i Azure-portalen kan du välja att distribuera funktionsappen från en avbildning i ett containerregister. Information om hur du skapar en containerbaserad funktionsapp i ett containerregister finns i Skapa din funktionsapp i en container.

Följande steg skapar och distribuerar en befintlig containerbaserad funktionsapp från ett containerregister.

  1. I menyn i Azure-portalen eller på sidan Start väljer du Skapa en resurs.

  2. På sidan Nytt väljer du Beräkningsfunktionsapp>.

  3. På sidan Grundläggande använder du inställningarna för funktionsappen enligt beskrivningen i följande tabell:

    Inställning Föreslaget värde beskrivning
    Abonnemang Din prenumeration Prenumerationen där du skapar din funktionsapp.
    Resursgrupp myResourceGroup Namn på den nya resursgrupp där du skapar funktionsappen. Du bör skapa en resursgrupp eftersom det finns kända begränsningar när du skapar nya funktionsappar i en befintlig resursgrupp.
    Funktionsappens namn Unikt namn* Namn som identifierar din nya funktionsapp. Giltiga tecken är a-z (skiftlägesokänsligt), 0-9 och -.
    Vill du distribuera kod eller containeravbildning? Containeravbildning Distribuera en containerbaserad funktionsapp från ett register. Information om hur du skapar en funktionsapp i registret finns i Skapa en funktionsapp i en lokal container.
    Region Önskad region Välj en region som är nära dig eller nära andra tjänster som dina funktioner kan komma åt.

*Appnamnet måste vara globalt unikt för alla Azure Functions-värdbaserade appar.

  1. I Värdalternativ och planer väljer du 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.

    Detta skapar en funktionsapp som hanteras av Azure Functions i Premium-planen, som stöder dynamisk skalning. Du kan också välja att köra i en App Service-plan, men i den här typen av dedikerad plan måste du hantera skalningen av funktionsappen.

*Appnamnet måste vara unikt i Azure Container Apps-miljön. Alla regioner stöds inte i förhandsversionen. Mer information finns i Överväganden för värdtjänster för Container Apps.

  1. I Värdalternativ och planer väljer du Miljöplan för Azure Container Apps.

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

    Då skapas en ny Azure Container Apps Environment-resurs som värd för din funktionsappcontainer. Mer information finns i Azure Container Apps-värdtjänster för Azure Functions.

    Som standard skapas miljön i en förbrukningsplan utan zonredundans för att minimera kostnaderna. Du kan också välja en befintlig Container Apps-miljö. Mer information om miljöer finns i Azure Container Apps-miljöer.

  1. Acceptera standardalternativen för att skapa ett nytt lagringskonto på fliken Lagring och en ny Application Insight-instans på fliken Övervakning . Du kan också välja att använda ett befintligt lagringskonto eller En Application Insights-instans.
  1. Välj fliken Distribution och avmarkera Använd snabbstartsbild. Om du inte gör det distribueras funktionsappen från basavbildningen för funktionsappens språk.

  2. Välj din bildtyp, offentlig eller privat. Välj Privat om du använder Azure Container Registry eller något annat privat register. Ange avbildningsnamnet, inklusive registerprefixet. Om du använder ett privat register anger du autentiseringsuppgifterna för avbildningsregistret.

  3. Välj Granska + skapa för att granska appkonfigurationsvalen.

  4. På sidan Granska + skapa granskar du inställningarna och väljer sedan Skapa för att etablera funktionsappen och distribuera containeravbildningen från registret.

  1. Välj Granska + skapa för att granska appkonfigurationsvalen.

  2. På sidan Granska + skapa granskar du inställningarna och väljer sedan Skapa för att etablera funktionsappen med en standardbasavbildning.

  3. När funktionsappens resurs har skapats väljer du Gå till resurs och på funktionsappsidan väljer du Distributionscenter.

  4. I distributionscentret kan du ansluta containerregistret som källa för avbildningen. Du kan också aktivera GitHub Actions eller Azure Pipelines för en mer robust kontinuerlig distribution av uppdateringar till containern i registret.

Arbeta med avbildningar i Azure Functions

När din funktionsappcontainer distribueras från ett register behåller Functions information om källavbildningen. Använd följande kommandon för att hämta data om avbildningen eller ändra den distributionsbild som används:

Arbetsbelastningsprofiler för Container Apps

Arbetsbelastningsprofiler är en funktion i Container Apps som gör att du bättre kan kontrollera dina distributionsresurser. Azure Functions i Azure Container Apps stöder även arbetsbelastningsprofiler. Mer information finns i Arbetsbelastningsprofiler i Azure Container Apps.

Du kan skapa och hantera arbetsbelastningsprofiler med hjälp av Azure CLI eller i Azure-portalen.

Du aktiverar arbetsbelastningsprofiler när du skapar din containerappmiljö. Ett exempel finns i Skapa en containerapp i en profil.

Du kan lägga till, redigera och ta bort profiler i din miljö. Ett exempel finns i Lägg till profiler.

När du skapar en containerbaserad funktionsapp i en miljö där arbetsbelastningsprofiler är aktiverade bör du även ange den profil som ska köras. Du gör detta med hjälp av parametern --workload-profile-name för az functionapp create kommandot, som i det här exemplet:

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

Ersätt <CPU_COUNT> också med önskat antal virtuella processorer, med minst 0,5 upp till det högsta tillåtna antalet av profilen. För <MEMORY_SIZE>väljer du en dedikerad minnesmängd från 1 GB upp till det högsta tillåtna av profilen.

Programinställningar

Med Azure Functions kan du arbeta med programinställningar för containerbaserade funktionsappar på standard sätt. Mer information finns i Använda programinställningar.

Aktivera kontinuerlig distribution till Azure

Viktigt!

Webhook-baserad distribution stöds inte för närvarande när du kör containern i en Elastic Premium-plan. Om du behöver använda den kontinuerliga distributionsmetod som beskrivs i det här avsnittet distribuerar du i stället containern i en App Service-plan. När du kör en Elastic Premium-plan måste du starta om appen manuellt när du uppdaterar containern på lagringsplatsen.

Du kan göra så att Azure Functions automatiskt uppdaterar distributionen av en avbildning när du uppdaterar avbildningen i registret.

  1. Använd följande kommando för att aktivera kontinuerlig distribution och för att hämta webhooks-URL:en:

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

    Kommandot az functionapp deployment container config aktiverar kontinuerlig distribution och returnerar url:en för distributionswebbhooken. Du kan hämta den här URL:en när som helst senare med hjälp az functionapp deployment container show-cd-url av kommandot .

    Som tidigare ersätter du <APP_NAME> med funktionsappens namn.

  2. Kopiera url:en för distributionswebbhooken till Urklipp.

  3. Öppna Docker Hub, logga in och välj Lagringsplatser i navigeringsfältet. Leta upp och välj bilden, välj fliken Webhooks , ange ett Webhook-namn, klistra in url:en i Webhook-URL:en och välj sedan Skapa.

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

  4. Med webhook-uppsättningen distribuerar Azure Functions om avbildningen när du uppdaterar den i Docker Hub.

Aktivera SSH-anslutningar

SSH möjliggör säker kommunikation mellan en container och en klient. Med SSH aktiverat kan du ansluta till din container med hjälp av App Service Advanced Tools (Kudu). För enkel anslutning till containern med SSH tillhandahåller Azure Functions en basavbildning som redan har SSH aktiverat. Du behöver bara redigera din Dockerfile, sedan återskapa och distribuera om avbildningen. Du kan sedan ansluta till containern via Advanced Tools (Kudu).

  1. I Dockerfile lägger du till strängen -appservice i basavbildningen i instruktionenFROM, som i följande exempel:

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

    I det här exemplet används den SSH-aktiverade versionen av basavbildningen Node.js version 18. Gå till Azure Functions-basavbildningsdatabasen för att kontrollera att du använder den senaste versionen av den SSH-aktiverade basavbildningen.

  2. Återskapa avbildningen docker build med hjälp av kommandot och ersätt <DOCKER_ID> med ditt Docker Hub-konto-ID, som i följande exempel.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Push-överför den uppdaterade avbildningen till Docker Hub, vilket bör ta betydligt mindre tid än den första push-överföringen. Endast de uppdaterade segmenten i avbildningen behöver laddas upp nu.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Azure Functions distribuerar automatiskt om avbildningen till din funktionsapp. processen sker på mindre än en minut.

  5. Öppna och ersätt <app_name> med ditt unika namn i en webbläsarehttps://<app_name>.scm.azurewebsites.net/. Den här URL:en är Slutpunkten för Avancerade verktyg (Kudu) för din funktionsappcontainer.

  6. Logga in på ditt Azure-konto och välj sedan SSH för att upprätta en anslutning till containern. Anslut kan ta en stund om Azure fortfarande uppdaterar containeravbildningen.

  7. När en anslutning har upprättats med containern top kör du kommandot för att visa de processer som körs.

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

Nästa steg

Följande artiklar innehåller mer information om hur du distribuerar och hanterar containrar: