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 c:\home\site\wwwroot-katalogen (Windows) eller /home/site/wwwroot-katalogen (Linux) för din funktionsapp.

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 produktionsapplikation (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ärdplan körs som standard från en paketlösning. 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 distribuerats i c:\home\data\SitePackages (Windows) eller /home/data/SitePackages (Linux)-mappen för din funktionsapp.
<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:

Hostingplan Windows Linux
Förbrukning 1 rekommenderas starkt. Endast <URL> stöds.
Premie 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-portalen.
  • Den maximala storleken för en distributionspaketfil är 1 GB.
    • Distributionen använder tillfällig lagring när du packar upp dina projektfiler. Det innebär att funktionsappen måste ha tillräckligt med tillgängligt tillfälligt lagringsutrymme för att lagra innehållet i paketet. Tänk på att den tillfälliga lagringsgränsen för en förbrukningsplan är 500 MB per plan. Mer information om hur du felsöker problem med tillfällig lagring finns i Så här felsöker du tillfällig lagring i Azure App Service.
  • 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.

Anmärkning

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 manuellt skapa ett zip-arkiv från innehållet i en Functions-projektmapp med hjälp av inbyggda .zip komprimeringsfunktioner eller verktyg som inte kommer från Microsoft.

Arkivet måste innehålla host.json filen i roten för den extraherade mappen. Den valda språkstacken för funktionsappen skapar andra 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 kommandot 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 implementera från ett på-plats-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-implementering är det rekommenderade sättet att ladda upp ett implementeringspaket till din webbplats.
  • 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 också packagename.txt-filen. När funktionsappen startas om automatiskt monteras paketet på wwwroot som ett skrivskyddat filsystem. Mer information om zip-distribution finns i Zip-distribution för Azure Functions.

Anmärkning

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änd 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 paket som körs på Linux 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örningsmiljön 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 på en Premium-plan, se till att 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-tjänsten:

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

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

  3. I lagringskontot väljer du Containers under Data Storage.

  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 WEBSITE_RUN_FROM_PACKAGE för Namn och klistra in URL:en för paketet i Blob Storage för värdet.

  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å ha SystemAssigned som värde, vilket är likvärdigt med 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. Tilldela 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.

  4. 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å acceptera "SystemAssigned" som ett värde, även om det är samma sak som att utelämna inställningen helt och hållet. Ett resurs-ID är en standardrepresentation för en resurs i Azure. För en användartilldelad hanterad identitet blir det /subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name. Resurs-ID för en användartilldelad hanterad identitet kan hämtas i Inställningar ->Egenskaper ->ID för den användartilldelade hanterade identiteten.