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 c:\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 functies vanuit 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).
- Controleert de bestanden die worden uitgevoerd in uw app.
- Verbetert de prestaties van Azure Resource Manager-implementaties.
- Vermindert koude begintijden, 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
app-instelling toe aan uw functie-app. De WEBSITE_RUN_FROM_PACKAGE
app-instelling kan een van de volgende waarden hebben:
Weergegeven als | Beschrijving |
---|---|
1 |
Geeft aan dat de functie-app wordt uitgevoerd vanuit een lokaal pakketbestand dat is geïmplementeerd in de c:\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
waarden 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. |
Toegewijd | 1 wordt aanbevolen. |
1 wordt aanbevolen. |
Algemene overwegingen
- Het pakketbestand moet zijn .zip opgemaakt. Tar- en gzip-indelingen worden 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, heeft de map het
wwwroot
kenmerk Alleen-lezen en krijgt u een foutmelding als u bestanden naar deze map schrijft. Bestanden zijn ook alleen-lezen in Azure Portal. - De maximale grootte voor een implementatiepakketbestand is 1 GB.
- U kunt de lokale cache niet 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 app-instellingSCM_DO_BUILD_DURING_DEPLOYMENT=true
voor implementatieaanpassing toe. Voor Linux voegt u ook deENABLE_ORYX_BUILD=true
instelling toe. Zie Remote build voor meer informatie.
Notitie
De WEBSITE_RUN_FROM_PACKAGE
app-instelling werkt niet met MSDeploy, zoals beschreven in MSDeploy VS. ZipDeploy. U krijgt een foutmelding tijdens de implementatie, zoals ARM-MSDeploy Deploy Failed
. Als u deze fout wilt oplossen, hange /MSDeploy
u naar /ZipDeploy
.
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.
Het zip-archief maken
Het zip-archief dat u implementeert, moet alle bestanden bevatten die nodig zijn om uw functie-app uit te voeren. U kunt handmatig een zip-archief maken op basis van de inhoud van een Functions-projectmap met behulp van ingebouwde .zip compressiefunctionaliteit of hulpprogramma's van derden.
Het archief moet het host.json bestand in de hoofdmap van de uitgepakte map bevatten. De geselecteerde taalstack voor de functie-app maakt aanvullende vereisten:
Belangrijk
Voor talen die gecompileerde uitvoer genereren voor implementatie, moet u de inhoud van de uitvoermap comprimeren die u wilt publiceren en niet de hele projectmap. Wanneer Functions de inhoud van het zip-archief extraheert, moet het host.json
bestand zich in de hoofdmap van het pakket bevinden.
Gebruik 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, behalve wanneer het wordt uitgevoerd op 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
c:\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 c:\home\data\SitePackages
map (Windows) of /home/data/SitePackages
(Linux).
Wanneer u de waarde voor de WEBSITE_RUN_FROM_PACKAGE
app-instelling instelt, kopieert de ZIP-implementatie-API's uw pakket naar de c:\home\data\SitePackages
map (Windows) of /home/data/SitePackages
(Linux) in plaats van de bestanden te extraheren naar c:\home\site\wwwroot
(Windows) of /home/site/wwwroot
(1
Linux). Het bestand wordt ook gemaakt packagename.txt
. Nadat uw functie-app automatisch opnieuw is opgestart, wordt het pakket gekoppeld wwwroot
als 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. Voor informatie over het schrijven van staatloze en defensieve functies, sett Write-functies om staatloos te zijn.
Gebruik WEBSITE_RUN_FROM_PACKAGE = URL
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 door Linux gehost pakket met een verbruiksabonnement.
Overwegingen voor het implementeren vanaf een URL
- Functie-apps die worden uitgevoerd in Windows, hebben een lichte toename van de koude starttijd wanneer het toepassingspakket wordt geïmplementeerd op een URL-eindpunt via
WEBSITE_RUN_FROM_PACKAGE = <URL>
. - 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.
- Implementeer uw pakket niet als een openbare blob in Azure Blob Storage. 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.
- Wanneer u een Dedicated-abonnement uitvoert, moet u AlwaysOn inschakelen.
- 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 .zip gecomprimeerd implementatiepakket maken en uploaden naar het doel. De volgende procedure 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 de lijst met 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 anonieme toegangsniveau privé is en selecteer vervolgens 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 vervolgens Uploaden.
Nadat het uploaden is voltooid, kiest u het geüploade blobbestand en kopieert u de URL. Als u geen beheerde identiteit gebruikt, moet u mogelijk een SAS-URL genereren.
Zoek uw functie-app of blader ernaar op de pagina Functie-app .
Vouw in uw functie-app Instellingen uit en selecteer vervolgens Omgevingsvariabelen.
Selecteer + Toevoegen op het tabblad App-instellingen.
Voer de waarde voor de naam
WEBSITE_RUN_FROM_PACKAGE
in en plak de URL van uw pakket in Blob Storage voor de waarde.Selecteer Toepassen en selecteer Vervolgens Toepassen en Bevestigen om de instelling op te slaan en de functie-app opnieuw te starten.
U kunt nu uw functie uitvoeren in Azure om te controleren of de implementatie van het implementatiepakket .zip bestand is geslaagd.
Een pakket ophalen uit 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.
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. Deze URL is meestal van de vormhttps://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}
of vergelijkbaar.