Uw app rechtstreeks vanuit Azure App Service ZIP-pakket uitvoeren

In Azure App Servicekunt u uw apps rechtstreeks uitvoeren vanuit een ZIP-pakketbestand voor de implementatie. In dit artikel wordt beschreven hoe u deze functionaliteit in uw app inschakelen.

Alle andere implementatiemethoden in App Service hebben iets gemeenschappelijks: uw bestanden worden geïmplementeerd naar D:\home\site\wwwroot in uw app (of /home/site/wwwroot voor Linux-apps). Omdat dezelfde map tijdens runtime door uw app wordt gebruikt, is het mogelijk dat de implementatie mislukt vanwege bestandsvergrendelingsconflicten en dat de app zich onvoorspelbaar gedraagt omdat sommige bestanden nog niet zijn bijgewerkt.

Wanneer u daarentegen rechtstreeks vanuit een pakket wordt uitgevoerd, worden de bestanden in het pakket niet gekopieerd naar de map wwwroot. In plaats daarvan wordt het ZIP-pakket zelf rechtstreeks als de alleen-lezen map wwwroot bevestigd. Het rechtstreeks uitvoeren vanuit een pakket heeft verschillende voordelen:

  • Voorkomt bestandsvergrendelingsconflicten tussen implementatie en runtime.
  • Zorgt ervoor dat alleen volledig geïmplementeerde apps op elk moment worden uitgevoerd.
  • Kan worden geïmplementeerd in een productie-app (met opnieuw opstarten).
  • Verbetert de prestaties van Azure Resource Manager implementaties.
  • Kan koude starttijden verminderen, met name voor JavaScript-functies met grote npm-pakketen.

Notitie

Momenteel worden alleen ZIP-pakketbestanden ondersteund.

Een ZIP-projectpakket maken

Notitie

Als u de bestanden in een ZIP-pakket hebt gedownload, moet u eerst de bestanden uitpakken. Als u bijvoorbeeld een ZIP-pakket hebt gedownload van GitHub, kunt u dat bestand niet implementeren zoals het is. GitHub voegt extra geneste directories toe, die niet werken met App Service.

Navigeer in een lokaal terminalvenster naar de hoofdmap van uw app-project.

Deze map moet het invoerbestand voor uw web-app bevatten, zoals index.html, index.php en app.js. Het kan ook pakketbeheerbestanden bevatten zoals project.js op , composer.js op , package.js op , bower.js op en requirements.txt.

Tenzij u App Service implementatieautomatisering voor u wilt uitvoeren, moet u alle buildtaken (bijvoorbeeld , , , en ) uitvoeren en ervoor zorgen dat u alle bestanden hebt die u nodig hebt om de app uit te npm bower gulp composer pip voeren. Deze stap is vereist als u uw pakket rechtstreeks wilt uitvoeren.

Maak een ZIP-archief van alle bestanden in uw project. Voor dotnet projecten is deze map de uitvoermap van de opdracht dotnet publish . De volgende opdracht maakt gebruik van het standaardhulpprogramma in de terminal:

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

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

Uitvoeren vanuit pakket inschakelen

Met WEBSITE_RUN_FROM_PACKAGE de app-instelling kunt u uitvoeren vanuit een pakket. Voer de volgende opdracht uit met Azure CLI om deze in te stellen.

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

WEBSITE_RUN_FROM_PACKAGE="1" met kunt u uw app uitvoeren vanuit een lokaal pakket naar uw app. U kunt ook uitvoeren vanaf een extern pakket.

Het pakket uitvoeren

De eenvoudigste manier om een pakket uit te voeren in uw App Service is met de Azure CLI-opdracht az webapp deployment source config-zip. Bijvoorbeeld:

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

Omdat de app-instelling is ingesteld, wordt met deze opdracht de pakketinhoud niet uitgepakt naar de WEBSITE_RUN_FROM_PACKAGE map D:\home\site\wwwroot van uw app. In plaats daarvan wordt het ZIP-bestand naar D:\home\data\SitePackages geüpload en wordt een packagename.txt gemaakt in dezelfde map, die de naam bevat van het ZIP-pakket dat tijdens runtime moet worden geladen. Als u uw ZIP-pakket op een andere manier uploadt (zoals FTP),moet u de map D:\home\data\SitePackages en het packagename.txt handmatig maken.

Met de opdracht wordt de app ook opnieuw gestart. Omdat is ingesteld, App Service het geüploade pakket als de WEBSITE_RUN_FROM_PACKAGE alleen-lezen map wwwroot en wordt de app rechtstreeks uitgevoerd vanuit die map.

Voer in plaats daarvan uit vanaf een externe URL

U kunt ook een pakket uitvoeren vanaf een externe URL, zoals Azure Blob Storage. U kunt de Azure Storage Explorer om pakketbestanden te uploaden naar uw Blob Storage-account. U moet een privéopslagcontainer met een Shared Access Signature (SAS) gebruiken of een beheerde identiteit gebruiken om de App Service-runtime veilig toegang te geven tot het pakket.

Nadat u het bestand hebt geüpload naar Blob Storage en een SAS-URL voor het bestand hebt, stelt u de WEBSITE_RUN_FROM_PACKAGE app-instelling in op de URL. In het volgende voorbeeld wordt dit uitgevoerd met behulp van 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"

Als u een bijgewerkt pakket met dezelfde naam publiceert naar Blob Storage, moet u uw app opnieuw opstarten zodat het bijgewerkte pakket in de App Service.

Een pakket ophalen uit Azure Blob Storage met behulp van een beheerde identiteit

Azure Blob Storage kunnen worden geconfigureerd voor het autoreren van aanvragen met Azure AD. Dit betekent dat u in plaats van een SAS-sleutel met een vervaldatum kunt vertrouwen op de beheerde identiteit van de toepassing. Standaard wordt de door het systeem toegewezen identiteit van de app gebruikt. Als u een door de gebruiker toegewezen identiteit wilt opgeven, kunt u de app-instelling instellen op de WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID resource-id van die identiteit. De instelling kan ook 'SystemAssigned' als een waarde accepteren, hoewel dit hetzelfde is als het weglaten van de instelling.

U kunt als volgende het pakket ophalen met behulp van de identiteit:

  1. Zorg ervoor dat de blob is geconfigureerd voor privétoegang.

  2. Verleen de identiteit de rol Storage blobgegevenslezer met bereik over de pakketblob. Zie Een Azure-rol toewijzen voor toegang tot blobgegevens voor meer informatie over het maken van de roltoewijzing.

  3. Stel de WEBSITE_RUN_FROM_PACKAGE toepassingsinstelling in op de blob-URL van het pakket. Dit heeft waarschijnlijk de vorm 'https://{naam-opslagaccount}.blob.core.windows.net/{containernaam}/{pad-naar-pakket}' of iets dergelijks.

Problemen oplossen

  • Als u rechtstreeks vanuit een pakket wordt uitgevoerd, wwwroot wordt alleen-lezen gebruikt. Uw app ontvangt een foutmelding als wordt geprobeerd bestanden naar deze map te schrijven.
  • TAR- en GZIP-indelingen worden niet ondersteund.
  • Het ZIP-bestand mag niet meer dan 1 GB zijn
  • Deze functie is niet compatibel met lokale cache.
  • Voor verbeterde prestaties bij koude start gebruikt u de lokale zip-optie ( WEBSITE_RUN_FROM_PACKAGE =1).

Meer bronnen