Kör din app i Azure App Service direkt från ett ZIP-paket

I Azure App Service kan du köra dina appar direkt från en ZIP-paketfil för distribution. Den här artikeln visar hur du aktiverar den här funktionen i din app.

Alla andra distributionsmetoder i App Service har något gemensamt: filerna distribueras till D:\home\site\wwwroot i din app (eller /home/site/wwwroot för Linux-appar). Eftersom samma katalog används av din app vid körning är det möjligt att distributionen misslyckas på grund av fillåskonflikter och att appen beter sig oförutsägbart eftersom vissa av filerna ännu inte har uppdaterats.

När du däremot kör direkt från ett paket kopieras inte filerna i paketet till katalogen wwwroot . I stället monteras själva ZIP-paketet direkt som den skrivskyddade wwwroot-katalogen . Det finns flera fördelar med att köra direkt från ett paket:

  • Eliminerar fillåskonflikter mellan distribution och körning.
  • Säkerställer att endast fullständigt distribuerade appar körs när som helst.
  • Kan distribueras till en produktionsapp (med omstart).
  • Förbättrar prestanda för Azure Resource Manager distributioner.
  • Kan minska kallstartstiderna, särskilt för JavaScript-funktioner med stora npm-paketträd.

Anteckning

För närvarande stöds endast ZIP-paketfiler.

Skapa ett ZIP-projektpaket

Anteckning

Om du har laddat ned filerna i ett ZIP-paket extraherar du filerna först. Om du till exempel har laddat ned ett ZIP-paket GitHub kan du inte distribuera filen som den är. GitHub lägger till ytterligare kapslade kataloger, som inte fungerar med App Service.

I ett lokalt terminalfönster navigerar du till approjektets rotkatalog.

Den här katalogen ska innehålla postfilen till webbappen, till exempelindex.html, index.php och app.js. Den kan också innehålla pakethanteringsfiler som project.json, composer.json, package.json, bower.json ochrequirements.txt.

Om du inte App Service att köra distributionsautomatisering åt dig, kör du alla bygguppgifter (npmtill exempel , bower, gulp, composeroch pip) och ser till att du har alla filer som du behöver för att köra appen. Det här steget krävs om du vill köra paketet direkt.

Skapa ett ZIP-arkiv med allt i projektet. För dotnet projekt är den här mappen utdatamappen för dotnet publish kommandot . Följande kommando använder standardverktyget i terminalen:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

Aktivera körning från paket

Med WEBSITE_RUN_FROM_PACKAGE appinställningen kan du köra från ett paket. Ange det genom att köra följande kommando med Azure CLI.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"

WEBSITE_RUN_FROM_PACKAGE="1" låter dig köra din app från ett lokalt paket till din app. Du kan också köra från ett fjärrpaket.

Kör paketet

Det enklaste sättet att köra ett paket i App Service är med kommandot Azure CLI az webapp deployment source config-zip. Till exempel:

az webapp deployment source config-zip --resource-group <group-name> --name <app-name> --src <filename>.zip

Eftersom appinställningen WEBSITE_RUN_FROM_PACKAGE har angetts extraherar det här kommandot inte paketinnehållet till katalogen D:\home\site\wwwroot för din app. I stället överför den ZIP-filen som den är till D:\home\data\SitePackages och skapar en packagename.txt i samma katalog som innehåller namnet på ZIP-paketet som ska läsas in vid körning. Om du överför ZIP-paketet på ett annat sätt (till exempel FTP) måste du skapa katalogen D:\home\data\SitePackages ochpackagename.txt manuellt.

Kommandot startar också om appen. Eftersom WEBSITE_RUN_FROM_PACKAGE är inställt App Service monterar det uppladdade paketet som den skrivskyddade wwwroot-katalogen och kör appen direkt från den monterade katalogen.

Kör från extern URL i stället

Du kan också köra ett paket från en extern URL, till exempel Azure Blob Storage. Du kan använda Azure Storage Explorer för att ladda upp paketfiler till ditt Blob Storage-konto. Du bör använda en privat lagringscontainer med en signatur för delad åtkomst (SAS) eller använda en hanterad identitet för att App Service att få åtkomst till paketet på ett säkert sätt.

När du har laddat upp filen till Blob Storage och har en SAS-URL för filen anger du WEBSITE_RUN_FROM_PACKAGE appinställningen till URL:en. I följande exempel används Azure CLI:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_RUN_FROM_PACKAGE="https://myblobstorage.blob.core.windows.net/content/SampleCoreMVCApp.zip?st=2018-02-13T09%3A48%3A00Z&se=2044-06-14T09%3A48%3A00Z&sp=rl&sv=2017-04-17&sr=b&sig=bNrVrEFzRHQB17GFJ7boEanetyJ9DGwBSV8OM3Mdh%2FM%3D"

Om du publicerar ett uppdaterat paket med samma namn till Blob Storage måste du starta om appen så att det uppdaterade paketet läses in i App Service.

Hämta ett paket från en Azure Blob Storage en hanterad identitet

Azure Blob Storage kan konfigureras för att auktorisera begäranden med Azure AD. Det innebär att du i stället för att generera en SAS-nyckel med en förfallotid kan förlita dig på programmets hanterade identitet. Som standard används appens system tilldelade identitet. Om du vill ange en användartilldelningsidentitet 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 detta är detsamma som att utelämna inställningen helt och hållet.

Så här gör du för att paketet ska hämtas med hjälp av identiteten:

  1. Kontrollera att bloben är konfigurerad för privat åtkomst.

  2. Ge identiteten rollen Storage Blob Data Reader med omfång för 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 ha formen "https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}" eller liknande.

Felsökning

  • Om du kör direkt från ett paket wwwroot blir det skrivskyddade. Appen får ett felmeddelande om den försöker skriva filer till den här katalogen.
  • TAR- och GZIP-format stöds inte.
  • ZIP-filen kan vara högst 1 GB
  • Den här funktionen är inte kompatibel med lokal cache.
  • För bättre kallstartsprestanda använder du det lokala zip-alternativet (WEBSITE_RUN_FROM_PACKAGE=1).

Fler resurser