Dela via


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ö. 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 Functions-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 en befintlig distribution för att använda den nya avbildningen. Du kan uppdatera funktionsappen så att den använder den nya avbildningen antingen med hjälp av Azure CLI eller i Azure-portalen:

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. Under Välj ett värdalternativ väljer du Premium-plan>Välj.

    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.

  4. 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.
    Linux-plan Ny plan (standard) Skapar en ny Premium-plan som värd för din app. Du kan också välja en befintlig premiumplan.
    Prisplan Elastic Premium EP1 EP1 är den mest prisvärda planen. Du kan välja en större plan om du behöver det.
    Zonredundans Inaktiverad Du behöver inte den här funktionen i en icke-produktionsapp.

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

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

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

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

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

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

Skapa Azure-portalen med containrar

När du skapar en Container Apps-värdbaserad 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. Under Välj ett värdalternativ väljer du Container Apps-miljö>Välj.

  4. 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 -.
    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 unikt i Azure Container Apps-miljön.

  5. På sidan Grundläggande accepterar du den föreslagna nya miljön för Azure Container Apps-miljön. För att minimera kostnaderna skapas den nya standardmiljön i förbrukning + dedikerad med standardprofilen för arbetsbelastning och utan zonredundans. Mer information finns i Azure Container Apps-värdtjänster för Azure Functions.

    Du kan också välja att använda en befintlig Container Apps-miljö. Om du vill skapa en anpassad miljö väljer du i stället Skapa ny. På sidan Skapa Container Apps-miljö kan du lägga till nondefault-arbetsbelastningsprofiler eller aktivera zonredundans. Mer information om miljöer finns i Azure Container Apps-miljöer.

  6. Välj fliken Distribution och avmarkera Använd snabbstartsbild. Annars distribueras funktionsappen från basavbildningen för funktionsappens språk.

  7. 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. Inställningen Offentlig stöder endast avbildningar som lagras offentligt i Docker Hub.

  8. Under Resursallokering av containrar väljer du önskat antal CPU-kärnor och tillgängligt minne. Om du har lagt till andra arbetsbelastningsprofiler i din miljö kan du välja en nondefault-arbetsbelastningsprofil. Alternativen på den här sidan påverkar kostnaden för att vara värd för din app. Se prissidan för Container Apps för att uppskatta dina potentiella kostnader.

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

  10. På sidan Granska + skapa granskar du inställningarna och väljer sedan Skapa för att etablera funktionsappen och distribuera containeravbildningen från 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 också ange mängden processor- och minnesresurser som allokeras till din app.

Du kan skapa och hantera både arbetsbelastningsprofiler och resursallokeringar 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 anger profilen 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.

Om du vill ange de resurser som har allokerats till din app ersätter <CPU_COUNT> du 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.

Du kan använda az functionapp container set kommandot för att hantera de allokerade resurserna och arbetsbelastningsprofilen som används av din app.

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

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

När du är värd för din containerbaserade funktionsapp i Azure Container Apps finns det två sätt att konfigurera kontinuerlig distribution från en källkodslagringsplats:

Du kan för närvarande inte kontinuerligt distribuera containrar baserat på avbildningsändringar i ett containerregister. Du måste i stället använda dessa källkodsbaserade pipelines för kontinuerlig distribution.

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 också konfigurera kontinuerlig distribution från en källkodslagringsplats med antingen Azure Pipelines eller GitHub Actions.

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.

    Skärmbild som visar hur du lägger till webhooken i Docker Hub-fönstret.

  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. Det kan ta en stund att ansluta 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.

    Skärmbild som visar linux-högsta kommandot som körs i en SSH-session.

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