Exécuter votre application dans Azure App Service directement à partir d’un package ZIP

Remarque

L’exécution à partir d’un package n’est pas prise en charge pour les applications Python. Lors du déploiement d’un fichier ZIP de votre code Python, vous avez besoin de définir un indicateur pour activer l’automatisation de build Azure. L’automatisation de build crée l’environnement virtuel Python pour votre application et installe tous les éléments et packages nécessaires. Pour plus d’informations, consultez Automatisation de build.

Dans Azure App Service, vous pouvez exécuter vos applications directement à partir d’un fichier de package ZIP de déploiement. Cet article explique comment activer cette fonctionnalité dans votre application.

Toutes les autres méthodes de déploiement dans App Service ont un point en commun : vos fichiers sont déployés sur D:\home\site\wwwroot dans votre application (ou /home/site/wwwroot pour les applications Linux). Étant donné que le même répertoire est utilisé par votre application au moment de l’exécution, il est possible que le déploiement échoue en raison de conflits de verrou de fichier et que l’application se comporte de manière imprévisible, car certains fichiers ne sont pas encore mis à jour.

En revanche, lors d’une exécution directe à partir d’un package, les fichiers du package ne sont pas copiés dans le répertoire wwwroot. Au lieu de cela, le package ZIP lui-même est monté directement en tant que répertoire wwwroot en lecture seule. L’exécution directe à partir d’un package présente plusieurs avantages :

  • Élimine les conflits de verrou de fichier entre le déploiement et l’exécution.
  • Garantit que seules les applications entièrement déployées sont en cours d’exécution à tout moment.
  • Déploiement possible sur une application de production (après redémarrage)
  • Améliore les 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.

Notes

Actuellement, seuls les fichiers de package ZIP sont pris en charge.

Créer un package ZIP de projet

Important

Lorsque vous créez le package ZIP pour un déploiement, n’incluez pas le répertoire racine, mais uniquement les fichiers et répertoires qu’il contient. Si vous téléchargez un référentiel GitHub en tant que fichier ZIP, vous ne pourrez pas déployer ce fichier tel que pour App Service. GitHub ajoute des répertoires imbriqués supplémentaires qui ne fonctionnent pas avec App Service.

Dans une fenêtre de terminal locale, accédez au répertoire racine de votre projet d’application.

Ce répertoire doit contenir le fichier d’entrée à votre application web, tel que index.html, index.php et app.js. Il peut également contenir des fichiers de gestion de package comme project.json, composer.json, package.json, bower.json et requirements.txt.

Sauf si vous souhaitez qu’App Service exécute l’automatisation du déploiement à votre place, exécutez toutes les tâches de compilation (par exemple, npm, bower, gulp, composer et pip) et assurez-vous que vous disposez de tous les fichiers nécessaires pour exécuter l'application. Cette étape est requise si vous souhaitez exécuter votre package directement.

Créez une archive ZIP contenant tous les éléments de votre projet. Pour les projets dotnet, il s’agit de tout ce qui se trouve dans le répertoire de sortie de la commande dotnet publish (à l’exception du répertoire de sortie lui-même). Par exemple, la commande suivante dans votre terminal pour créer un package ZIP du contenu du répertoire actif :

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

Activer l’exécution à partir du package

Le paramètre d’application WEBSITE_RUN_FROM_PACKAGE active l’exécution à partir d’un package. Pour le définir, exécutez la commande suivante avec l’interface de ligne de commande Azure.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"

WEBSITE_RUN_FROM_PACKAGE="1" vous permet d’exécuter votre application à partir d’un package local à votre application. Vous pouvez également exécuter à partir d’un package distant.

Exécution du package

Le moyen le plus simple d’exécuter un package dans App Service consiste à utiliser la commande az webapp deployment source config-zip de l’interface de ligne de commande Azure. Par exemple :

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <filename>.zip

Étant donné que le paramètre d’application WEBSITE_RUN_FROM_PACKAGE est défini, cette commande n’extrait pas le contenu du package dans le répertoire D:\home\site\wwwroot de votre application. Au lieu de cela, elle charge le fichier ZIP tel quel dans D:\home\data\SitePackages et crée un fichier packagename.txt dans le même répertoire, qui contient le nom du package ZIP à charger au moment de l’exécution. Si vous chargez votre package ZIP d’une autre façon (comme FTP), vous devez créer le répertoire D:\home\data\SitePackages et le fichier packagename.txt manuellement.

La commande redémarre également l’application. Étant donné que WEBSITE_RUN_FROM_PACKAGE est défini, App Service monte le package chargé en tant que répertoire wwwroot en lecture seule et exécute l’application directement à partir de ce répertoire monté.

Exécuter à partir d’une URL externe

Vous pouvez également exécuter un package à partir d’une URL externe, comme le stockage Blob Azure. Vous pouvez utiliser l’Explorateur Stockage Azure pour charger des fichiers de package sur votre compte Stockage Blob. Vous devez utiliser un conteneur de stockage privé avec une signature d’accès partagé (SAS) ou utiliser une idéntité managée pour permettre au runtime App Service d’accéder au package en toute sécurité.

Remarque

Pour le moment, une ressource App Service existante qui exécute un package local ne peut pas être migrée pour être exécutée à partir d’un package distant. Vous devrez créer une nouvelle ressource App Service configurée pour fonctionner à partir d’une URL externe.

Une fois que vous avez chargé votre fichier sur le stockage Blob et que vous avez une URL SAS pour le fichier, définissez le paramètre d’application WEBSITE_RUN_FROM_PACKAGE sur l’URL. Pour ce faire, l’exemple suivant utilise l’interface de ligne de commande Azure :

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"

Si vous publiez un package mis à jour portant le même nom sur le stockage Blob, vous devez redémarrer votre application afin que le package mis à jour soit chargé dans App Service.

Accéder à un package dans le 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.

Déployer des fichiers de tâche web lors de l’exécution à partir d’un package

Il existe deux façons de déployer des fichiers de tâche web (WebJob) lorsque vous activez l’exécution d’une application à partir d’un package :

  • Effectuer le déploiement dans le même package ZIP que votre application : incluez-les comme vous le feriez normalement dans <project-root>\app_data\jobs\... (qui correspond au chemin de déploiement \site\wwwroot\app_data\jobs\... spécifié dans le guide de démarrage rapide des tâches web (WebJobs)).
  • Effectuer le déploiement séparément du package ZIP de votre application : étant donné que le chemin de déploiement habituel \site\wwwroot\app_data\jobs\... est désormais en lecture seule, vous ne pouvez pas y déployer de fichiers de tâche web (WebJob). Au lieu de cela, déployez les fichiers de tâche web sur \site\jobs\..., qui n’est pas en lecture seule. Les tâches web déployées aussi bien sur \site\wwwroot\app_data\jobs\... que sur \site\jobs\... s’exécutent.

Notes

Lorsque \site\wwwroot passe en lecture seule, les opérations telles que la création du fichier disable.job échouent.

Dépannage

  • L’exécution directe à partir d’un package met wwwroot en lecture seule. Votre application recevra une erreur si elle tente d’écrire des fichiers dans ce répertoire.
  • Les formats TAR et GZIP ne sont pas pris en charge.
  • Le fichier ZIP peut être au maximum de 1 Go
  • Cette fonctionnalité n’est pas compatible avec le cache local.
  • Pour améliorer les performances de démarrage à froid, utilisez l’option zip locale (WEBSITE_RUN_FROM_PACKAGE= 1).

Plus de ressources