Distributionstekniker i Azure Functions

Du kan använda några olika tekniker för att distribuera din Azure Functions-projektkod till Azure. Den här artikeln innehåller en översikt över de distributionsmetoder som är tillgängliga för dig och rekommendationer för den bästa metoden att använda i olika scenarier. Den innehåller också en fullständig lista över och viktig information om de underliggande distributionsteknikerna.

Distributionsmetoder

Distributionstekniken som du använder för att publicera kod till din funktionsapp i Azure beror på dina specifika behov och poängen i utvecklingscykeln. Under utveckling och testning kan du till exempel distribuera direkt från ditt utvecklingsverktyg, till exempel Visual Studio Code. När din app är i produktion är det mer troligt att du publicerar kontinuerligt från källkontroll eller med hjälp av en automatiserad publiceringspipeline, som kan omfatta validering och testning.

I följande tabell beskrivs tillgängliga distributionsmetoder för kodprojektet.

Distributionstyp Metoder Bäst för...
Verktygsbaserad Publicera Visual Studio Code
Visual Studio publicera
Core Tools publicerar
Distributioner under utveckling och andra improviserade distributioner. Distribuera din kod på begäran med hjälp av lokala utvecklingsverktyg.
App Service-hanterad Distributionscenter (CI/CD)
Containerdistributioner
Kontinuerlig distribution (CI/CD) från källkontroll eller från ett containerregister. Distributioner hanteras av App Service-plattformen (Kudu).
Externa pipelines Azure Pipelines
GitHub Actions
Produktionspipelines som omfattar validering, testning och andra åtgärder som måste köras som en del av en automatiserad distribution. Distributioner hanteras av pipelinen.

Specifika distributioner bör använda den bästa tekniken baserat på det specifika scenariot. Många av distributionsmetoderna baseras på zip-distribution, vilket rekommenderas för distribution.

Tillgänglighet för distributionsteknik

Distributionsmetoden beror också på värdplanen och operativsystemet som du kör funktionsappen på.

För närvarande erbjuder Functions fem alternativ för att vara värd för dina funktionsappar:

Varje plan har olika beteenden. Alla distributionstekniker är inte tillgängliga för varje värdplan och operativsystem. Det här diagrammet innehåller information om de distributionstekniker som stöds:

Distributionsteknik Flex-förbrukning Förbrukning Elastic Premium Dedikerad Container Apps
OneDeploy
Zip-distribution
Extern paket-URL1
Docker-container Endast Linux Endast Linux Endast Linux
Källkontroll Endast Windows
Lokal Git1 Endast Windows
FTPS1 Endast Windows
Redigeringi portalen 2

1 Distributionstekniker som kräver att du synkroniserar utlösare manuellt rekommenderas inte.
2 Redigering i portalen inaktiveras när kod distribueras till funktionsappen utanför portalen. Mer information, inklusive information om språkstöd för redigering i portalen, finns i Information om språkstöd.

Nyckelbegrepp

Vissa viktiga begrepp är viktiga för att förstå hur distributioner fungerar i Azure Functions.

Utlösarsynkronisering

När du ändrar någon av dina utlösare måste Functions-infrastrukturen vara medveten om ändringarna. Synkronisering sker automatiskt för många distributionstekniker. I vissa fall måste du dock synkronisera utlösarna manuellt.

Du måste synkronisera utlösare manuellt när du använder följande distributionsalternativ:

Du kan synkronisera utlösare på något av följande sätt:

  • Starta om funktionsappen i Azure Portal.

  • az rest Använd kommandot för att skicka en HTTP POST-begäran som anropar API:etsyncfunctiontriggers, som i det här exemplet:

    az rest --method post --url https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Web/sites/<APP_NAME>/syncfunctiontriggers?api-version=2016-08-01
    

När du distribuerar en uppdaterad version av distributionspaketet och underhåller samma externa paket-URL måste du starta om funktionsappen manuellt. Detta anger för värden att den ska synkronisera och distribuera om dina uppdateringar från samma paket-URL. Functions-värden utför också en synkronisering av bakgrundsutlösare när programmet har startats. För värdplaner för förbrukning och Elastic Premium bör du dock även synkronisera utlösare manuellt i följande scenarier:

  • Distributioner med hjälp av en extern paket-URL med antingen ARM-mallar eller Terraform.
  • När du uppdaterar distributionspaketet på samma externa paket-URL.

Fjärrbygge

Du kan begära att Azure Functions utför en fjärrversion av kodprojektet under distributionen. I dessa scenarier bör du begära en fjärrversion i stället för att bygga lokalt:

  • Du distribuerar en app till en Linux-baserad funktionsapp som har utvecklats på en Windows-dator. Detta är ofta fallet för Utveckling av Python-appar. Du kan hamna i felaktiga bibliotek som används när du skapar distributionspaketet lokalt i Windows.
  • Projektet har beroenden för ett anpassat paketindex.
  • Du vill minska storleken på distributionspaketet.

Hur du begär en fjärrversion beror på om din app körs i Azure i Windows eller Linux.

Alla funktionsappar som körs i Windows har en liten hanteringsapp, den scm webbplats som tillhandahålls av Kudu. Den här webbplatsen hanterar mycket av distributions- och bygglogik för Azure Functions.

När en app distribueras till Windows körs språkspecifika kommandon som dotnet restore (C#) eller npm install (JavaScript).

Följande överväganden gäller när du använder fjärrversioner under distributionen:

  • Fjärrversioner stöds för funktionsappar som körs på Linux i förbrukningsplanen. Distributionsalternativen är dock begränsade för dessa appar eftersom de inte har någon scm (Kudu) webbplats.
  • Funktionsappar som körs på Linux i en Premium-plan eller i en dedikerad (App Service)-plan har en scm (Kudu)-webbplats, men den är begränsad jämfört med Windows.
  • Fjärrversioner utförs inte när en app använder run-from-package. Information om hur du använder fjärrbygge i dessa fall finns i Zip-distribution.
  • Du kan ha problem med fjärrbygge när din app skapades innan funktionen gjordes tillgänglig (1 augusti 2019). För äldre appar skapar du antingen en ny funktionsapp eller kör az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME> för att uppdatera funktionsappen. Det här kommandot kan ta två försök att lyckas.

Lagring av appinnehåll

Paketbaserade distributionsmetoder lagrar paketet i lagringskontot som är associerat med funktionsappen, som definieras i inställningen AzureWebJobsStorage . När det är tillgängligt försöker appar med förbrukning och Elastic Premium-abonnemang använda Azure Files-innehållsresursen från det här kontot, men du kan också underhålla paketet på en annan plats. Flex Consumption Plan-appar använder i stället en lagringscontainer i standardlagringskontot, såvida du inte konfigurerar ett annat lagringskonto som ska användas för distribution. Mer information finns i Artikeln om var appinnehåll lagras i varje distributionsteknik som beskrivs i nästa avsnitt.

Viktigt!

Lagringskontot används för att lagra viktiga appdata, ibland inklusive själva programkoden. Du bör begränsa åtkomsten från andra appar och användare till lagringskontot.

Information om distributionsteknik

Följande distributionsmetoder är tillgängliga i Azure Functions.

En distribution

En distribution är den enda distributionsteknik som stöds för appar i Flex Consumption-planen. Slutresultatet är ett färdigt .zip paket som funktionsappen körs på.

Så här använder du den: Distribuera med Visual Studio Code-publiceringsfunktionen eller från kommandoraden med hjälp av Azure Functions Core Tools eller Azure CLI. Vår Azure Dev Ops-uppgift och GitHub Action utnyttjar på samma sätt en distribution när de upptäcker att en Flex Consumption-app distribueras till.

När du skapar en Flex Consumption-app måste du ange en container för distributionslagring (blob) samt en autentiseringsmetod för den. Som standard används samma lagringskonto som AzureWebJobsStorage anslutningen, med en anslutningssträng som autentiseringsmetod. Därför konfigureras dina distributionsinställningar under appskapandetiden utan behov av programinställningar.

När du ska använda den: En distribution är den enda distributionsteknik som är tillgänglig för funktionsappar som körs i Flex Consumption-planen.

Var appinnehåll lagras: När du skapar en Flex Consumption-funktionsapp anger du en distributionslagringscontainer. Det här är en blobcontainer där plattformen laddar upp appinnehållet som du distribuerade. Om du vill ändra platsen kan du gå till bladet Distributionsinställningar i Azure Portal eller använda Azure CLI.

Zip-distribution

Zip-distribution är standard och rekommenderad distributionsteknik för funktionsappar i abonnemangen Förbrukning, Elastic Premium och App Service (Dedikerad). Slutresultatet är ett färdigt .zip paket som funktionsappen körs på. Den skiljer sig från url:en för externa paket eftersom vår plattform ansvarar för fjärrbyggande och lagring av appinnehåll.

Så här använder du det: Distribuera med hjälp av ditt favoritklientverktyg: Visual Studio Code, Visual Studio eller från kommandoraden med Hjälp av Azure Functions Core Tools eller Azure CLI. Vår Azure Dev Ops-uppgift och GitHub Action utnyttjar på samma sätt zip-distribution.

När du distribuerar med zip-distribution kan du ange att appen ska köras från paketet. Om du vill köra från paketet anger du värdet för programinställningen WEBSITE_RUN_FROM_PACKAGE till 1. Vi rekommenderar zip-distribution. Det ger snabbare inläsningstider för dina program och är standard för VS Code, Visual Studio och Azure CLI.

När du ska använda det: Zip-distribution är standard och rekommenderad distributionsteknik för funktionsappar i Windows-förbruknings-, Windows- och Linux Elastic Premium-planer samt Windows- och Linux App Service-planer (Dedikerad).

Där appinnehåll lagras: Appinnehåll från en zip-distribution lagras som standard i filsystemet, som kan säkerhetskopieras av Azure Files från det lagringskonto som angavs när funktionsappen skapades. I Linux-förbrukning sparas appinnehållet i stället på en blob i lagringskontot som anges av appinställningen AzureWebJobsStorage , och appinställningen WEBSITE_RUN_FROM_PACKAGE får värdet för blob-URL:en.

Url för externt paket

Extern paket-URL är ett alternativ om du vill styra hur distributioner utförs manuellt. Du tar ansvar för att ladda upp ett färdigt .zip paket som innehåller ditt byggda appinnehåll till bloblagring och refererar till den här externa URL:en som en programinställning i funktionsappen. När din app startas om hämtar den paketet, monterar det och körs i läget Kör från paket .

Så här använder du det: Lägg till WEBSITE_RUN_FROM_PACKAGE i dina programinställningar. Värdet för den här inställningen ska vara en blob-URL som pekar på platsen för det specifika paket som du vill att appen ska köra. Du kan lägga till inställningar antingen i portalen eller med hjälp av Azure CLI.

Om du använder Azure Blob Storage kan funktionsappen komma åt containern antingen med hjälp av en hanterad identitetsbaserad anslutning eller med en signatur för delad åtkomst (SAS). Det alternativ du väljer påverkar vilken typ av URL du använder som värde för WEBSITE_RUN_FROM_PACKAGE. Hanterad identitet rekommenderas för övergripande säkerhet och eftersom SAS-token upphör att gälla och måste underhållas manuellt.

När du distribuerar paketfilen som en funktionsapp refererar till måste du synkronisera utlösare manuellt, inklusive den inledande distributionen. När du ändrar innehållet i paketfilen och inte själva URL:en måste du även starta om funktionsappen för att synkronisera utlösare. Se vår guide om hur du konfigurerar den här distributionstekniken.

När du ska använda den: Extern paket-URL är den enda distributionsmetod som stöds för appar som körs i Linux-förbrukningsplanen när du inte vill att en fjärrversion ska ske. Den här metoden är också den rekommenderade distributionstekniken när du skapar din app utan Azure Files. För skalbara appar som körs på Linux bör du i stället överväga flexförbrukningsplan som värd.

Var appinnehåll lagras: Du ansvarar för att ladda upp appinnehållet till Blob Storage. Du kan använda valfritt bloblagringskonto, men Azure Blob Storage rekommenderas.

Docker-container

Du kan distribuera en funktionsapp som körs i en Linux-container.

Så här använder du den: Skapa dina funktioner i en Linux-container och distribuera sedan containern till en Premium- eller Dedikerad plan i Azure Functions eller en annan containervärd. Använd Azure Functions Core Tools för att skapa en anpassad Dockerfile för ditt projekt som du använder för att skapa en containerbaserad funktionsapp. Du kan använda containern i följande distributioner:

När du ska använda den: Använd alternativet Docker-container när du behöver mer kontroll över Linux-miljön där funktionsappen körs och var containern finns. Den här distributionsmekanismen är endast tillgänglig för funktioner som körs i Linux.

Där appinnehåll lagras: Appinnehåll lagras i det angivna containerregistret som en del av avbildningen.

Källkontroll

Du kan aktivera kontinuerlig integrering mellan din funktionsapp och en källkodslagringsplats. När källkontrollen är aktiverad utlöser en uppdatering av kod i den anslutna källlagringsplatsen distributionen av den senaste koden från lagringsplatsen. Mer information finns i Kontinuerlig distribution för Azure Functions.

Så här använder du det: Det enklaste sättet att konfigurera publicering från källkontroll är från Distributionscenter i området Funktioner i portalen. Mer information finns i Kontinuerlig distribution för Azure Functions.

När du ska använda den: Att använda källkontroll är bästa praxis för team som samarbetar i sina funktionsappar. Källkontroll är ett bra distributionsalternativ som möjliggör mer avancerade distributionspipelines. Källkontrollen är vanligtvis aktiverad på en mellanlagringsplats, som kan växlas till produktion efter validering av uppdateringar från lagringsplatsen. Mer information finns i Distributionsfack för Azure Functions.

Var appinnehåll lagras: Appinnehållet finns i källkontrollsystemet, men ett lokalt klonat och byggt appinnehåll från lagras i appfilsystemet, som kan backas upp av Azure Files från lagringskontot som angavs när funktionsappen skapades.

Lokal Git

Du kan använda lokal Git för att skicka kod från din lokala dator till Azure Functions med hjälp av Git.

Så här använder du den: Följ anvisningarna i Lokal Git-distribution till Azure App Service.

När du ska använda det: För att minska risken för fel bör du undvika att använda distributionsmetoder som kräver ytterligare steg för att synkronisera utlösare manuellt. Använd zip-distribution när det är möjligt.

Där appinnehåll lagras: Appinnehåll lagras i filsystemet, som kan säkerhetskopieras av Azure Files från det lagringskonto som angavs när funktionsappen skapades.

FTP/S

Du kan använda FTP/S för att direkt överföra filer till Azure Functions, men den här distributionsmetoden rekommenderas inte. När du inte planerar att använda FTP bör du inaktivera det. Om du väljer att använda FTP bör du framtvinga FTPS. Mer information om hur du använder Azure Portal finns i Framtvinga FTPS.

Så här använder du den: Följ anvisningarna i FTPS-distributionsinställningarna för att hämta den URL och de autentiseringsuppgifter som du kan använda för att distribuera till funktionsappen med FTPS.

När du ska använda det: För att minska risken för fel bör du undvika att använda distributionsmetoder som kräver ytterligare steg för att synkronisera utlösare manuellt. Använd zip-distribution när det är möjligt.

Där appinnehåll lagras: Appinnehåll lagras i filsystemet, som kan säkerhetskopieras av Azure Files från det lagringskonto som angavs när funktionsappen skapades.

Portalredigering

I den portalbaserade redigeraren kan du direkt redigera de filer som finns i funktionsappen (i princip distribuera varje gång du sparar ändringarna).

Så här använder du den: För att kunna redigera dina funktioner i Azure Portal måste du ha skapat dina funktioner i portalen. Om du vill bevara en enda sanningskälla gör du funktionen skrivskyddad med någon annan distributionsmetod och förhindrar fortsatt portalredigering. Om du vill återgå till ett tillstånd där du kan redigera dina filer i Azure Portal kan du manuellt återställa redigeringsläget till Read/Write och ta bort eventuella distributionsrelaterade programinställningar (till exempel WEBSITE_RUN_FROM_PACKAGE).

När du ska använda den: Portalen är ett bra sätt att komma igång med Azure Functions. För mer avancerat utvecklingsarbete rekommenderar vi att du använder något av följande klientverktyg:

Där appinnehåll lagras: Appinnehåll lagras i filsystemet, som kan säkerhetskopieras av Azure Files från det lagringskonto som angavs när funktionsappen skapades.

I följande tabell visas de operativsystem och språk som stöder redigering i portalen:

Språk Windows-förbrukning Windows Premium Windows Dedicated Linux-förbrukning Linux Premium Dedikerad Linux
C#1
Java
JavaScript (Node.js)
Python2
PowerShell
TypeScript (Node.js)

1 Redigering i portalen stöds endast för C#-skriptfiler som körs i processen med värden. Mer information finns i utvecklarreferensen för Azure Functions C#-skript (.csx).
2 Redigering i portalen stöds endast för python-programmeringsmodellen v1.

Distributionsbeteenden

När du distribuerar uppdateringar av funktionsappens kod avslutas de funktioner som körs för närvarande. När distributionen är klar läses den nya koden in för att börja bearbeta begäranden. Läs Förbättra prestanda och tillförlitlighet för Azure Functions för att lära dig hur du skriver tillståndslösa och defensiva funktioner.

Om du behöver mer kontroll över den här övergången bör du använda distributionsfack.

Distributionsfack

När du distribuerar din funktionsapp till Azure kan du distribuera till ett separat distributionsfack i stället för direkt till produktion. Att distribuera till ett distributionsfack och sedan växla till produktion efter verifiering är det rekommenderade sättet att konfigurera kontinuerlig distribution.

Hur du distribuerar till ett fack beror på vilket distributionsverktyg du använder. När du till exempel använder Azure Functions Core Tools inkluderar--slot du alternativet för att ange namnet på ett specifikt fack för func azure functionapp publish kommandot.

Mer information om distributionsplatser finns i dokumentationen för Distributionsfack för Azure Functions för mer information.

Nästa steg

Läs de här artiklarna om du vill veta mer om hur du distribuerar dina funktionsappar: