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 d:\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 från en paketfil:

  • Minskar risken för problem med filkopieringslåsning.
  • Kan distribueras till en produktionsapp (med omstart).
  • Du kan vara säker på vilka filer som körs i din app.
  • Förbättrar prestandan för Azure Resource Manager-distributioner.
  • Kan minska 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

Om du vill att funktionsappen ska kunna köras från ett paket lägger du till en WEBSITE_RUN_FROM_PACKAGE inställning i inställningarna för funktionsappen. Inställningen WEBSITE_RUN_FROM_PACKAGE kan ha något av följande värden:

Värde Description
1 Anger att funktionsappen körs från en lokal paketfil som distribueras i mappen (Windows) eller /home/data/SitePackages (Linux) i d:\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 alternativen 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.
Dedikerad 1 rekommenderas. 1 rekommenderas.

Allmänna överväganden

  • Paketfilen måste vara .zip-formaterad. Tar- och gzip-format stöds inte för närvarande.
  • 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 blir mappen skrivskyddad och du får ett felmeddelande när du skriver filer till den här katalogen. Filer är också skrivskyddade i Azure-portalen.
  • Den maximala storleken för en distributionspaketfil är för närvarande 1 GB.
  • Du kan inte använda lokal cache 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 SCM_DO_BUILD_DURING_DEPLOYMENT=true för distributionsanpassning. För Linux lägger du också till inställningen ENABLE_ORYX_BUILD=true . Mer information finns i Fjärrbygge.

Kommentar

WEBSITE_RUN_FROM_PACKAGE fungerar inte med MSDeploy enligt beskrivningen här. Du får ett fel under distributionen som ARM-MSDeploy Deploy Failed. Ändra /MSDeploy till /ZipDeploy så löses det här felet.

Lägga 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.

Använda 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 i 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 d:\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 d:\home\data\SitePackages mappen (Windows) eller /home/data/SitePackages (Linux).

Med appinställningsvärdet WEBSITE_RUN_FROM_PACKAGE1kopierar ZIP-distributions-API:erna ditt paket till d:\home\data\SitePackages mappen (Windows) eller /home/data/SitePackages (Linux) i stället för att extrahera filerna till d:\home\site\wwwroot (Windows) eller /home/site/wwwroot (Linux). Den skapar packagename.txt också filen. Efter en omstart monteras wwwroot paketet på 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. 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.

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 paket på Linux som finns i en förbrukningsplan.

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

  • När du kör en funktionsapp i Windows ger appinställningen WEBSITE_RUN_FROM_PACKAGE = <URL> sämre prestanda för kallstart och rekommenderas inte.
  • 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.
  • Du bör inte distribuera 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 har aktiverat 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 komprimerat .zip-distributionspaket och ladda upp det till målet. Det här exemplet distribueras till en container i Blob Storage.

  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 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 den offentliga åtkomstnivån är Privat och väljer Skapa.

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

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

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

  9. I funktionsappen väljer du Konfigurationer under Inställningar.

  10. På fliken Program Inställningar väljer du Ny programinställning

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

  12. Välj OK. Välj sedan Spara>Fortsätt för att spara inställningen och starta om appen.

Nu kan du köra funktionen i Azure för att kontrollera att distributionen har slutförts med hjälp av zip-filen för distributionspaketet.

Följande visar en funktionsapp som är konfigurerad att köras från en .zip-fil som finns i Azure Blob Storage:

WEBSITE_RUN_FROM_ZIP app setting

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

Azure Blob Storage kan konfigureras för att auktorisera begäranden med Microsoft Entra-ID. Det innebär att i stället för att generera en SAS-nyckel med en förfallotid kan du i stället 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å acceptera "SystemAssigned" som ett värde, även om det är samma sak som att utelämna inställningen helt och hållet.

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. Detta kommer troligen att vara av formuläret "https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}" eller liknande.

Nästa steg