Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Notitie
Uitvoeren vanuit pakket wordt niet ondersteund voor Python-apps. Wanneer u een ZIP-bestand van uw Python-code implementeert, moet u een vlag instellen om Azure-buildautomatisering in te schakelen. De buildautomatisering maakt de virtuele Python-omgeving voor uw app en installeert de benodigde vereisten en het benodigde pakket. Zie buildautomatisering voor meer informatie.
In Azure App Service kunt u uw apps rechtstreeks vanuit een ZIP-pakketbestand voor de implementatie uitvoeren. In dit artikel wordt beschreven hoe u deze functionaliteit inschakelt in uw app.
Alle andere implementatiemethoden in App Service hebben iets gemeen: uw uitpakbestanden worden geïmplementeerd in D:\home\site\wwwroot in uw app (of /home/site/wwwroot voor Linux-apps). Omdat dezelfde map tijdens runtime door uw app wordt gebruikt, kan de implementatie mislukken vanwege conflicten met bestandsvergrendeling en kan de app onvoorspelbaar gedrag vertonen omdat sommige bestanden nog niet zijn bijgewerkt. Als u deze instelling wilt inschakelen, hoeft u geen waarde toe te wijzen aan de WEBSITE_RUN_FROM_PACKAGE variabele of kunt u deze volledig verwijderen.
Wanneer u daarentegen rechtstreeks vanuit een ZIP-pakket uitvoert, worden de bestanden in het pakket niet naar de wwwroot map gekopieerd. In plaats daarvan wordt het ZIP-pakket zelf rechtstreeks als alleen-lezen gekoppeld aan de wwwroot-map. Als u deze instelling wilt inschakelen, stelt u =1 in WEBSITE_RUN_FROM_PACKAGEof geeft u de URL van het ZIP-bestand op. Er zijn verschillende voordelen om rechtstreeks vanuit een pakket te worden uitgevoerd:
- Elimineert bestandsvergrendelingsconflicten tussen implementatie en runtime.
- Zorgt ervoor dat alleen volledig geïmplementeerde apps op elk gewenst moment worden uitgevoerd.
- Kan worden geïmplementeerd in een productie-app (met opnieuw opstarten).
- Verbetert de prestaties van Azure Resource Manager-implementaties.
- Kan koude begintijden verminderen, met name voor JavaScript-functies met grote npm-pakketstructuren.
Notitie
Momenteel worden alleen ZIP-pakketbestanden ondersteund.
Een ZIP-projectpakket maken
Belangrijk
Wanneer u het ZIP-pakket voor implementatie maakt, neemt u de hoofdmap niet op. Alleen de bestanden en mappen opnemen in de hoofdmap. Als u een GitHub-opslagplaats als een ZIP-bestand downloadt, kunt u dat bestand niet implementeren in App Service. GitHub voegt geneste mappenstructuren toe op het bovenste niveau, wat niet werkt met App Service.
Navigeer in een lokaal terminalvenster naar de hoofdmap van uw app-project.
Deze map moet het invoerbestand bevatten voor uw web-app, zoals index.html, index.phpen app.js. Het kan ook pakketbeheerbestanden bevatten, zoals project.json, composer.json, package.json, bower.json, en requirements.txt.
Als u niet wilt dat App Service implementatieautomatisering voor u uitvoert, voert u alle buildtaken uit. Bijvoorbeeld: npm, bower, gulp, composer en pip. Zorg ervoor dat u alle bestanden hebt die u nodig hebt om de app uit te 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 voegt u alles toe in de uitvoermap van de dotnet publish opdracht, met uitzondering van de uitvoermap zelf. Voer bijvoorbeeld de volgende opdracht in uw terminal in om een ZIP-pakket te maken dat de inhoud van de huidige map bevat:
# Bash
zip -r <file-name>.zip .
# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip
Uitvoeren vanuit ZIP-pakket inschakelen
De WEBSITE_RUN_FROM_PACKAGE app-instelling kan worden uitgevoerd vanuit een ZIP-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" hiermee kunt u uw app uitvoeren vanuit een ZIP-pakket lokaal naar uw app. U kunt ook uitvoeren vanuit een extern pakket.
Het ZIP-pakket uitvoeren
De eenvoudigste manier om een ZIP-pakket uit te voeren in uw App Service is met de Azure CLI az webapp deployment source config-zip command. Voorbeeld:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <filename>.zip
Omdat de WEBSITE_RUN_FROM_PACKAGE app-instelling is ingesteld, wordt met deze opdracht de inhoud van het ZIP-pakket niet geëxtraheerd naar de map D:\home\site\wwwroot van uw app. In plaats daarvan wordt het ZIP-bestand as-is geüpload naar D:\home\data\SitePackages en wordt er 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 bestand handmatig maken.
Met de opdracht wordt de app ook opnieuw opgestart. Omdat WEBSITE_RUN_FROM_PACKAGE is ingesteld, monteert App Service het geüploade pakket als de alleen-lezen wwwroot-map en voert de app rechtstreeks vanuit die gekoppelde map uit.
Uitvoeren vanaf externe URL in plaats daarvan
U kunt ook een ZIP-pakket uitvoeren vanuit een externe URL, zoals Azure Blob Storage. U kunt Azure Storage Explorer gebruiken om ZIP-pakketbestanden te uploaden naar uw Blob Storage-account. U moet een privéopslagcontainer gebruiken met een Shared Access Signature (SAS) of een beheerde identiteit gebruiken om de App Service-runtime in staat te stellen veilig toegang te krijgen tot het ZIP-pakket.
Notitie
Momenteel kan een bestaande App Service-resource waarop een lokaal ZIP-pakket wordt uitgevoerd, niet worden gemigreerd om uit te voeren vanuit een extern ZIP-pakket. U moet een nieuwe App Service-resource maken die is geconfigureerd voor uitvoering vanaf een externe URL.
Nadat u het bestand hebt geüpload naar Blob Storage en een SAS-URL voor het bestand hebt, stelt u de app-instelling WEBSITE_RUN_FROM_PACKAGE in op de URL. Zorg ervoor dat de URL eindigt op .zip. 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 naar Blob Storage publiceert, moet u de app opnieuw opstarten, zodat het bijgewerkte pakket in App Service wordt geladen.
Toegang krijgen tot een pakket in Azure Blob Storage met behulp van een beheerde identiteit
U kunt Azure Blob Storage configureren om aanvragen te autoriseren met Microsoft Entra-id. Deze configuratie betekent dat in plaats van een SAS-sleutel te genereren met een vervaldatum, u in plaats daarvan 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 WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID app-instelling instellen op de resource-id van die identiteit. De instelling kan ook accepteren SystemAssigned als een waarde, wat gelijk is aan het weglaten van de instelling.
Als u wilt dat het pakket wordt opgehaald met behulp van de identiteit:
Zorg ervoor dat de blob is geconfigureerd voor privétoegang.
Ken de identiteit de rol Opslagblobgegevenslezer toe met toepassingsgebied over de pakketblob. Zie Een Azure-rol toewijzen voor toegang tot blobgegevens voor meer informatie over het maken van de roltoewijzing.
Stel de
WEBSITE_RUN_FROM_PACKAGEtoepassingsinstelling in op de blob-URL van het pakket. Deze URL is meestal van de vormhttps://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}of vergelijkbaar.Als u een door de gebruiker toegewezen identiteit wilt opgeven, kunt u de
WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_IDapp-instelling instellen op de resource-id van die identiteit. De instelling kan ook 'SystemAssigned' accepteren als een waarde, hoewel dit hetzelfde is als het weglaten van de instelling. Een resource-id is een standaardweergave voor een resource in Azure. Voor een door de gebruiker toegewezen beheerde identiteit is dat/subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name. De resource-id van een door de gebruiker toegewezen beheerde identiteit kan worden verkregen in de Instellingen ->Properties ->ID voor de door de gebruiker toegewezen beheerde identiteit.
De WebJob-bestanden implementeren wanneer deze worden uitgevoerd vanuit een pakket
Er zijn twee manieren om WebJob-bestanden te implementeren wanneer u het uitvoeren van een app vanuit het pakket inschakelt:
- Implementeer in hetzelfde ZIP-pakket als uw app: neem ze op zoals u normaal zou doen
<project-root>\app_data\jobs\...(wat overeenkomt met het implementatiepad\site\wwwroot\app_data\jobs\...zoals opgegeven in de snelstart voor WebJobs). - Implementeer afzonderlijk van het ZIP-pakket van uw app: omdat het gebruikelijke implementatiepad
\site\wwwroot\app_data\jobs\...nu alleen-lezen is, kunt u daar geen webtaakbestanden implementeren. In plaats daarvan implementeert u WebJob-bestanden in\site\jobs\..., die niet alleen-lezen zijn. WebJobs die zijn geïmplementeerd in\site\wwwroot\app_data\jobs\...en\site\jobs\...beide worden uitgevoerd.
Notitie
Wanneer \site\wwwroot alleen-lezen wordt, zullen bewerkingen zoals het maken van de disable.job mislukken.
Probleemoplossing
- Direct vanuit een pakket uitvoeren maakt
wwwrootalleen-lezen. Uw app ontvangt een foutmelding als er wordt geprobeerd bestanden naar deze map te schrijven. - TAR- en GZIP-indelingen worden niet ondersteund.
- Het ZIP-bestand kan maximaal 1 GB zijn
- Deze functie is niet compatibel met lokale cache.
- Gebruik de lokale zip-optie (
WEBSITE_RUN_FROM_PACKAGE=1) voor verbeterde prestaties bij koude start.