Exécuter votre application dans Azure App Service directement à partir d’un package ZIPRun your app in Azure App Service directly from a ZIP package

Dans Azure App Service, vous pouvez exécuter vos applications directement à partir d’un fichier de package ZIP de déploiement.In Azure App Service, you can run your apps directly from a deployment ZIP package file. Cet article explique comment activer cette fonctionnalité dans votre application.This article shows how to enable this functionality in your app.

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).All other deployment methods in App Service have something in common: your files are deployed to D:\home\site\wwwroot in your app (or /home/site/wwwroot for Linux apps). É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.Since the same directory is used by your app at runtime, it's possible for deployment to fail because of file lock conflicts, and for the app to behave unpredictably because some of the files are not yet updated.

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.In contrast, when you run directly from a package, the files in the package are not copied to the wwwroot directory. Au lieu de cela, le package ZIP lui-même est monté directement en tant que répertoire wwwroot en lecture seule.Instead, the ZIP package itself gets mounted directly as the read-only wwwroot directory. L’exécution directe à partir d’un package présente plusieurs avantages :There are several benefits to running directly from a package:

  • Élimine les conflits de verrou de fichier entre le déploiement et l’exécution.Eliminates file lock conflicts between deployment and runtime.
  • Garantit que seules les applications entièrement déployées sont en cours d’exécution à tout moment.Ensures only full-deployed apps are running at any time.
  • Déploiement possible sur une application de production (après redémarrage)Can be deployed to a production app (with restart).
  • Améliore les performances des déploiements Azure Resource Manager.Improves the performance of Azure Resource Manager deployments.
  • Peut réduire les temps de démarrage à froid, en particulier pour les fonctions JavaScript avec des arborescences de package npm de grande taille.May reduce cold-start times, particularly for JavaScript functions with large npm package trees.

Notes

Actuellement, seuls les fichiers de package ZIP sont pris en charge.Currently, only ZIP package files are supported.

Créer un fichier ZIP de projetCreate a project ZIP file

Notes

Si vous avez téléchargé les fichiers dans un fichier ZIP, extrayez tout d’abord les fichiers.If you downloaded the files in a ZIP file, extract the files first. Par exemple, si vous avez téléchargé un fichier ZIP à partir de GitHub, vous ne pouvez pas déployer ce fichier tel quel.For example, if you downloaded a ZIP file from GitHub, you cannot deploy that file as-is. GitHub ajoute des répertoires imbriqués supplémentaires qui ne fonctionnent pas avec App Service.GitHub adds additional nested directories, which do not work with App Service.

Dans une fenêtre de terminal locale, accédez au répertoire racine de votre projet d’application.In a local terminal window, navigate to the root directory of your app project.

Ce répertoire doit contenir le fichier d’entrée à votre application web, tel que index.html, index.php et app.js.This directory should contain the entry file to your web app, such as index.html, index.php, and app.js. Il peut également contenir des fichiers de gestion de package comme project.json, composer.json, package.json, bower.json et requirements.txt.It can also contain package management files like project.json, composer.json, package.json, bower.json, and 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.Unless you want App Service to run deployment automation for you, run all the build tasks (for example, npm, bower, gulp, composer, and pip) and make sure that you have all the files you need to run the app. Cette étape est requise si vous souhaitez exécuter votre package directement.This step is required if you want to run your package directly.

Créez une archive ZIP contenant tous les éléments de votre projet.Create a ZIP archive of everything in your project. Pour les projets dotnet, ce dossier est le dossier de sortie de la commande dotnet publish.For dotnet projects, this folder is the output folder of the dotnet publish command. La commande suivante utilise l’outil par défaut dans votre terminal :The following command uses the default tool in your terminal:

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

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

Activer l’exécution à partir du packageEnable running from package

Le paramètre d’application WEBSITE_RUN_FROM_PACKAGE active l’exécution à partir d’un package.The WEBSITE_RUN_FROM_PACKAGE app setting enables running from a package. Pour le définir, exécutez la commande suivante avec l’interface de ligne de commande Azure.To set it, run the following command with Azure CLI.

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.WEBSITE_RUN_FROM_PACKAGE="1" lets you run your app from a package local to your app. Vous pouvez également exécuter à partir d’un package distant.You can also run from a remote package.

Exécution du packageRun the 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.The easiest way to run a package in your App Service is with the Azure CLI az webapp deployment source config-zip command. Par exemple :For example:

az webapp deployment source config-zip --resource-group <group-name> --name <app-name> --src <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.Because the WEBSITE_RUN_FROM_PACKAGE app setting is set, this command doesn't extract the package content to the D:\home\site\wwwroot directory of your app. 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.Instead, it uploads the ZIP file as-is to D:\home\data\SitePackages, and creates a packagename.txt in the same directory, that contains the name of the ZIP package to load at runtime. 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.If you upload your ZIP package in a different way (such as FTP), you need to create the D:\home\data\SitePackages directory and the packagename.txt file manually.

La commande redémarre également l’application.The command also restarts the app. É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é.Because WEBSITE_RUN_FROM_PACKAGE is set, App Service mounts the uploaded package as the read-only wwwroot directory and runs the app directly from that mounted directory.

Exécuter à partir d’une URL externeRun from external URL instead

Vous pouvez également exécuter un package à partir d’une URL externe, comme le stockage Blob Azure.You can also run a package from an external URL, such as Azure Blob Storage. Vous pouvez utiliser l’Explorateur Stockage Azure pour charger des fichiers de package sur votre compte Stockage Blob.You can use the Azure Storage Explorer to upload package files to your Blob storage account. Vous devez utiliser un conteneur de stockage privé avec une signature d’accès partagé (SAS) pour permettre au runtime App Service d’accéder au package en toute sécurité.You should use a private storage container with a Shared Access Signature (SAS) to enable the App Service runtime to access the package securely.

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.Once you upload your file to Blob storage and have an SAS URL for the file, set the WEBSITE_RUN_FROM_PACKAGE app setting to the URL. Pour ce faire, l’exemple suivant utilise l’interface de ligne de commande Azure :The following example does it by using Azure CLI:

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.If you publish an updated package with the same name to Blob storage, you need to restart your app so that the updated package is loaded into App Service.

DépannageTroubleshooting

  • L’exécution directe à partir d’un package met wwwroot en lecture seule.Running directly from a package makes wwwroot read-only. Votre application recevra une erreur si elle tente d’écrire des fichiers dans ce répertoire.Your app will receive an error if it tries to write files to this directory.
  • Les formats TAR et GZIP ne sont pas pris en charge.TAR and GZIP formats are not supported.
  • Le fichier ZIP peut être au maximum de 1 GoThe ZIP file can be at most 1GB
  • Cette fonctionnalité n’est pas compatible avec le cache local.This feature is not compatible with local cache.
  • Pour améliorer les performances de démarrage à froid, utilisez l’option zip locale (WEBSITE_RUN_FROM_PACKAGE= 1).For improved cold-start performance, use the local Zip option (WEBSITE_RUN_FROM_PACKAGE=1).

Plus de ressourcesMore resources