Dela via


Köra dina funktioner från en paketfil i Azure

I Azure kan du köra dina funktioner direkt från en distributionspaketfil i funktionsappen. Det andra alternativet är att distribuera dina filer i katalogen (Windows) eller /home/site/wwwroot (Linux) i c:\home\site\wwwroot funktionsappen.

I den här artikeln beskrivs fördelarna med att köra dina funktioner från ett paket. Den visar också hur du aktiverar den här funktionen i funktionsappen.

Fördelar med att köra från en paketfil

Det finns flera fördelar med att köra funktioner från en paketfil:

  • Minskar risken för problem med filkopieringslåsning.
  • Kan distribueras till en produktionsapp (med omstart).
  • Verifierar de filer som körs i din app.
  • Förbättrar prestandan för Azure Resource Manager-distributioner.
  • Minskar kalla starttider, särskilt för JavaScript-funktioner med stora npm-paketträd.

Mer information finns i det här meddelandet.

Aktivera funktioner som ska köras från ett paket

Funktionsappar på Flex Consumption-värdplanen körs som standard från ett paket. Ingen särskild konfiguration behöver göras.

Om du vill att funktionsappen ska kunna köras från ett paket i värdplanerna Förbrukning, Elastic Premium och Dedikerad (App Service) lägger du till en WEBSITE_RUN_FROM_PACKAGE appinställning i funktionsappen. Appinställningen WEBSITE_RUN_FROM_PACKAGE kan ha något av följande värden:

Värde beskrivning
1 Anger att funktionsappen körs från en lokal paketfil som distribueras i mappen (Windows) eller /home/data/SitePackages (Linux) i c:\home\data\SitePackages funktionsappen.
<URL> Anger en URL som är fjärrplatsen för den specifika paketfil som du vill köra. Krävs för funktioner som körs på Linux i en förbrukningsplan.

Följande tabell anger de rekommenderade WEBSITE_RUN_FROM_PACKAGE värdena för distribution till ett specifikt operativsystem och en värdplan:

Värdplan Windows Linux
Förbrukning 1 rekommenderas starkt. Endast <URL> stöds.
Premium 1 rekommenderas. 1 rekommenderas.
Hängiven 1 rekommenderas. 1 rekommenderas.

Allmänna överväganden

  • Lägg inte till appinställningen WEBSITE_RUN_FROM_PACKAGE i appar i Flex Consumption-planen .
  • Paketfilen måste vara .zip formaterad. Tar- och gzip-format stöds inte.
  • Zip-distribution rekommenderas.
  • När du distribuerar funktionsappen till Windows bör du ange WEBSITE_RUN_FROM_PACKAGE till 1 och publicera med zip-distribution.
  • När du kör från ett paket wwwroot är mappen skrivskyddad och du får ett felmeddelande om du skriver filer till den här katalogen. Filer är också skrivskyddade i Azure Portal.
  • Den maximala storleken för en distributionspaketfil är 1 GB.
  • Du kan inte använda den lokala cachen när du kör från ett distributionspaket.
  • Om ditt projekt behöver använda fjärrbygge ska du inte använda appinställningen WEBSITE_RUN_FROM_PACKAGE . Lägg i stället till appinställningen för distributionsanpassning SCM_DO_BUILD_DURING_DEPLOYMENT=true . För Linux lägger du också till inställningen ENABLE_ORYX_BUILD=true . Mer information finns i Fjärrbygge.

Kommentar

Appinställningen WEBSITE_RUN_FROM_PACKAGE fungerar inte med MSDeploy enligt beskrivningen i MSDeploy VS. ZipDeploy. Du får ett fel under distributionen, till exempel ARM-MSDeploy Deploy Failed. Lös det här felet genom att ändra /MSDeploy till /ZipDeploy.

Lägg till inställningen WEBSITE_RUN_FROM_PACKAGE

Det finns flera sätt att lägga till, uppdatera och ta bort funktionsappinställningar:

Ändringar i funktionsappsinställningarna kräver att funktionsappen startas om.

Skapa zip-arkivet

Zip-arkivet som du distribuerar måste innehålla alla filer som behövs för att köra funktionsappen. Du kan skapa ett zip-arkiv manuellt från innehållet i en Functions-projektmapp med hjälp av inbyggda .zip komprimeringsfunktioner eller verktyg från tredje part.

Arkivet måste innehålla host.json filen i roten för den extraherade mappen. Den valda språkstacken för funktionsappen skapar ytterligare krav:

Viktigt!

För språk som genererar kompilerade utdata för distribution ska du komprimera innehållet i utdatamappen som du planerar att publicera och inte hela projektmappen. När Functions extraherar innehållet i zip-arkivet host.json måste filen finnas i paketets rot.

Använd WEBSITE_RUN_FROM_PACKAGE = 1

Det här avsnittet innehåller information om hur du kör funktionsappen från en lokal paketfil.

Överväganden för att distribuera från ett lokalt paket

  • Att använda ett lokalt paket är det rekommenderade alternativet för att köra från distributionspaketet, förutom när det körs på Linux som finns i en förbrukningsplan.
  • Zip-distribution är det rekommenderade sättet att ladda upp ett distributionspaket till din plats.
  • När du inte använder zip-distribution kontrollerar du att c:\home\data\SitePackages mappen (Windows) eller /home/data/SitePackages (Linux) har en fil med namnet packagename.txt. Den här filen innehåller endast namnet, utan blanksteg, på paketfilen i den här mappen som körs för närvarande.

Integrering med zip-distribution

Zip-distribution är en funktion i Azure App Service som gör att du kan distribuera ditt funktionsappsprojekt till wwwroot katalogen. Projektet paketeras som en .zip distributionsfil. Samma API:er kan användas för att distribuera paketet till c:\home\data\SitePackages mappen (Windows) eller /home/data/SitePackages (Linux).

När du anger appinställningsvärdet WEBSITE_RUN_FROM_PACKAGE till 1kopierar ZIP-distributions-API:erna ditt paket till c:\home\data\SitePackages mappen (Windows) eller /home/data/SitePackages (Linux) i stället för att extrahera filerna till c:\home\site\wwwroot (Windows) eller /home/site/wwwroot (Linux). Den skapar packagename.txt också filen. När funktionsappen startas om automatiskt monteras wwwroot paketet som ett skrivskyddat filsystem. Mer information om zip-distribution finns i Zip-distribution för Azure Functions.

Kommentar

När en distribution sker utlöses en omstart av funktionsappen. Funktionskörningar som körs under distributionen avslutas. Information om hur du skriver tillståndslösa och defensiva funktioner finns i Skrivfunktioner så att de är tillståndslösa.

Använda WEBSITE_RUN_FROM_PACKAGE = URL

Det här avsnittet innehåller information om hur du kör funktionsappen från ett paket som distribuerats till en URL-slutpunkt. Det här alternativet är det enda som stöds för att köra från ett Linux-värdbaserat paket med en förbrukningsplan. Det här alternativet stöds inte i Flex Consumption-planen .

Överväganden för att distribuera från en URL

  • Ange WEBSITE_RUN_FROM_PACKAGE = <URL> inte i appar i Flex Consumption-planen . Det här alternativet stöds inte.
  • Funktionsappar som körs i Windows upplever en liten ökning av kallstartstiden när programpaketet distribueras till en URL-slutpunkt via WEBSITE_RUN_FROM_PACKAGE = <URL>.
  • När du anger en URL måste du även synkronisera utlösare manuellt när du har publicerat ett uppdaterat paket.
  • Functions-körningen måste ha behörighet att komma åt paket-URL:en.
  • Distribuera inte paketet till Azure Blob Storage som en offentlig blob. Använd i stället en privat container med en signatur för delad åtkomst (SAS) eller använd en hanterad identitet för att aktivera Functions-körningen för att få åtkomst till paketet.
  • Du måste underhålla alla SAS-URL:er som används för distribution. När en SAS upphör att gälla kan paketet inte längre distribueras. I det här fallet måste du generera en ny SAS och uppdatera inställningen i funktionsappen. Du kan eliminera den här hanteringsbördan med hjälp av en hanterad identitet.
  • När du kör en Premium-plan måste du eliminera kallstarter.
  • När du kör en dedikerad plan kontrollerar du att du aktiverar AlwaysOn.
  • Du kan använda Azure Storage Explorer för att ladda upp paketfiler till blobcontainrar i ditt lagringskonto.

Ladda upp ett paket manuellt till Blob Storage

Om du vill distribuera ett zippat paket när du använder ALTERNATIVET URL måste du skapa ett .zip komprimerat distributionspaket och ladda upp det till målet. Följande procedur distribuerar till en container i Blob Storage:

  1. Skapa ett .zip paket för projektet med det verktyg du väljer.

  2. I Azure Portal söker du efter ditt lagringskontonamn eller bläddrar efter det i listan med lagringskonton.

  3. I lagringskontot väljer du Containrar under Datalagring.

  4. Välj + Container för att skapa en ny Blob Storage-container i ditt konto.

  5. På sidan Ny container anger du ett Namn (till exempel distributioner), kontrollerar att åtkomstnivån Anonym är Privat och väljer sedan Skapa.

  6. Välj containern du skapade, välj Ladda upp, bläddra till platsen för den .zip fil som du skapade med projektet och välj sedan Ladda upp.

  7. När uppladdningen är klar väljer du den uppladdade blobfilen och kopierar URL:en. Om du inte använder en hanterad identitet kan du behöva generera en SAS-URL.

  8. Sök efter din funktionsapp eller bläddra efter den på sidan Funktionsapp .

  9. I funktionsappen expanderar du Inställningar och väljer sedan Miljövariabler.

  10. På fliken Appinställningar väljer du + Lägg till.

  11. Ange värdet för Namn och klistra in URL:en för paketet i Blob Storage för värdet.WEBSITE_RUN_FROM_PACKAGE

  12. Välj Använd och välj sedan Använd och bekräfta för att spara inställningen och starta om funktionsappen.

Nu kan du köra funktionen i Azure för att kontrollera att distributionen av distributionspaketet .zip filen lyckades.

Hämta ett paket från Azure Blob Storage med hjälp av en hanterad identitet

Du kan konfigurera Azure Blob Storage för att auktorisera begäranden med Microsoft Entra-ID. Den här konfigurationen innebär att du i stället för att generera en SAS-nyckel med förfallodatum kan förlita dig på programmets hanterade identitet. Som standard används appens systemtilldelade identitet. Om du vill ange en användartilldelad identitet kan du ange appinställningen WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID till resurs-ID för den identiteten. Inställningen kan också accepteras SystemAssigned som ett värde, vilket motsvarar att utelämna inställningen.

Så här aktiverar du att paketet hämtas med hjälp av identiteten:

  1. Kontrollera att bloben har konfigurerats för privat åtkomst.

  2. Ge identiteten rollen Storage Blob Data Reader med omfång över paketbloben. Mer information om hur du skapar rolltilldelningen finns i Tilldela en Azure-roll för åtkomst till blobdata .

  3. Ange programinställningen WEBSITE_RUN_FROM_PACKAGE till paketets blob-URL. Den här URL:en är vanligtvis av formuläret https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} eller liknande.