Uw functies uitvoeren vanuit een pakketbestand in Azure
In Azure kunt u uw functies rechtstreeks vanuit een implementatiepakketbestand in uw functie-app uitvoeren. De andere optie is het implementeren van uw bestanden in de d:\home\site\wwwroot
map (Windows) of /home/site/wwwroot
(Linux) van uw functie-app.
In dit artikel worden de voordelen van het uitvoeren van uw functies vanuit een pakket beschreven. U ziet ook hoe u deze functionaliteit inschakelt in uw functie-app.
Voordelen van het uitvoeren van een pakketbestand
Er zijn verschillende voordelen voor het uitvoeren van een pakketbestand:
- Vermindert het risico dat problemen met het kopiëren van bestanden worden vergrendeld.
- Kan worden geïmplementeerd in een productie-app (met opnieuw opstarten).
- U kunt zeker zijn van de bestanden die in uw app worden uitgevoerd.
- Verbetert de prestaties van Azure Resource Manager-implementaties.
- Kan koude begintijden verminderen, met name voor JavaScript-functies met grote npm-pakketstructuren.
Zie deze aankondiging voor meer informatie.
Functies inschakelen voor uitvoering vanuit een pakket
Als u wilt dat uw functie-app kan worden uitgevoerd vanuit een pakket, voegt u een WEBSITE_RUN_FROM_PACKAGE
instelling toe aan de instellingen van uw functie-app. De WEBSITE_RUN_FROM_PACKAGE
instelling kan een van de volgende waarden hebben:
Waarde | Omschrijving |
---|---|
1 |
Geeft aan dat de functie-app wordt uitgevoerd vanuit een lokaal pakketbestand dat is geïmplementeerd in de d:\home\data\SitePackages map (Windows) of /home/data/SitePackages (Linux) van uw functie-app. |
<URL> |
Hiermee stelt u een URL in die de externe locatie is van het specifieke pakketbestand dat u wilt uitvoeren. Vereist voor functions-apps die worden uitgevoerd in Linux in een verbruiksabonnement. |
De volgende tabel geeft de aanbevolen WEBSITE_RUN_FROM_PACKAGE
opties voor implementatie aan voor een specifiek besturingssysteem en hostingabonnement:
Hostingabonnement | Windows | Linux |
---|---|---|
Verbruik | 1 wordt ten zeerste aanbevolen. |
Alleen <URL> wordt ondersteund. |
Premium | 1 wordt aanbevolen. |
1 wordt aanbevolen. |
Gewijd | 1 wordt aanbevolen. |
1 wordt aanbevolen. |
Algemene overwegingen
- Het pakketbestand moet .zip-indeling hebben. Tar- en gzip-indelingen worden momenteel niet ondersteund.
- Zip-implementatie wordt aanbevolen.
- Wanneer u uw functie-app implementeert in Windows, moet u deze instellen
WEBSITE_RUN_FROM_PACKAGE
1
en publiceren met zip-implementatie. - Wanneer u een pakket uitvoert, wordt de
wwwroot
map alleen-lezen en ontvangt u een foutmelding bij het schrijven van bestanden naar deze map. Bestanden zijn ook alleen-lezen in Azure Portal. - De maximale grootte voor een implementatiepakketbestand is momenteel 1 GB.
- U kunt geen lokale cache gebruiken bij uitvoering vanuit een implementatiepakket.
- Als uw project externe build moet gebruiken, gebruikt u de
WEBSITE_RUN_FROM_PACKAGE
app-instelling niet. Voeg in plaats daarvan de instelling voor deSCM_DO_BUILD_DURING_DEPLOYMENT=true
aanpassings-app voor implementatie toe. Voor Linux voegt u ook deENABLE_ORYX_BUILD=true
instelling toe. Zie Remote build voor meer informatie.
Notitie
WEBSITE_RUN_FROM_PACKAGE werkt niet met MSDeploy, zoals hier wordt beschreven. U krijgt een foutmelding tijdens de implementatie, zoals ARM-MSDeploy Deploy Failed
. Wijzig /MSDeploy in /ZipDeploy en deze fout wordt opgelost.
De WEBSITE_RUN_FROM_PACKAGE-instelling toevoegen
Er zijn verschillende manieren waarop u instellingen van een functie app kunt toevoegen, bijwerken en verwijderen:
Voor wijzigingen in de instellingen van de functie-app moet uw functie-app opnieuw worden gestart.
Met WEBSITE_RUN_FROM_PACKAGE = 1
Deze sectie bevat informatie over het uitvoeren van uw functie-app vanuit een lokaal pakketbestand.
Overwegingen voor het implementeren vanuit een on-site-pakket
- Het gebruik van een on-site-pakket is de aanbevolen optie voor uitvoering vanuit het implementatiepakket, met uitzondering van Linux die wordt gehost in een verbruiksabonnement.
- Zip-implementatie is de aanbevolen manier om een implementatiepakket naar uw site te uploaden.
- Als u zip-implementatie niet gebruikt, controleert u of de
d:\home\data\SitePackages
map (Windows) of/home/data/SitePackages
(Linux) een bestand heeft met de naampackagename.txt
. Dit bestand bevat alleen de naam, zonder witruimte, van het pakketbestand in deze map die momenteel wordt uitgevoerd.
Integratie met zip-implementatie
Zip-implementatie is een functie van Azure-app Service waarmee u uw functie-app-project kunt implementeren in de wwwroot
map. Het project is verpakt als een ZIP-implementatiebestand. Dezelfde API's kunnen worden gebruikt om uw pakket te implementeren in de d:\home\data\SitePackages
map (Windows) of /home/data/SitePackages
(Linux).
Met de waarde van de WEBSITE_RUN_FROM_PACKAGE
app-instelling kopieert de ZIP-implementatie-API's uw pakket naar de d:\home\data\SitePackages
map (Windows) of /home/data/SitePackages
(Linux) in plaats van de bestanden te extraheren naar d:\home\site\wwwroot
(Windows) of /home/site/wwwroot
(1
Linux). Het bestand wordt ook gemaakt packagename.txt
. Nadat het pakket opnieuw is opgestart, wordt het gekoppeld als wwwroot
een alleen-lezen bestandssysteem. Zie Zip-implementatie voor Azure Functions voor meer informatie over zip-implementatie.
Notitie
Wanneer een implementatie plaatsvindt, wordt een herstart van de functie-app geactiveerd. Uitvoeringen van functies die momenteel worden uitgevoerd tijdens de implementatie, worden beëindigd. Raadpleeg De prestaties en betrouwbaarheid van Azure Functions verbeteren voor meer informatie over het schrijven van staatloze en defensieve functies.
WEBSITE_RUN_FROM_PACKAGE = URL gebruiken
Deze sectie bevat informatie over het uitvoeren van uw functie-app vanuit een pakket dat is geïmplementeerd op een URL-eindpunt. Deze optie is de enige die wordt ondersteund voor uitvoering vanuit een pakket op Linux dat wordt gehost in een verbruiksabonnement.
Overwegingen voor het implementeren vanaf een URL
- Wanneer u een functie-app uitvoert in Windows, biedt de app-instelling
WEBSITE_RUN_FROM_PACKAGE = <URL>
slechtere prestaties bij koude start en wordt dit niet aanbevolen. - Wanneer u een URL opgeeft, moet u ook handmatig triggers synchroniseren nadat u een bijgewerkt pakket hebt gepubliceerd.
- De Functions-runtime moet machtigingen hebben voor toegang tot de pakket-URL.
- U moet uw pakket niet implementeren in Azure Blob Storage als een openbare blob. Gebruik in plaats daarvan een privécontainer met een Shared Access Signature (SAS) of gebruik een beheerde identiteit om de Functions-runtime toegang te geven tot het pakket.
- U moet eventuele SAS-URL's onderhouden die worden gebruikt voor implementatie. Wanneer een SAS verloopt, kan het pakket niet meer worden geïmplementeerd. In dit geval moet u een nieuwe SAS genereren en de instelling in uw functie-app bijwerken. U kunt deze beheerlast elimineren met behulp van een beheerde identiteit.
- Wanneer u een Premium-abonnement uitvoert, moet u koude start elimineren.
- Zorg ervoor dat u AlwaysOn hebt ingeschakeld wanneer u een Dedicated-abonnement uitvoert.
- U kunt Azure Storage Explorer gebruiken om pakketbestanden te uploaden naar blobcontainers in uw opslagaccount.
Een pakket handmatig uploaden naar Blob Storage
Als u een gezipt pakket wilt implementeren wanneer u de URL-optie gebruikt, moet u een gecomprimeerd .zip-implementatiepakket maken en uploaden naar het doel. In dit voorbeeld wordt geïmplementeerd in een container in Blob Storage.
Maak een .zip-pakket voor uw project met behulp van het hulpprogramma van uw keuze.
Zoek in Azure Portal naar de naam van uw opslagaccount of blader ernaar in opslagaccounts.
Selecteer Containers onder Gegevensopslag in het opslagaccount.
Selecteer + Container om een nieuwe Blob Storage-container in uw account te maken.
Geef op de pagina Nieuwe container een naam op (bijvoorbeeld 'implementaties'), zorg ervoor dat het niveau Openbare toegang privé is en selecteer Maken.
Selecteer de container die u hebt gemaakt, selecteer Uploaden, blader naar de locatie van het ZIP-bestand dat u met uw project hebt gemaakt en selecteer Uploaden.
Nadat het uploaden is voltooid, kiest u het geüploade blobbestand en kopieert u de URL. Mogelijk moet u een SAS-URL genereren als u geen identiteit gebruikt
Zoek uw functie-app of blader ernaar op de pagina Functie-app .
Selecteer configuraties in uw functie-app onder Instellingen.
Selecteer op het tabblad Toepassing Instellingen de optie Nieuwe toepassingsinstelling
Voer de waarde voor de naam
WEBSITE_RUN_FROM_PACKAGE
in en plak de URL van uw pakket in Blob Storage als de waarde.Selecteer OK. Selecteer Vervolgens Opslaan>doorgaan om de instelling op te slaan en de app opnieuw op te starten.
U kunt nu uw functie uitvoeren in Azure om te controleren of de implementatie is geslaagd met behulp van het ZIP-bestand van het implementatiepakket.
Hieronder ziet u een functie-app die is geconfigureerd voor uitvoering vanuit een ZIP-bestand dat wordt gehost in Azure Blob Storage:
Een pakket ophalen uit Azure Blob Storage met behulp van een beheerde identiteit
Azure Blob Storage kan worden geconfigureerd voor het autoriseren van aanvragen met Microsoft Entra-id. Dit betekent dat u in plaats van een SAS-sleutel met een vervaldatum te genereren, in plaats daarvan kunt u 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 'SystemAssigned' accepteren als een waarde, hoewel dit hetzelfde is als 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.
Verdeel de identiteit de rol Opslagblobgegevenslezer met bereik over de pakket-blob. Zie Een Azure-rol toewijzen voor toegang tot blobgegevens voor meer informatie over het maken van de roltoewijzing.
Stel de
WEBSITE_RUN_FROM_PACKAGE
toepassingsinstelling in op de blob-URL van het pakket. Dit is waarschijnlijk het formulier 'https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}' of vergelijkbaar.