Configurer des environnements intermédiaires dans Azure App ServiceSet up staging environments in Azure App Service

Lorsque vous déployez votre application web, votre application web Linux, votre backend mobile ou votre API dans Azure App Service, vous pouvez utiliser un autre emplacement de déploiement que l’emplacement de production par défaut lorsque vous exécutez le niveau de plan Standard, Premium ou Isolé d’App Service.When you deploy your web app, web app on Linux, mobile back end, or API app to Azure App Service, you can use a separate deployment slot instead of the default production slot when you're running in the Standard, Premium, or Isolated App Service plan tier. Les emplacements de déploiement sont des applications en production pourvues de leur propre nom d’hôte.Deployment slots are live apps with their own host names. Les éléments de contenu et de configuration des applications peuvent être échangés entre deux emplacements de déploiement, y compris l’emplacement de production.App content and configurations elements can be swapped between two deployment slots, including the production slot.

Le déploiement de votre application sur un emplacement hors production présente les avantages suivants :Deploying your application to a non-production slot has the following benefits:

  • Vous pouvez valider les modifications d’une application dans un emplacement de déploiement intermédiaire avant de l’échanger avec l’emplacement de production.You can validate app changes in a staging deployment slot before swapping it with the production slot.
  • Déployer d’abord une application dans un emplacement et la basculer ensuite en production permet de vous assurer que toutes les instances de l’emplacement sont initialisées avant d’être basculées en production.Deploying an app to a slot first and swapping it into production makes sure that all instances of the slot are warmed up before being swapped into production. Cela permet d’éliminer les temps d’arrêt lors du déploiement de l’application.This eliminates downtime when you deploy your app. La redirection du trafic est transparente et aucune requête n’est abandonnée du fait d’opérations de permutation.The traffic redirection is seamless, and no requests are dropped because of swap operations. Vous pouvez automatiser l’intégralité de ce workflow en configurant l’échange automatique lorsqu’aucune validation n’est nécessaire avant l’échange.You can automate this entire workflow by configuring auto swap when pre-swap validation isn't needed.
  • Après basculement, la précédente application de production se retrouve dans l’emplacement de l’application précédemment intermédiaire.After a swap, the slot with previously staged app now has the previous production app. Si les modifications permutées en production ne vous conviennent pas, vous pouvez effectuer la même permutation afin de récupérer immédiatement le contenu du précédent site qui vous plaisait.If the changes swapped into the production slot aren't as you expect, you can perform the same swap immediately to get your "last known good site" back.

Chaque niveau de plan App Service prend en charge un nombre différent d’emplacements de déploiement.Each App Service plan tier supports a different number of deployment slots. L’utilisation de ces emplacements de déploiement n’entraîne aucun coût supplémentaire.There's no additional charge for using deployment slots. Pour connaître le nombre d’emplacements pris en charge par le plan de votre application, consultez Limites App Service.To find out the number of slots your app's tier supports, see App Service limits.

Pour mettre votre application à l’échelle vers un autre niveau, vérifiez que le niveau cible peut prendre en charge le nombre d’emplacements déjà utilisés par votre application.To scale your app to a different tier, make sure that the target tier supports the number of slots your app already uses. Par exemple, si votre application comprend plus de cinq emplacements, vous ne pouvez pas effectuer de scale-down vers le niveau Standard, car le niveau Standard ne prend en charge que cinq emplacements de déploiement.For example, if your app has more than five slots, you can't scale it down to the Standard tier, because the Standard tier supports only five deployment slots.

Ajouter un emplacementAdd a slot

Pour que vous puissiez activer plusieurs emplacements de déploiement, l’application doit s’exécuter au niveau Standard, Premium ou Isolé.The app must be running in the Standard, Premium, or Isolated tier in order for you to enable multiple deployment slots.

  1. dans le portail Azure, recherchez et sélectionnez App Services, puis sélectionnez votre application.in the Azure portal, search for and select App Services and select your app.

    Rechercher App Services

  2. Dans le volet gauche, sélectionnez Emplacements de déploiement > Ajouter un emplacement.In the left pane, select Deployment slots > Add Slot.

    Add a new deployment slot

    Notes

    Si l’application ne s’exécute pas au niveau Standard, Premium ou Isolé, vous recevez un message précisant les niveaux pris en charge pour la publication intermédiaire.If the app isn't already in the Standard, Premium, or Isolated tier, you receive a message that indicates the supported tiers for enabling staged publishing. À ce stade, vous pouvez sélectionner Mettre à niveau et accéder à l’onglet Mettre à l’échelle de votre application avant de continuer.At this point, you have the option to select Upgrade and go to the Scale tab of your app before continuing.

  3. Dans la boîte de dialogue Ajouter un emplacement, nommez l’emplacement, puis indiquez si vous souhaitez cloner une configuration d’application à partir d’un autre emplacement de déploiement.In the Add a slot dialog box, give the slot a name, and select whether to clone an app configuration from another deployment slot. Sélectionnez Ajouter pour continuer.Select Add to continue.

    Source de configuration

    Vous pouvez cloner une configuration à partir d’un emplacement existant.You can clone a configuration from any existing slot. Parmi les paramètres pouvant être clonés figurent des paramètres de l’application, des chaînes de connexion, des versions du framework de langage, des sockets web, la version HTTP et le nombre de bits de la plateforme.Settings that can be cloned include app settings, connection strings, language framework versions, web sockets, HTTP version, and platform bitness.

  4. Une fois l’emplacement ajouté, sélectionnez Fermer pour fermer la boîte de dialogue.After the slot is added, select Close to close the dialog box. Le nouvel emplacement est désormais affiché dans la page Emplacements de déploiement.The new slot is now shown on the Deployment slots page. Par défaut, l’option % de trafic est définie sur 0 pour le nouvel emplacement, avec tout le trafic client acheminé vers l’emplacement de production.By default, Traffic % is set to 0 for the new slot, with all customer traffic routed to the production slot.

  5. Sélectionnez le nouvel emplacement de déploiement pour ouvrir la page des ressources de cet emplacement.Select the new deployment slot to open that slot's resource page.

    Titre de l’emplacement de déploiement

    L’emplacement intermédiaire dispose d’une page de gestion, comme n’importe quelle application App Service.The staging slot has a management page just like any other App Service app. Vous pouvez modifier la configuration de l’emplacement.You can change the slot's configuration. Pour vous rappeler que vous voyez l’emplacement de déploiement, le nom de l’application apparaît sous la forme <app-name>/<slot-name> , et le type d’application est App Service (Emplacement) .To remind you that you're viewing the deployment slot, the app name is shown as <app-name>/<slot-name>, and the app type is App Service (Slot). Vous pouvez également afficher l’emplacement sous la forme d’une application distincte dans votre groupe de ressources, avec les mêmes désignations.You can also see the slot as a separate app in your resource group, with the same designations.

  6. Sélectionnez l’URL de l’application dans la page des ressources de l’emplacement.Select the app URL on the slot's resource page. L’emplacement de déploiement est une application en production et il a son propre nom d’hôte.The deployment slot has its own host name and is also a live app. Pour limiter l’accès public à l’emplacement de déploiement, consultez Restrictions d’adresse IP avec Azure App Service.To limit public access to the deployment slot, see Azure App Service IP restrictions.

Le nouvel emplacement de déploiement n’a aucun contenu, même si vous clonez les paramètres à partir d’un autre emplacement.The new deployment slot has no content, even if you clone the settings from a different slot. Par exemple, vous pouvez publier sur cet emplacement avec Git.For example, you can publish to this slot with Git. Vous pouvez effectuer un déploiement sur l’emplacement à partir d’une autre branche du dépôt, ou d’un dépôt différent.You can deploy to the slot from a different repository branch or a different repository.

Que se passe-t-il pendant un échange ?What happens during a swap

Étapes qui composent une opération d’échangeSwap operation steps

Lorsque vous échangez deux emplacements (en général, vous passez d’un emplacement de préproduction à un emplacement de production), App Service effectue ce qui suit pour éviter que l’emplacement cible ne subisse un temps d’arrêt :When you swap two slots (usually from a staging slot into the production slot), App Service does the following to ensure that the target slot doesn't experience downtime:

  1. Applique les paramètres suivants de l’emplacement cible (par exemple, l’emplacement de production) à toutes les instances de l’emplacement source :Apply the following settings from the target slot (for example, the production slot) to all instances of the source slot:

    Quel que soit le cas, cela déclenche le redémarrage de toutes les instances dans l’emplacement source.Any of these cases trigger all instances in the source slot to restart. Au cours d’un échange avec aperçu, cela marque la fin de la première phase.During swap with preview, this marks the end of the first phase. L’opération d’échange est suspendue, ce qui vous permet de vérifier que l’emplacement source fonctionne correctement avec les paramètres de l’emplacement cible.The swap operation is paused, and you can validate that the source slot works correctly with the target slot's settings.

  2. Attendez que chaque instance de l’emplacement source ait terminé son redémarrage.Wait for every instance in the source slot to complete its restart. Si l’une des instances ne parvient pas à redémarrer, l’opération d’échange rétablit toutes les modifications apportées à l’emplacement source, puis cesse d’être exécutée.If any instance fails to restart, the swap operation reverts all changes to the source slot and stops the operation.

  3. Si le cache local est activé, déclenchez son initialisation en envoyant une requête HTTP à la racine de l’application (« / »), sur chaque instance de l’emplacement source.If local cache is enabled, trigger local cache initialization by making an HTTP request to the application root ("/") on each instance of the source slot. Attendez que chaque instance retourne une réponse HTTP.Wait until each instance returns any HTTP response. L’initialisation du cache local provoque un autre redémarrage sur chaque instance.Local cache initialization causes another restart on each instance.

  4. Si l’échange automatique est activé avec l’initialisation personnalisée, déclenchez l’initialisation de l’application en envoyant une requête HTTP à la racine de l’application (« / ») sur chaque instance de l’emplacement source.If auto swap is enabled with custom warm-up, trigger Application Initiation by making an HTTP request to the application root ("/") on each instance of the source slot.

    Si applicationInitialization n’est pas spécifié, déclenchez une requête HTTP à la racine de l’application de l’emplacement source sur chaque instance.If applicationInitialization isn't specified, trigger an HTTP request to the application root of the source slot on each instance.

    Si une instance retourne une réponse HTTP, elle est considérée comme initialisée.If an instance returns any HTTP response, it's considered to be warmed up.

  5. Si toutes les instances de l’emplacement source sont correctement initialisées, échangez les deux emplacements en échangeant leurs règles de routage.If all instances on the source slot are warmed up successfully, swap the two slots by switching the routing rules for the two slots. Après cette étape, l’emplacement cible (par exemple, l’emplacement de production) dispose de l’application déjà initialisée dans l’emplacement source.After this step, the target slot (for example, the production slot) has the app that's previously warmed up in the source slot.

  6. Maintenant que l’emplacement source dispose de l’application de l’emplacement cible avant échange, effectuez la même opération en appliquant tous les paramètres et en redémarrant les instances.Now that the source slot has the pre-swap app previously in the target slot, perform the same operation by applying all settings and restarting the instances.

Lors d’une opération d’échange, l’intégralité du processus d’initialisation des applications échangées se déroule dans l’emplacement source.At any point of the swap operation, all work of initializing the swapped apps happens on the source slot. L’emplacement cible reste en ligne pendant la préparation et l’initialisation de l’emplacement source, que l’échange ait réussi ou échoué.The target slot remains online while the source slot is being prepared and warmed up, regardless of where the swap succeeds or fails. Pour échanger un emplacement de préproduction avec un emplacement de production, vérifiez que l’emplacement de production est toujours l’emplacement cible.To swap a staging slot with the production slot, make sure that the production slot is always the target slot. De cette façon, l’opération d’échange n’affectera pas votre application de production.This way, the swap operation doesn't affect your production app.

Quels sont les paramètres échangés ?Which settings are swapped?

Lorsque vous clonez la configuration depuis un autre emplacement de déploiement, celle-ci est modifiable.When you clone configuration from another deployment slot, the cloned configuration is editable. Au cours d’un échange, certains éléments de configuration suivent le contenu (éléments non propres à un emplacement) tandis que d’autres restent dans le même emplacement après l’échange (éléments propres à un emplacement).Some configuration elements follow the content across a swap (not slot specific), whereas other configuration elements stay in the same slot after a swap (slot specific). Les listes suivantes représentent les paramètres qui évoluent lorsque vous échangez les emplacements.The following lists show the settings that change when you swap slots.

Paramètres échangés:Settings that are swapped:

  • Paramètres généraux, par exemple versions du framework, 32/64 bits, sockets webGeneral settings, such as framework version, 32/64-bit, web sockets
  • Paramètres d’application (peuvent être configurés pour respecter un emplacement)App settings (can be configured to stick to a slot)
  • Chaînes de connexion (peuvent être configurées pour respecter un emplacement)Connection strings (can be configured to stick to a slot)
  • Mappages de gestionnairesHandler mappings
  • Certificats publicsPublic certificates
  • Contenu WebJobsWebJobs content
  • Connexions hybrides*Hybrid connections *
  • Points de terminaison de service*Service endpoints *
  • Azure Content Delivery Network*Azure Content Delivery Network *

Il est prévu que les fonctionnalités marquées d’un astérisque (*) ne soient plus échangées.Features marked with an asterisk (*) are planned to be unswapped.

Paramètres non échangés :Settings that aren't swapped:

  • Points de terminaison de publicationPublishing endpoints
  • Noms de domaine personnalisésCustom domain names
  • Certificats non publics et paramètres TLS/SSLNon-public certificates and TLS/SSL settings
  • Paramètres de mise à l’échelleScale settings
  • Planificateurs WebJobsWebJobs schedulers
  • Restrictions d’adresse IPIP restrictions
  • Always OnAlways On
  • Paramètres de diagnosticDiagnostic settings
  • Partage des ressources cross-origin (CORS)Cross-origin resource sharing (CORS)
  • Intégration du réseau virtuelVirtual network integration

Notes

Pour rendre ces paramètres remplaçables, ajoutez le paramètre d’application WEBSITE_OVERRIDE_PRESERVE_DEFAULT_STICKY_SLOT_SETTINGS dans chaque emplacement de l’application et définissez sa valeur sur 0 ou false.To make these settings swappable, add the app setting WEBSITE_OVERRIDE_PRESERVE_DEFAULT_STICKY_SLOT_SETTINGS in every slot of the app and set its value to 0 or false. Ces paramètres sont tous remplaçables ou aucun d’entre eux ne l’est.These settings are either all swappable or not at all. Vous ne pouvez pas rendre certains paramètres remplaçables et d’autres, pas.You can’t make just some settings swappable and not the others.

Certains paramètres d’application qui s’appliquent à des paramètres non échangés ne sont pas non plus échangés.Certain app settings that apply to unswapped settings are also not swapped. Par exemple, étant donné que les paramètres de diagnostic ne sont pas échangés, les paramètres d’application associés comme WEBSITE_HTTPLOGGING_RETENTION_DAYS et DIAGNOSTICS_AZUREBLOBRETENTIONDAYS ne sont pas non plus échangés, même s’ils n’apparaissent pas comme des paramètres d’emplacement.For example, since diagnostic settings are not swapped, related app settings like WEBSITE_HTTPLOGGING_RETENTION_DAYS and DIAGNOSTICS_AZUREBLOBRETENTIONDAYS are also not swapped, even if they don't show up as slot settings.

Si vous souhaitez configurer un paramètre d’application ou une chaîne de connexion pour qu’ils restent dans leur emplacement d’origine (et ne puissent donc pas être échangés), accédez à la page Configuration de l’emplacement en question.To configure an app setting or connection string to stick to a specific slot (not swapped), go to the Configuration page for that slot. Ajoutez ou modifiez un paramètre, puis sélectionnez Paramètre d’emplacement de déploiement.Add or edit a setting, and then select deployment slot setting. Le fait de cocher cette case indique à App Service que le paramètre n’est pas échangeable.Selecting this check box tells App Service that the setting is not swappable.

Paramètre de l’emplacement

Permuter deux emplacementsSwap two slots

Vous pouvez échanger des emplacements de déploiement dans la page Emplacements de déploiement et la page Vue d’ensemble de votre application.You can swap deployment slots on your app's Deployment slots page and the Overview page. Pour obtenir des détails techniques sur l’échange des emplacements, consultez Que se passe-t-il pendant un échange ?.For technical details on the slot swap, see What happens during swap.

Important

Avant de basculer une application de l’emplacement de déploiement vers l’emplacement de production, vérifiez que l’emplacement de production est bien votre emplacement cible, et que tous les paramètres de l’emplacement source sont configurés comme vous le souhaitez dans l’emplacement de production.Before you swap an app from a deployment slot into production, make sure that production is your target slot and that all settings in the source slot are configured exactly as you want to have them in production.

Pour échanger des emplacements de déploiement :To swap deployment slots:

  1. Accédez à la page Emplacements de déploiement de votre application, puis sélectionnez Échanger.Go to your app's Deployment slots page and select Swap.

    Bouton Échanger

    La boîte de dialogue Échanger regroupe les paramètres des emplacements source et cible sélectionnés qui vont être échangés.The Swap dialog box shows settings in the selected source and target slots that will be changed.

  2. Sélectionnez les emplacements Source et Cible souhaités.Select the desired Source and Target slots. En général, la cible correspond à l’emplacement de production.Usually, the target is the production slot. Sélectionnez également les onglets Modifications sources et Modifications cibles pour vérifier que les changements de configuration à opérer correspondent à ce que vous attendez.Also, select the Source Changes and Target Changes tabs and verify that the configuration changes are expected. Lorsque vous avez terminé, vous pouvez échanger les emplacements immédiatement en sélectionnant Échanger.When you're finished, you can swap the slots immediately by selecting Swap.

    Échange effectué

    Pour voir comment votre emplacement cible s’exécuterait avec les nouveaux paramètres avant que l’échange ne soit réellement effectué, ne sélectionnez pas Échanger, mais suivez les instructions fournies dans Échange avec aperçu.To see how your target slot would run with the new settings before the swap actually happens, don't select Swap, but follow the instructions in Swap with preview.

  3. Lorsque vous avez terminé, fermez la boîte de dialogue en sélectionnant Fermer.When you're finished, close the dialog box by selecting Close.

Si vous rencontrez des problèmes, consultez Résoudre les problèmes liés aux échanges.If you have any problems, see Troubleshoot swaps.

Échange avec aperçu (échange multiphase)Swap with preview (multi-phase swap)

Avant de passer à l’emplacement de production (emplacement cible), contrôlez l’exécution de l’application avec les paramètres échangés.Before you swap into production as the target slot, validate that the app runs with the swapped settings. L’emplacement source est également initialisé avant la fin de l’échange, ce qui est souhaitable pour les applications stratégiques.The source slot is also warmed up before the swap completion, which is desirable for mission-critical applications.

Lorsque vous effectuez un échange avec aperçu, App Service effectue la même opération d’échange, mais il fait une pause après la première étape.When you perform a swap with preview, App Service performs the same swap operation but pauses after the first step. Vous pouvez donc vérifier le résultat sur l’emplacement de préproduction avant la fin de l’échange.You can then verify the result on the staging slot before completing the swap.

Si vous annulez l’échange, App Service réapplique les éléments de configuration à l’emplacement source.If you cancel the swap, App Service reapplies configuration elements to the source slot.

Pour effectuer un échange avec aperçu :To swap with preview:

  1. Procédez comme indiqué dans Échanger des emplacements de déploiement, mais sélectionnez Effectuer l’échange avec aperçu.Follow the steps in Swap deployment slots but select Perform swap with preview.

    Échange avec aperçu

    La boîte de dialogue montre comment la configuration de l’emplacement source est modifiée dans la phase 1, et comment les emplacements source et cible sont modifiés dans la phase 2.The dialog box shows you how the configuration in the source slot changes in phase 1, and how the source and target slot change in phase 2.

  2. Lorsque vous êtes prêt à démarrer l’échange, sélectionnez Démarrer l’échange.When you're ready to start the swap, select Start Swap.

    Lorsque la phase 1 est terminée, vous en êtes averti dans la boîte de dialogue.When phase 1 finishes, you're notified in the dialog box. Affichez l’aperçu de l’échange dans l’emplacement source en accédant à https://<app_name>-<source-slot-name>.azurewebsites.net.Preview the swap in the source slot by going to https://<app_name>-<source-slot-name>.azurewebsites.net.

  3. Lorsque vous êtes prêt à effectuer l’échange en attente, sélectionnez Terminer l’échange dans Action d’échange, puis sélectionnez Terminer l’échange.When you're ready to complete the pending swap, select Complete Swap in Swap action and select Complete Swap.

    Pour annuler un échange en attente, sélectionnez plutôt Annuler l’échange.To cancel a pending swap, select Cancel Swap instead.

  4. Lorsque vous avez terminé, fermez la boîte de dialogue en sélectionnant Fermer.When you're finished, close the dialog box by selecting Close.

Si vous rencontrez des problèmes, consultez Résoudre les problèmes liés aux échanges.If you have any problems, see Troubleshoot swaps.

Pour automatiser un échange multiphase, consultez Automatiser avec PowerShell.To automate a multi-phase swap, see Automate with PowerShell.

Restaurer un échangeRoll back a swap

Si des erreurs se produisent dans l’emplacement cible (par exemple, l’emplacement de production) après une permutation d’emplacements, rétablissez ces deux emplacements comme ils étaient avant l’opération, en les intervertissant immédiatement.If any errors occur in the target slot (for example, the production slot) after a slot swap, restore the slots to their pre-swap states by swapping the same two slots immediately.

Configurer l’échange automatiqueConfigure auto swap

Notes

L’échange automatique n’est pas pris en charge dans les applications web sur Linux.Auto swap isn't supported in web apps on Linux.

L’échange automatique simplifie les scénarios Azure DevOps impliquant un déploiement de l’application en continu, sans démarrage à froid ni temps d’arrêt pour les utilisateurs de l’application.Auto swap streamlines Azure DevOps scenarios where you want to deploy your app continuously with zero cold starts and zero downtime for customers of the app. Lorsque vous activez l’échange automatique d’un emplacement vers l’emplacement de production, chaque fois que vous envoyez (push) des modifications de votre code à cet emplacement, App Service fait basculer automatiquement l’application vers la production après son initialisation dans l’emplacement source.When auto swap is enabled from a slot into production, every time you push your code changes to that slot, App Service automatically swaps the app into production after it's warmed up in the source slot.

Notes

Avant de configurer l’échange automatique pour l’emplacement de production, il est conseillé de tester l’échange automatique sur un emplacement cible hors production.Before you configure auto swap for the production slot, consider testing auto swap on a non-production target slot.

Pour configurer l’échange automatique :To configure auto swap:

  1. Accédez à la page des ressources de votre application.Go to your app's resource page. Sélectionnez Emplacements de déploiement > <desired source slot> > Configuration > Paramètres généraux.Select Deployment slots > <desired source slot> > Configuration > General settings.

  2. Pour Échange automatique activé, sélectionnez Activé.For Auto swap enabled, select On. Ensuite, sélectionnez l’emplacement cible souhaité pour Échanger automatiquement l’emplacement de déploiement, puis sélectionnez Enregistrer dans la barre de commandes.Then select the desired target slot for Auto swap deployment slot, and select Save on the command bar.

    Sélections pour la configuration de l’échange automatique

  3. Exécutez un push de code sur l’emplacement source.Execute a code push to the source slot. L’échange automatique se produit peu après, et la mise à jour est appliquée dans l’URL de votre emplacement cible.Auto swap happens after a short time, and the update is reflected at your target slot's URL.

Si vous rencontrez des problèmes, consultez Résoudre les problèmes liés aux échanges.If you have any problems, see Troubleshoot swaps.

Spécifier l’initialisation personnaliséeSpecify custom warm-up

Certaines applications peuvent nécessiter quelques actions préparatoires personnalisées avant l’échange.Some apps might require custom warm-up actions before the swap. L’élément de configuration applicationInitialization du fichier web.config vous permet de spécifier les actions d’initialisation personnalisées à exécuter.The applicationInitialization configuration element in web.config lets you specify custom initialization actions. L’opération d’échange attend la fin de l’initialisation personnalisée pour procéder à l’échange avec l’emplacement cible.The swap operation waits for this custom warm-up to finish before swapping with the target slot. Voici un exemple de fragment web.config.Here's a sample web.config fragment.

<system.webServer>
    <applicationInitialization>
        <add initializationPage="/" hostName="[app hostname]" />
        <add initializationPage="/Home/About" hostName="[app hostname]" />
    </applicationInitialization>
</system.webServer>

Pour plus d’informations sur la personnalisation de l’élément applicationInitialization, consultez Most common deployment slot swap failures and how to fix them.For more information on customizing the applicationInitialization element, see Most common deployment slot swap failures and how to fix them.

Vous pouvez également personnaliser le comportement d’initialisation en utilisant l’un des deux paramètres d’application suivants (ou les deux) :You can also customize the warm-up behavior with one or both of the following app settings:

  • WEBSITE_SWAP_WARMUP_PING_PATH: chemin permettant d’effectuer un test ping afin d’initialiser votre site.WEBSITE_SWAP_WARMUP_PING_PATH: The path to ping to warm up your site. Ajoutez ce paramètre d’application en spécifiant un chemin d’accès personnalisé qui commence par une barre oblique comme valeur.Add this app setting by specifying a custom path that begins with a slash as the value. par exemple /statuscheck.An example is /statuscheck. La valeur par défaut est /.The default value is /.
  • WEBSITE_SWAP_WARMUP_PING_STATUSES: Codes de réponse HTTP valides pour l’opération d'initialisation.WEBSITE_SWAP_WARMUP_PING_STATUSES: Valid HTTP response codes for the warm-up operation. Ajoutez ce paramètre d’application avec une liste séparée par des virgules de codes HTTP.Add this app setting with a comma-separated list of HTTP codes. Par exemple 200,202.An example is 200,202 . Si le code d’état retourné ne figure pas dans la liste, les opérations d’initialisation et d’échange sont arrêtées.If the returned status code isn't in the list, the warmup and swap operations are stopped. Par défaut, tous les codes de réponse sont valides.By default, all response codes are valid.
  • WEBSITE_WARMUP_PATH : chemin d’accès relatif sur le site qui doit faire l’objet d’un test ping à chaque redémarrage du site (pas seulement pendant les échanges d’emplacements).WEBSITE_WARMUP_PATH: A relative path on the site that should be pinged whenever the site restarts (not only during slot swaps). Les valeurs sont, par exemple, /statuscheck ou le chemin d’accès racine, /.Example values include /statuscheck or the root path, /.

Notes

L’élément de configuration <applicationInitialization> fait partie de chaque démarrage d’application, tandis que les deux paramètres d’application de comportement de préchauffage s’appliquent uniquement aux échanges d’emplacements.The <applicationInitialization> configuration element is part of each app start-up, whereas the two warm-up behavior app settings apply only to slot swaps.

Si vous rencontrez des problèmes, consultez Résoudre les problèmes liés aux échanges.If you have any problems, see Troubleshoot swaps.

Superviser un échangeMonitor a swap

Si l’exécution de l’opération d’échange prend beaucoup de temps, vous pouvez obtenir des informations au sujet de cette opération dans le journal d’activité.If the swap operation takes a long time to complete, you can get information on the swap operation in the activity log.

Sur le portail, dans la page des ressources de votre application, sélectionnez Journal d’activité dans le volet de gauche.On your app's resource page in the portal, in the left pane, select Activity log.

Une opération d’échange s’affiche dans la requête de journal en tant que Swap Web App Slots.A swap operation appears in the log query as Swap Web App Slots. Vous pouvez la développer et sélectionner l’une des sous-opérations ou erreurs afin d’afficher le contenu en détail.You can expand it and select one of the suboperations or errors to see the details.

Acheminer le traficRoute traffic

Par défaut, toutes les requêtes clientes vers les URL de production de l’application (http://<app_name>.azurewebsites.net) sont acheminées vers l’emplacement de production.By default, all client requests to the app's production URL (http://<app_name>.azurewebsites.net) are routed to the production slot. Vous pouvez acheminer une partie du trafic vers un autre emplacement.You can route a portion of the traffic to another slot. Cette fonctionnalité est utile si vous avez besoin d’un retour d’expérience utilisateur pour une nouvelle mise à jour, mais que vous n’êtes pas prêt à la publier en production.This feature is useful if you need user feedback for a new update, but you're not ready to release it to production.

Acheminer le trafic de production automatiquementRoute production traffic automatically

Pour router le trafic de production automatiquement :To route production traffic automatically:

  1. Accédez à la page des ressources de votre application et sélectionnez Emplacements de déploiement.Go to your app's resource page and select Deployment slots.

  2. Dans la colonne % de trafic de l’emplacement vers lequel vous souhaitez acheminer le trafic, spécifiez un pourcentage (compris entre 0 et 100) pour représenter la quantité totale de trafic à diriger.In the Traffic % column of the slot you want to route to, specify a percentage (between 0 and 100) to represent the amount of total traffic you want to route. Sélectionnez Enregistrer.Select Save.

    Définition d’un pourcentage de trafic

Une fois le paramètre enregistré, le pourcentage de clients spécifié est routé de manière aléatoire vers l’emplacement hors production.After the setting is saved, the specified percentage of clients is randomly routed to the non-production slot.

Lorsqu’un client est automatiquement routé vers un emplacement particulier, il est « épinglé » à cet emplacement pendant toute la durée de cette session cliente.After a client is automatically routed to a specific slot, it's "pinned" to that slot for the life of that client session. Dans le navigateur client, vous pouvez voir à quel emplacement votre session est épinglée en examinant le cookie x-ms-routing-name dans les en-têtes HTTP.On the client browser, you can see which slot your session is pinned to by looking at the x-ms-routing-name cookie in your HTTP headers. Une requête qui est acheminée vers l’emplacement « intermédiaire » contient le cookie x-ms-routing-name=staging.A request that's routed to the "staging" slot has the cookie x-ms-routing-name=staging. Une requête qui est acheminée vers l’emplacement de production a le cookie x-ms-routing-name=self.A request that's routed to the production slot has the cookie x-ms-routing-name=self.

Notes

À côté du portail Azure, vous pouvez également utiliser la commande az webapp traffic-routing set dans Azure CLI pour définir les pourcentages de routage à partir d’outils CI/CD comme les pipelines DevOps ou d’autres systèmes d’automatisation.Next to the Azure portal, you can also use the az webapp traffic-routing set command in the Azure CLI to set the routing percentages from CI/CD tools like DevOps pipelines or other automation systems.

Acheminer le trafic de production manuellementRoute production traffic manually

Parallèlement au routage automatique du trafic, App Service peut acheminer les requêtes vers un emplacement particulier.In addition to automatic traffic routing, App Service can route requests to a specific slot. Cela s’avère utile si vous souhaitez que vos utilisateurs puissent choisir d’accepter ou de refuser votre application bêta.This is useful when you want your users to be able to opt in to or opt out of your beta app. Pour router le trafic de production manuellement, vous utilisez le paramètre de requête x-ms-routing-name.To route production traffic manually, you use the x-ms-routing-name query parameter.

Par exemple, pour permettre aux utilisateurs de refuser votre application bêta, vous pouvez placer ce lien dans votre page web :To let users opt out of your beta app, for example, you can put this link on your webpage:

<a href="<webappname>.azurewebsites.net/?x-ms-routing-name=self">Go back to production app</a>

La chaîne x-ms-routing-name=self spécifie l’emplacement de production.The string x-ms-routing-name=self specifies the production slot. Lorsque le navigateur client accède au lien, il est redirigé vers l’emplacement de production.After the client browser accesses the link, it's redirected to the production slot. Chaque requête ultérieure comprendra le cookie x-ms-routing-name=self qui épinglera la session à l’emplacement de production.Every subsequent request has the x-ms-routing-name=self cookie that pins the session to the production slot.

Pour permettre aux utilisateurs d’accepter votre application bêta, définissez le même paramètre de requête pour le nom de l’emplacement hors production.To let users opt in to your beta app, set the same query parameter to the name of the non-production slot. Voici un exemple :Here's an example:

<webappname>.azurewebsites.net/?x-ms-routing-name=staging

Par défaut, les nouveaux emplacements se voient attribuer une règle de routage de 0% (indiquée en gris).By default, new slots are given a routing rule of 0%, shown in grey. Lorsque vous définissez cette valeur explicitement sur 0% (indiquée en noir), vos utilisateurs peuvent accéder à l’emplacement de préproduction manuellement, à l’aide du paramètre de requête x-ms-routing-name.When you explicitly set this value to 0% (shown in black text), your users can access the staging slot manually by using the x-ms-routing-name query parameter. Toutefois, ils ne seront pas routés vers l’emplacement automatiquement, car le pourcentage de routage est défini sur 0.But they won't be routed to the slot automatically because the routing percentage is set to 0. Il s’agit d’un scénario avancé où vous pouvez « cacher » votre emplacement de préproduction du public, tout en permettant aux équipes internes de tester les modifications sur l’emplacement.This is an advanced scenario where you can "hide" your staging slot from the public while allowing internal teams to test changes on the slot.

Supprimer un emplacementDelete a slot

Recherchez et sélectionnez votre application.Search for and select your app. Sélectionnez Emplacements de déploiement > <slot to delete> > Vue d’ensemble.Select Deployment slots > <slot to delete> > Overview. Le type d’application est indiqué comme App Service (Emplacement) pour vous rappeler que vous consultez un emplacement de déploiement.The app type is shown as App Service (Slot) to remind you that you're viewing a deployment slot. Sélectionnez Supprimer dans la barre de commandes.Select Delete on the command bar.

Supprimer un emplacement de déploiement

Automatiser avec PowerShellAutomate with PowerShell

Notes

Cet article a été mis à jour pour pouvoir utiliser le module Azure Az PowerShell.This article has been updated to use the Azure Az PowerShell module. Le module Az PowerShell est le module PowerShell qui est recommandé pour interagir avec Azure.The Az PowerShell module is the recommended PowerShell module for interacting with Azure. Pour démarrer avec le module Az PowerShell, consulter Installer Azure PowerShell.To get started with the Az PowerShell module, see Install Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.To learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.

Azure PowerShell est un module qui fournit des applets de commande pour gérer Azure via Windows PowerShell, notamment la prise en charge de la gestion des emplacements de déploiement des applications dans Azure App Service.Azure PowerShell is a module that provides cmdlets to manage Azure through Windows PowerShell, including support for managing deployment slots in Azure App Service.

Pour plus d’informations sur l’installation et la configuration d’Azure PowerShell et sur l’authentification d’Azure PowerShell avec votre abonnement Azure, consultez la page Installation et configuration d’Azure PowerShell.For information on installing and configuring Azure PowerShell, and on authenticating Azure PowerShell with your Azure subscription, see How to install and configure Microsoft Azure PowerShell.


Créer une application webCreate a web app

New-AzWebApp -ResourceGroupName [resource group name] -Name [app name] -Location [location] -AppServicePlan [app service plan name]

Créer un emplacementCreate a slot

New-AzWebAppSlot -ResourceGroupName [resource group name] -Name [app name] -Slot [deployment slot name] -AppServicePlan [app service plan name]

Démarrer un échange avec aperçu (échange multiphase) et appliquer la configuration de l’emplacement de destination à l’emplacement sourceInitiate a swap with a preview (multi-phase swap), and apply destination slot configuration to the source slot

$ParametersObject = @{targetSlot  = "[slot name – e.g. "production"]"}
Invoke-AzResourceAction -ResourceGroupName [resource group name] -ResourceType Microsoft.Web/sites/slots -ResourceName [app name]/[slot name] -Action applySlotConfig -Parameters $ParametersObject -ApiVersion 2015-07-01

Annuler un échange en attente (échange avec aperçu) et restaurer la configuration de l’emplacement sourceCancel a pending swap (swap with review) and restore the source slot configuration

Invoke-AzResourceAction -ResourceGroupName [resource group name] -ResourceType Microsoft.Web/sites/slots -ResourceName [app name]/[slot name] -Action resetSlotConfig -ApiVersion 2015-07-01

Échanger des emplacements de déploiementSwap deployment slots

$ParametersObject = @{targetSlot  = "[slot name – e.g. "production"]"}
Invoke-AzResourceAction -ResourceGroupName [resource group name] -ResourceType Microsoft.Web/sites/slots -ResourceName [app name]/[slot name] -Action slotsswap -Parameters $ParametersObject -ApiVersion 2015-07-01

Superviser les événements d’échange dans le journal d’activitéMonitor swap events in the activity log

Get-AzLog -ResourceGroup [resource group name] -StartTime 2018-03-07 -Caller SlotSwapJobProcessor  

Supprimer un emplacementDelete a slot

Remove-AzResource -ResourceGroupName [resource group name] -ResourceType Microsoft.Web/sites/slots –Name [app name]/[slot name] -ApiVersion 2015-07-01

Automatiser avec des modèles Resource ManagerAutomate with Resource Manager templates

Les modèles Azure Resource Manager sont des fichiers JSON déclaratifs utilisés pour automatiser le déploiement et la configuration de ressources Azure.Azure Resource Manager templates are declarative JSON files used to automate the deployment and configuration of Azure resources. Pour échanger des emplacements à l’aide de modèles Resource Manager, vous devez définir deux propriétés sur les ressources Microsoft.Web/sites/slots et Microsoft.Web/sites :To swap slots by using Resource Manager templates, you will set two properties on the Microsoft.Web/sites/slots and Microsoft.Web/sites resources:

  • buildVersion : propriété de type chaîne qui représente la version actuelle de l’application déployée dans l’emplacement.buildVersion: this is a string property which represents the current version of the app deployed in the slot. Par exemple : « v1 », « 1.0.0.1 » ou « 2019-09-20T11:53:25.2887393-07:00 ».For example: "v1", "1.0.0.1", or "2019-09-20T11:53:25.2887393-07:00".
  • targetBuildVersion : propriété de type chaîne spécifiant la valeur buildVersion que l’emplacement doit avoir.targetBuildVersion: this is a string property that specifies what buildVersion the slot should have. Si la valeur targetBuildVersion n’est pas la valeur buildVersion actuelle, cela déclenche l’opération d’échange en recherchant l’emplacement qui a la valeur buildVersion spécifiée.If the targetBuildVersion does not equal the current buildVersion, then this will trigger the swap operation by finding the slot which has the specified buildVersion.

Exemple de modèle Resource ManagerExample Resource Manager template

Le modèle Resource Manager suivant met à jour la valeur buildVersion de l’emplacement de préproduction et définit la valeur targetBuildVersion sur l’emplacement de production.The following Resource Manager template will update the buildVersion of the staging slot and set the targetBuildVersion on the production slot. Cela a pour effet d’échanger les deux emplacements.This will swap the two slots. Le modèle suppose que vous avez déjà créé un application web avec un emplacement nommé « préproduction ».The template assumes you already have a webapp created with a slot named "staging".

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "my_site_name": {
            "defaultValue": "SwapAPIDemo",
            "type": "String"
        },
        "sites_buildVersion": {
            "defaultValue": "v1",
            "type": "String"
        }
    },
    "resources": [
        {
            "type": "Microsoft.Web/sites/slots",
            "apiVersion": "2018-02-01",
            "name": "[concat(parameters('my_site_name'), '/staging')]",
            "location": "East US",
            "kind": "app",
            "properties": {
                "buildVersion": "[parameters('sites_buildVersion')]"
            }
        },
        {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2018-02-01",
            "name": "[parameters('my_site_name')]",
            "location": "East US",
            "kind": "app",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites/slots', parameters('my_site_name'), 'staging')]"
            ],
            "properties": {
                "targetBuildVersion": "[parameters('sites_buildVersion')]"
            }
        }        
    ]
}

Ce modèle Resource Manager est idempotent, ce qui signifie qu’il peut être exécuté à plusieurs reprises et produire le même état des emplacements.This Resource Manager template is idempotent, meaning that it can be executed repeatedly and produce the same state of the slots. Après la première exécution, la valeur targetBuildVersion correspond à la valeur buildVersion actuelle, de sorte qu’aucun échange n’est déclenché.After the first execution, targetBuildVersion will match the current buildVersion, so a swap will not be triggered.

Automatiser avec l’interface CLIAutomate with the CLI

Pour connaître les commandes de l’interface Azure CLI pour les emplacements de déploiement, consultez az webapp deployment slot.For Azure CLI commands for deployment slots, see az webapp deployment slot.

Résoudre les problèmes liés aux échangesTroubleshoot swaps

Si une erreur se produit pendant un échange d’emplacement, celle-ci est journalisée dans D:\home\LogFiles\eventlog.xml.If any error occurs during a slot swap, it's logged in D:\home\LogFiles\eventlog.xml. Elle est également journalisée dans le journal des erreurs propres à l’application.It's also logged in the application-specific error log.

Voici quelques erreurs courantes liées aux échanges :Here are some common swap errors:

  • Une requête HTTP envoyée à la racine de l’application a expiré.An HTTP request to the application root is timed. L’opération d’échange attend 90 secondes pour chaque requête HTTP, et retente jusqu’à 5 fois.The swap operation waits for 90 seconds for each HTTP request, and retries up to 5 times. Si toutes les nouvelles tentatives expirent elles aussi, l’opération d’échange est arrêtée.If all retries are timed out, the swap operation is stopped.

  • L’initialisation du cache local peut échouer si le contenu de l’application dépasse le quota de disque local spécifié.Local cache initialization might fail when the app content exceeds the local disk quota specified for the local cache. Pour plus d’informations, consultez Vue d’ensemble du cache local.For more information, see Local cache overview.

  • Pendant l’initialisation personnalisée, les requêtes HTTP sont effectuées en interne (sans passer par l’URL externe).During custom warm-up, the HTTP requests are made internally (without going through the external URL). Elles peuvent échouer avec certaines règles de réécriture d’URL dans Web.config. Par exemple, les règles de redirection des noms de domaine ou d’application du protocole HTTPS peuvent empêcher les requêtes d’initialisation d’atteindre le code de l’application.They can fail with certain URL rewrite rules in Web.config. For example, rules for redirecting domain names or enforcing HTTPS can prevent warm-up requests from reaching the app code. Pour contourner ce problème, modifiez vos règles de réécriture en ajoutant les deux conditions suivantes :To work around this issue, modify your rewrite rules by adding the following two conditions:

    <conditions>
      <add input="{WARMUP_REQUEST}" pattern="1" negate="true" />
      <add input="{REMOTE_ADDR}" pattern="^100?\." negate="true" />
      ...
    </conditions>
    
  • Sans une initialisation personnalisée, les règles de réécriture d’URL peuvent encore bloquer les requêtes HTTP.Without a custom warm-up, the URL rewrite rules can still block HTTP requests. Pour contourner ce problème, modifiez vos règles de réécriture en ajoutant la condition suivante :To work around this issue, modify your rewrite rules by adding the following condition:

    <conditions>
      <add input="{REMOTE_ADDR}" pattern="^100?\." negate="true" />
      ...
    </conditions>
    
  • Après des échanges d’emplacements, l’application peut rencontrer des redémarrages inattendus.After slot swaps, the app may experience unexpected restarts. En effet, après un échange, la configuration de la liaison du nom d’hôte se désynchronise, ce qui n’entraîne pas de redémarrages.This is because after a swap, the hostname binding configuration goes out of sync, which by itself doesn't cause restarts. En revanche, certains événements de stockage sous-jacents (comme des basculements de volume de stockage) peuvent détecter ces différences et forcer le redémarrage de tous les processus Worker.However, certain underlying storage events (such as storage volume failovers) may detect these discrepancies and force all worker processes to restart. Pour minimiser ces types de redémarrages, définissez le paramètre d’applicationWEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 sur tous les emplacements.To minimize these types of restarts, set the WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 app setting on all slots. En revanche, ce paramètre d’application ne fonctionne pas avec des applications Windows Communication Foundation (WCF).However, this app setting does not work with Windows Communication Foundation (WCF) apps.

Étapes suivantesNext steps

Bloquer l’accès à des emplacements hors productionBlock access to non-production slots