Exécuter vos fonctions à partir d’un fichier de package dans Azure

Dans Azure, vous pouvez exécuter vos fonctions directement dans un fichier de package de déploiement de votre application de fonction. L’autre option consiste à déployer vos fichiers dans le répertoire c:\home\site\wwwroot (Windows) ou /home/site/wwwroot (Linux) de votre application de fonction.

Cet article décrit les avantages que présente l’exécution de vos fonctions à partir d’un package. Il explique également comment activer cette fonctionnalité dans votre application de fonction.

Avantages de l’exécution à partir d’un fichier de package

L’exécution de fonctions à partir d’un fichier de package permet de :

  • Réduction des risques de verrouillage lors de la copie de fichiers
  • Déploiement possible sur une application de production (après redémarrage)
  • Vérifier les fichiers en cours d’exécution dans votre application.
  • Amélioration des performances des déploiements Azure Resource Manager
  • Réduire les temps de démarrage à froid, en particulier pour les fonctions JavaScript avec des arborescences de package npm de grande taille.

Pour plus d’informations, lisez cette annonce.

Permettre aux fonctions de s’exécuter à partir d’un package

Pour permettre à votre application de fonction de s’exécuter à partir d’un package, ajoutez un paramètre d’application WEBSITE_RUN_FROM_PACKAGE à votre application de fonction. Le paramètre WEBSITE_RUN_FROM_PACKAGE doit avoir l’une des valeurs suivantes :

Valeur Description
1 Indique que l’application de fonction s’exécute à partir d’un fichier de package local déployé dans le dossier c:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux) de votre application de fonction.
<URL> Définit une URL qui est l’emplacement distant du fichier de package spécifique que vous souhaitez exécuter. Obligatoire pour les applications de fonction exécutées sur Linux dans un plan Consommation.

Le tableau suivant indique les valeurs WEBSITE_RUN_FROM_PACKAGE recommandées pour un déploiement sur un système d’exploitation et un plan d’hébergement spécifiques :

Plan d’hébergement Windows Linux
Consommation 1 est fortement recommandé. Seul <URL> est pris en charge.
Premium 1 est recommandé. 1 est recommandé.
Dédié 1 est recommandé. 1 est recommandé.

Considérations d’ordre général

  • Le fichier de package doit être au format .zip. Les formats TAR et GZIP ne sont pas pris en charge.
  • Le déploiement zip est recommandé.
  • Lorsque vous déployez votre application de fonction sur Windows, vous devez définir WEBSITE_RUN_FROM_PACKAGE sur 1 et effectuer la publication avec le déploiement zip.
  • Lorsque vous exécutez à partir d’un package, le dossier wwwroot est en lecture seule et vous recevez une erreur si vous écrivez des fichiers dans ce répertoire. Les fichiers sont également en lecture seule dans le portail Azure.
  • La taille maximale d’un fichier de package de déploiement est de 1 Go.
  • Vous ne pouvez pas utiliser le cache local lors de l’exécution à partir d’un package de déploiement.
  • Si votre projet doit utiliser une génération à distance, n’utilisez pas le paramètre d’application WEBSITE_RUN_FROM_PACKAGE. Ajoutez plutôt le paramètre d’application de personnalisation de déploiement SCM_DO_BUILD_DURING_DEPLOYMENT=true. Pour Linux, ajoutez également le paramètre ENABLE_ORYX_BUILD=true. Pour en savoir plus, consultez Build à distance.

Remarque

Le paramètre d’application WEBSITE_RUN_FROM_PACKAGE ne fonctionne pas avec MSDeploy, comme décrit dans MSDeploy VS. ZipDeploy. Vous recevrez une erreur lors du déploiement, comme ARM-MSDeploy Deploy Failed. Pour résoudre cette erreur, modifiez /MSDeploy en /ZipDeploy.

Ajouter le paramètre WEBSITE_RUN_FROM_PACKAGE

Plusieurs méthodes sont possibles pour ajouter, mettre à jour et supprimer des paramètres d’une application de fonction :

Les changements apportés aux paramètres d’application de fonction nécessitent le redémarrage de votre application de fonction.

Création de l’archive zip

L’archive zip que vous déployez doit contenir tous les fichiers nécessaires pour exécuter votre application de fonction. Vous pouvez créer manuellement une archive zip à partir du contenu d’un dossier de projet Functions à l’aide de fonctionnalités de compression .zip intégrées ou d’outils tiers.

L’archive doit inclure le fichier host.json à la racine du dossier extrait. La pile de langues sélectionnée pour l’application de fonction crée des exigences supplémentaires :

Important

Pour les langages qui génèrent une sortie compilée pour le déploiement, veillez à compresser le contenu du dossier de sortie que vous envisagez de publier et non l’ensemble du dossier du projet. Lorsque Fonctions extrait le contenu de l’archive zip, le fichier host.json doit être présent à la racine du package.

Utiliser WEBSITE_RUN_FROM_PACKAGE = 1

Cette section fournit des informations sur l’exécution de votre application de fonction à partir d’un fichier de package local.

Considérations relatives au déploiement à partir d’un package sur site

  • L’utilisation d’un package sur site est l’option recommandée pour une exécution à partir du package de déploiement, sauf pour une exécution sur Linux hébergé dans un plan Consommation.
  • Le déploiement zip est la méthode recommandée pour charger un package de déploiement sur votre site.
  • Si vous n’utilisez pas le déploiement zip, assurez-vous que le dossier c:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux) contient un fichier nommé packagename.txt. Ce fichier contient uniquement le nom, sans espace, du fichier de package dans ce dossier en cours d’exécution.

Intégration au déploiement zip

Le déploiement zip est une fonctionnalité d’Azure App Service qui vous permet de déployer votre projet d’application de fonction dans le répertoire wwwroot. Le projet est empaqueté dans un fichier de déploiement zip. Les mêmes API peuvent être utilisées pour déployer votre package dans le dossier c:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux).

Quand vous définissez la valeur du paramètre d’application WEBSITE_RUN_FROM_PACKAGE sur 1, les API de déploiement zip copient votre package dans le dossier c:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux) au lieu d’extraire les fichiers dans c:\home\site\wwwroot (Windows) ou /home/site/wwwroot (Linux). Le fichier packagename.txt est également créé. Une fois que votre application de fonction a été redémarrée automatiquement, le package est monté sur wwwroot en tant que système de fichiers en lecture seule. Pour plus d’informations sur le déploiement zip, consultez Déploiement zip pour Azure Functions.

Notes

Lorsqu’un déploiement se produit, un redémarrage de l’application de fonction est déclenché. Les exécutions de fonctions en cours pendant le déploiement sont interrompues. Pour plus d’informations sur la façon d’écrire des fonctions sans état et défensives, consultez Écrire des fonctions comme sans état.

Utiliser WEBSITE_RUN_FROM_PACKAGE = URL

Cette section fournit des informations sur l’exécution de votre application de fonction à partir d’un package déployé sur un point de terminaison d’URL. Cette option est la seule prise en charge pour l’exécution à partir d’un package hébergé sur Linux dans un plan Consommation.

Considérations relatives au déploiement à partir d’une URL

  • Les applications de fonction s’exécutant sur Windows subissent une légère augmentation du temps de démarrage à froid lorsque le package d’application est déployé sur un point de terminaison d’URL via WEBSITE_RUN_FROM_PACKAGE = <URL>.
  • Lorsque vous spécifiez une URL, vous devez aussi synchroniser les déclencheurs manuellement après avoir publié un package mis à jour.
  • L’exécution de fonctions doit avoir les autorisations pour accéder à l’URL du package.
  • Ne déployez pas votre package sur le Stockage Blob Azure en tant que blob public. Au lieu de cela, utilisez un conteneur privé avec une signature d’accès partagé (SAP) ou utilisez une identité managée pour permettre au runtime Functions d’accéder au package.
  • Vous devez conserver toutes les URL SAS utilisées pour le déploiement. Lorsqu’une SAS expire, le package ne peut plus être déployé. Dans ce cas, vous devez générer une nouvelle SAS et mettre à jour le paramètre dans votre application de fonction. Vous pouvez éliminer ce fardeau de gestion en utilisant une identité managée.
  • Lors de l’exécution sur un plan Premium, veillez à éliminer les démarrages à froid.
  • Lorsque vous exécutez dans un plan Dedicated, veillez à activer Always On.
  • Vous pouvez utiliser l’Explorateur Stockage Azure pour charger les fichiers de package dans des conteneurs de blobs sur votre compte de stockage.

Chargement manuel d’un package dans le Stockage Blob

Pour déployer un package compressé lorsque vous utilisez l’option URL, vous devez créer un package de déploiement .zip compressé et le charger vers la destination. La procédure suivante déploie sur un conteneur dans le Stockage Blob :

  1. Créez un package .zip pour votre projet à l’aide de l’utilitaire de votre choix.

  2. Sur le Portail Azure, recherchez le nom de votre compte de stockage, ou parcourez la liste des comptes de stockage à sa recherche.

  3. Dans le compte de stockage, sélectionnez Conteneurs sous Stockage des données.

  4. Sélectionnez + Conteneur pour créer un conteneur Stockage Blob dans votre compte.

  5. Sur la page Nouveau conteneur, fournissez un Nom (par exemple déploiements), vérifiez que le Niveau d’accès anonyme est Privé, puis sélectionnez Créer.

  6. Sélectionnez le conteneur que vous avez créé, sélectionnez Charger, accédez à l’emplacement du fichier .zip que vous avez créé avec votre projet, puis sélectionnez Charger.

  7. Une fois le chargement terminé, choisissez votre fichier blob chargé, puis copiez l’URL. Si vous n’utilisez pas d’identité managée, vous devrez peut-être générer une URL SAP.

  8. Recherchez votre application de fonction ou parcourez la page Function App à sa recherche.

  9. Dans votre application de fonction, développez Paramètres, puis sélectionnez Variables d’environnement.

  10. Dans l’onglet Paramètres de l’application, sélectionnez + Ajouter.

  11. Entrez la valeur WEBSITE_RUN_FROM_PACKAGE comme Nom, puis collez l’URL de votre package dans Stockage Blob comme Valeur.

  12. Sélectionnez Appliquer, puis Appliquer et Confirmer pour enregistrer le paramètre et redémarrer l’application de fonction.

Vous pouvez maintenant exécuter votre fonction dans Azure pour vérifier que le déploiement a réussi à l’aide du fichier .zip du package de déploiement.

Extraire un package à partir de Stockage Blob Azure à l’aide d’une identité managée

Vous pouvez configurer Stockage Blob Azure pour autoriser les requêtes avec Microsoft Entra ID. Cette configuration signifie qu’au lieu de générer une clé SAP avec une expiration, vous pouvez vous reposer sur l'identité managée de l’application. Par défaut, l’identité affectée par le système de l’application est utilisée. Si vous souhaitez spécifier une identité affectée par l’utilisateur, vous pouvez définir le WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID paramètre d’application sur l’ID de ressource de cette identité. Le paramètre peut également accepter SystemAssigned comme valeur, ce qui équivaut à omettre le paramètre.

Pour activer le package à extraire à l’aide de l’identité :

  1. Veillez à ce que le blob soit configuré pour un accès privé.

  2. Accordez à l’identité le rôle deLecteur des données Blob du stockage avec étendue sur le blob du package. Voir Attribuer un rôle Azure pour l’accès aux données d’objet blob pour plus d’informations sur la création de l’affectation du rôle.

  3. Définissez les WEBSITE_RUN_FROM_PACKAGE paramètres d’application à l’URL de l’objet blob du package. Cette URL prend généralement la forme https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} ou similaire.