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 d:\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 à partir d’un fichier de package présente plusieurs avantages :

  • Réduction des risques de verrouillage lors de la copie de fichiers
  • Déploiement possible sur une application de production (après redémarrage)
  • Connaissance des fichiers qui sont exécutés dans votre application
  • Amélioration des performances des déploiements Azure Resource Manager
  • Peut 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 WEBSITE_RUN_FROM_PACKAGE aux paramètres de votre application de fonction. Le paramètre WEBSITE_RUN_FROM_PACKAGE doit avoir l’une des valeurs suivantes :

Value Description
1 Indique que l’application de fonction s’exécute à partir d’un fichier de package local déployé dans le dossier d:\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 options 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 actuellement.
  • 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 effectuez une exécution à partir d’un package, le dossier wwwroot passe en lecture seule et vous recevez une erreur lors de l’écriture de 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 actuellement 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 plus d’informations, consultez Génération à distance.

Notes

WEBSITE_RUN_FROM_PACKAGE ne fonctionne pas avec MSDeploy comme décrit ici. Vous recevrez une erreur lors du déploiement, comme ARM-MSDeploy Deploy Failed. Remplacez /MSDeploy par /ZipDeploy et cette erreur sera résolue.

Ajout du 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.

Utilisation de 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 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 d:\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

Déploiement zip est une fonctionnalité 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 d:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux).

Quand le paramètre d’application WEBSITE_RUN_FROM_PACKAGE est défini sur 1, les API de déploiement zip copient votre package dans le dossier d:\home\data\SitePackages (Windows) ou /home/data/SitePackages (Linux) au lieu d’extraire les fichiers dans d:\home\site\wwwroot (Windows) ou /home/site/wwwroot (Linux). Le fichier packagename.txt est également créé. Après un redémarrage, 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. Consultez Améliorer les performances et la fiabilité d’Azure Functions pour apprendre à écrire des fonctions sans état et des fonctions défensives.

Utilisation de 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 sur Linux hébergé dans un plan Consommation.

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

  • Lors de l’exécution d’une application de fonction sur Windows, le paramètre d’application WEBSITE_RUN_FROM_PACKAGE = <URL> donne de mauvaises performances de démarrage à froid et n’est pas recommandé.
  • 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.
  • Vous ne devez pas déployer 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é (SAS) 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.
  • Quand vous exécutez sur un plan Dédié, 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. Cet exemple illustre un déploiement 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. Dans le portail Azure, recherchez le nom de votre compte de stockage, ou parcourez les 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. Dans la page Nouveau conteneur, fournissez un Nom (par exemple « déploiements »), vérifiez que le Niveau d’accès public 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. Vous devrez peut-être générer une URL SAS si vous n’utilisez pas d’identité.

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

  9. Dans votre application de fonction, sélectionnez Configurations sous Paramètres.

  10. Sous l’onglet Paramètres d’application, sélectionnez Nouveau paramètre d’application.

  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 OK. Ensuite, sélectionnez Enregistrer>Continuer pour enregistrer le paramètre et redémarrer l’application.

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.

L’exemple suivant montre une application de fonction configurée pour s’exécuter à partir d’un fichier zip hébergé dans le stockage Blob Azure :

WEBSITE_RUN_FROM_ZIP app setting

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

Le Stockage Blob Azure peut être configuré pour autoriser les requêtes avec Microsoft Entra ID. Cela signifie qu’au lieu de générer une clé SAS avec une expiration, vous pouvez à la place vous fier à l'identité géré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, bien qu’il soit identique à l’omission du 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. Cela aura probablement le format « https://{storage-account-name}. blob. Core. Windows. net/{Container-Name}/{Path-to-package} » ou similaire.

Étapes suivantes