Configurare gli ambienti di gestione temporanea nel Servizio app di AzureSet up staging environments in Azure App Service

Quando si distribuisce l'app Web, l'app Web in Linux, il back-end per dispositivi mobili o l'app per le API nel servizio app Azure, è possibile usare uno slot di distribuzione separato invece dello slot di produzione predefinito quando si esegue in modalità standard, Premiumo isolated Livello del piano di servizio app.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. Gli slot di distribuzione sono app Live con nomi host propri.Deployment slots are live apps with their own host names. È possibile scambiare il contenuto dell'app e gli elementi delle configurazioni tra i due slot di distribuzione, incluso lo slot di produzione.App content and configurations elements can be swapped between two deployment slots, including the production slot.

La distribuzione dell'applicazione in uno slot non di produzione presenta i seguenti vantaggi:Deploying your application to a non-production slot has the following benefits:

  • È possibile convalidare le modifiche alle app in uno slot di distribuzione temporaneo prima di scambiarlo con quello di produzione.You can validate app changes in a staging deployment slot before swapping it with the production slot.
  • La distribuzione preliminare di un'app in uno slot e la successiva implementazione in un ambiente di produzione garantiscono che tutte le istanze dello slot vengano effettivamente eseguite prima di passare alla fase di produzione.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. Ciò consente di evitare i tempi di inattività al momento della distribuzione dell'app.This eliminates downtime when you deploy your app. Il reindirizzamento del traffico è lineare e nessuna richiesta viene eliminata in seguito alle operazioni di scambio.The traffic redirection is seamless, and no requests are dropped because of swap operations. È possibile automatizzare l'intero flusso di lavoro configurando lo scambio automatico quando non è necessaria la convalida pre-swap.You can automate this entire workflow by configuring auto swap when pre-swap validation isn't needed.
  • Dopo uno scambio, lo slot con l'app gestita temporaneamente include l'app di produzione precedente.After a swap, the slot with previously staged app now has the previous production app. Se le modifiche applicate nello slot di produzione non risultano corrette, è possibile ripetere immediatamente lo scambio dei due slot per recuperare l'ultimo sito con i dati corretti.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.

Ogni piano del servizio app supporta un numero diverso di slot di distribuzione.Each App Service plan tier supports a different number of deployment slots. Non sono previsti costi aggiuntivi per l'uso degli slot di distribuzione.There's no additional charge for using deployment slots. Per conoscere il numero di slot supportati dal livello dell'app, vedere limiti del servizio app.To find out the number of slots your app's tier supports, see App Service limits.

Per ridimensionare l'app a un livello diverso, verificare che il livello di destinazione supporti il numero di slot già utilizzati dall'app.To scale your app to a different tier, make sure that the target tier supports the number of slots your app already uses. Ad esempio, se l'app ha più di cinque slot, non è possibile ridurla al livello standard , perché il livello standard supporta solo cinque slot di distribuzione.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.

Aggiungere uno slotAdd a slot

Per poter abilitare più slot di distribuzione, l'app deve essere in esecuzione con il piano Standard, Premium o Isolato.The app must be running in the Standard, Premium, or Isolated tier in order for you to enable multiple deployment slots.

  1. Nel portale di Azure aprire la pagina delle risorse dell'app.In the Azure portal, open your app's resource page.

  2. Nel riquadro sinistro selezionare slot > di distribuzioneAggiungi slot.In the left pane, select Deployment slots > Add Slot.

    Aggiungi nuovo slot di distribuzione

    Nota

    Se l'app non è già nel livello standard, Premiumo isolato , viene visualizzato un messaggio che indica i livelli supportati per l'abilitazione della pubblicazione di gestione temporanea.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. A questo punto, è possibile selezionare Aggiorna e passare alla scheda scalabilità dell'app prima di continuare.At this point, you have the option to select Upgrade and go to the Scale tab of your app before continuing.

  3. Nella finestra di dialogo Aggiungi uno slot assegnare un nome allo slot e selezionare se clonare una configurazione dell'app da un altro slot di distribuzione.In the Add a slot dialog box, give the slot a name, and select whether to clone an app configuration from another deployment slot. Selezionare Aggiungi per continuare.Select Add to continue.

    Origine configurazione

    È possibile clonare una configurazione da qualsiasi slot esistente.You can clone a configuration from any existing slot. Le impostazioni che possono essere clonate includono le impostazioni dell'app, le stringhe di connessione, le versioni di framework del linguaggio, i Web Socket, la versione HTTP e il numero di bit della piattaforma.Settings that can be cloned include app settings, connection strings, language framework versions, web sockets, HTTP version, and platform bitness.

  4. Dopo l'aggiunta dello slot, selezionare Chiudi per chiudere la finestra di dialogo.After the slot is added, select Close to close the dialog box. Il nuovo slot viene ora visualizzato nella pagina slot di distribuzione .The new slot is now shown on the Deployment slots page. Per impostazione predefinita, il traffico% è impostato su 0 per il nuovo slot e il traffico del cliente viene indirizzato allo slot di produzione.By default, Traffic % is set to 0 for the new slot, with all customer traffic routed to the production slot.

  5. Selezionare il nuovo slot di distribuzione per aprire la pagina delle risorse dello slot.Select the new deployment slot to open that slot's resource page.

    Titolo dello slot di distribuzione

    Lo slot di staging ha una pagina di gestione come qualsiasi altra app del servizio app.The staging slot has a management page just like any other App Service app. È possibile modificare la configurazione dello slot.You can change the slot's configuration. Il nome dello slot è indicato all'inizio della pagina per ricordare all'utente che sta visualizzando lo slot di distribuzione.The name of the slot is shown at the top of the page to remind you that you're viewing the deployment slot.

  6. Selezionare l'URL dell'app nella pagina delle risorse dello slot.Select the app URL on the slot's resource page. Lo slot di distribuzione ha un proprio nome host ed è anche un'app Live.The deployment slot has its own host name and is also a live app. Per limitare l'accesso pubblico allo slot di distribuzione, vedere restrizioni IP del servizio app Azure.To limit public access to the deployment slot, see Azure App Service IP restrictions.

Il nuovo slot di distribuzione non ha contenuto, anche se si clonano le impostazioni da un altro slot.The new deployment slot has no content, even if you clone the settings from a different slot. Ad esempio, è possibile pubblicare in questo slot con git.For example, you can publish to this slot with Git. È possibile distribuire lo slot da un ramo diverso del repository o da un repository diverso.You can deploy to the slot from a different repository branch or a different repository.

Cosa accade durante uno scambioWhat happens during a swap

Passaggi dell'operazione di scambioSwap operation steps

Quando si scambiano due slot (in genere da uno slot di gestione temporanea nello slot di produzione), il servizio app esegue le operazioni seguenti per assicurarsi che lo slot di destinazione non riscontri un tempo di inattività: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. Applicare le impostazioni seguenti dallo slot di destinazione (ad esempio, lo slot di produzione) a tutte le istanze dello slot di origine:Apply the following settings from the target slot (for example, the production slot) to all instances of the source slot:

    Uno di questi casi attiva tutte le istanze dello slot di origine per il riavvio.Any of these cases trigger all instances in the source slot to restart. Durante lo scambio con anteprima, viene contrassegnata la fine della prima fase.During swap with preview, this marks the end of the first phase. L'operazione swap è stata sospesa ed è possibile verificare che lo slot di origine funzioni correttamente con le impostazioni dello slot di destinazione.The swap operation is paused, and you can validate that the source slot works correctly with the target slot's settings.

  2. Attendere che ogni istanza nello slot di origine completi il riavvio.Wait for every instance in the source slot to complete its restart. Se un'istanza non viene riavviata, l'operazione di scambio Ripristina tutte le modifiche apportate allo slot di origine e interrompe l'operazione.If any instance fails to restart, the swap operation reverts all changes to the source slot and stops the operation.

  3. Se la cache locale è abilitata, attivare l'inizializzazione della cache locale effettuando una richiesta HTTP alla radice dell'applicazione ("/") in ogni istanza dello slot di origine.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. Attendere fino a quando ogni istanza non restituisce alcuna risposta HTTP.Wait until each instance returns any HTTP response. L'inizializzazione della cache locale causa un altro riavvio in ogni istanza.Local cache initialization causes another restart on each instance.

  4. Se lo scambio automatico è abilitato con Riscaldamento personalizzato, attivare l' avvio dell'applicazione eseguendo una richiesta HTTP alla radice dell'applicazione ("/") in ogni istanza dello slot di origine.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.

    Se applicationInitialization non è specificato, attivare una richiesta HTTP alla radice dell'applicazione dello slot di origine in ogni istanza.If applicationInitialization isn't specified, trigger an HTTP request to the application root of the source slot on each instance.

    Se un'istanza restituisce una risposta HTTP, viene considerata come riscaldata.If an instance returns any HTTP response, it's considered to be warmed up.

  5. Se tutte le istanze dello slot di origine vengono completate correttamente, scambiare i due slot cambiando le regole di routing per i due slot.If all instances on the source slot are warmed up successfully, swap the two slots by switching the routing rules for the two slots. Dopo questo passaggio, lo slot di destinazione (ad esempio, lo slot di produzione) dispone dell'app precedentemente riscaldata nello slot di origine.After this step, the target slot (for example, the production slot) has the app that's previously warmed up in the source slot.

  6. Ora che lo slot di origine ha l'app pre-swap nello slot di destinazione, eseguire la stessa operazione applicando tutte le impostazioni e riavviando le istanze.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.

In qualsiasi momento dell'operazione di scambio, tutte le operazioni di inizializzazione delle app scambiate avvengono nello slot di origine.At any point of the swap operation, all work of initializing the swapped apps happens on the source slot. Lo slot di destinazione rimane online mentre è in corso la preparazione e il riscaldamento dello slot di origine, indipendentemente dalla posizione in cui lo scambio ha esito positivo o negativo.The target slot remains online while the source slot is being prepared and warmed up, regardless of where the swap succeeds or fails. Per scambiare uno slot di staging con lo slot di produzione, assicurarsi che lo slot di produzione sia sempre lo slot di destinazione.To swap a staging slot with the production slot, make sure that the production slot is always the target slot. In questo modo, l'operazione di scambio non influisce sull'app di produzione.This way, the swap operation doesn't affect your production app.

Impostazioni incluse nello scambioWhich settings are swapped?

Quando si clona la configurazione da un altro slot di distribuzione, la configurazione clonata è modificabile.When you clone configuration from another deployment slot, the cloned configuration is editable. Alcuni elementi di configurazione seguono il contenuto in uno scambio (non specifico dello slot), mentre altri elementi di configurazione si mantengono nello stesso slot dopo uno scambio (specifico dello slot).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). Negli elenchi seguenti sono riportate le impostazioni che vengono modificate durante lo scambio degli slot.The following lists show the settings that change when you swap slots.

Impostazioni che vengono scambiate:Settings that are swapped:

  • Impostazioni generali, ad esempio versione del Framework, 32/64 bit, Web socketGeneral settings, such as framework version, 32/64-bit, web sockets
  • Impostazioni app (possono essere configurate per adattarsi a uno slot)App settings (can be configured to stick to a slot)
  • Stringhe di connessione (possono essere configurate per adattarsi a uno slot)Connection strings (can be configured to stick to a slot)
  • Mapping dei gestoriHandler mappings
  • Certificati pubbliciPublic certificates
  • Contenuto WebJobsWebJobs content
  • Connessioni ibride *Hybrid connections *
  • Integrazione della rete virtuale *Virtual network integration *
  • Endpoint di servizio *Service endpoints *
  • Rete per la distribuzione di contenuti di Azure *Azure Content Delivery Network *

Le funzionalità contrassegnate con un asterisco (*) sono pianificate per lo scambio.Features marked with an asterisk (*) are planned to be unswapped.

Impostazioni che non vengono scambiate:Settings that aren't swapped:

  • Endpoint di pubblicazionePublishing endpoints
  • Nomi di dominio personalizzatiCustom domain names
  • Certificati non pubblici e impostazioni TLS/SSLNon-public certificates and TLS/SSL settings
  • Impostazioni di scalabilitàScale settings
  • Utilità di pianificazione WebJobsWebJobs schedulers
  • Restrizioni IPIP restrictions
  • Always OnAlways On
  • Impostazioni del log di diagnosticaDiagnostic log settings
  • Condivisione di risorse tra le origini (CORS)Cross-origin resource sharing (CORS)

Nota

Anche alcune impostazioni di app che si applicano alle impostazioni non scambiate non vengono scambiate.Certain app settings that apply to unswapped settings are also not swapped. Ad esempio, poiché le impostazioni del log di diagnostica non vengono scambiate, le impostazioni dell'app correlate come WEBSITE_HTTPLOGGING_RETENTION_DAYS e DIAGNOSTICS_AZUREBLOBRETENTIONDAYS non vengono scambiate anche se non vengono visualizzate come impostazioni dello slot.For example, since diagnostic log 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.

Per configurare un'impostazione o una stringa di connessione dell'app in modo che si trovino in uno slot specifico (non invertito), passare alla pagina di configurazione per lo slot.To configure an app setting or connection string to stick to a specific slot (not swapped), go to the Configuration page for that slot. Aggiungere o modificare un'impostazione, quindi selezionare impostazione dello slot di distribuzione.Add or edit a setting, and then select deployment slot setting. Selezionando questa casella di controllo si indica al servizio app che l'impostazione non è scambiabile.Selecting this check box tells App Service that the setting is not swappable.

Impostazione slot

Scambiare due slotSwap two slots

È possibile scambiare gli slot di distribuzione nella pagina degli slot di distribuzione dell'app e nella pagina Panoramica .You can swap deployment slots on your app's Deployment slots page and the Overview page. Per informazioni tecniche sullo scambio di slot, vedere cosa accade durante lo scambio.For technical details on the slot swap, see What happens during swap.

Importante

Prima di scambiare un'app da uno slot di distribuzione nell'ambiente di produzione, assicurarsi che la produzione sia lo slot di destinazione e che tutte le impostazioni nello slot di origine siano configurate esattamente come si desiderano nell'ambiente di produzione.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.

Per scambiare gli slot di distribuzione:To swap deployment slots:

  1. Passare alla pagina degli slot di distribuzione dell'app e selezionare swap.Go to your app's Deployment slots page and select Swap.

    Pulsante Scambia

    Nella finestra di dialogo di scambio vengono visualizzate le impostazioni degli slot di origine e di destinazione selezionati che verranno modificate.The Swap dialog box shows settings in the selected source and target slots that will be changed.

  2. Selezionare gli slot desiderati in Origine e Destinazione.Select the desired Source and Target slots. In genere, la destinazione è lo slot di produzione.Usually, the target is the production slot. Selezionare anche le schede modifiche di origine e modifiche di destinazione e verificare che siano previste le modifiche alla configurazione.Also, select the Source Changes and Target Changes tabs and verify that the configuration changes are expected. Al termine, è possibile scambiare immediatamente gli slot selezionando Scambia.When you're finished, you can swap the slots immediately by selecting Swap.

    Scambio completo

    Per vedere come viene eseguito lo slot di destinazione con le nuove impostazioni prima che lo scambio avvenga effettivamente, non selezionare swap, ma seguire le istruzioni in scambiare con l'anteprima.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. Al termine, chiudere la finestra di dialogo selezionando Chiudi.When you're finished, close the dialog box by selecting Close.

In caso di problemi, vedere risolvere i problemi di swap.If you have any problems, see Troubleshoot swaps.

Scambio con anteprima (swap multifase)Swap with preview (multi-phase swap)

Prima di scambiare in produzione come slot di destinazione, verificare che l'app venga eseguita con le impostazioni scambiate.Before you swap into production as the target slot, validate that the app runs with the swapped settings. Lo slot di origine viene anche scaldato prima del completamento dello scambio, che è consigliabile per le applicazioni cruciali.The source slot is also warmed up before the swap completion, which is desirable for mission-critical applications.

Quando si esegue uno scambio con anteprima, il servizio app esegue la stessa operazione di scambio ma viene sospeso dopo il primo passaggio.When you perform a swap with preview, App Service performs the same swap operation but pauses after the first step. È quindi possibile verificare il risultato sullo slot di staging prima di completare lo scambio.You can then verify the result on the staging slot before completing the swap.

Se si annulla lo scambio, il servizio app riapplica gli elementi di configurazione allo slot di origine.If you cancel the swap, App Service reapplies configuration elements to the source slot.

Per scambiare con l'anteprima:To swap with preview:

  1. Seguire i passaggi in scambiare gli slot di distribuzione , ma selezionare Esegui swapping con anteprima.Follow the steps in Swap deployment slots but select Perform swap with preview.

    Scambio con anteprima

    La finestra di dialogo Mostra come la configurazione nello slot di origine cambia nella fase 1 e come lo slot di origine e di destinazione cambiano nella fase 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. Quando si è pronti per avviare lo scambio, selezionare Avvia scambio.When you're ready to start the swap, select Start Swap.

    Al termine della fase 1, viene inviata una notifica nella finestra di dialogo.When phase 1 finishes, you're notified in the dialog box. Visualizzare in anteprima lo swap nello slot di origine passando https://<app_name>-<source-slot-name>.azurewebsites.neta.Preview the swap in the source slot by going to https://<app_name>-<source-slot-name>.azurewebsites.net.

  3. Quando si è pronti per completare lo scambio in sospeso, selezionare completa scambio in azione di scambio e selezionare completa scambio.When you're ready to complete the pending swap, select Complete Swap in Swap action and select Complete Swap.

    Per annullare uno scambio in sospeso, selezionare Annulla scambio .To cancel a pending swap, select Cancel Swap instead.

  4. Al termine, chiudere la finestra di dialogo selezionando Chiudi.When you're finished, close the dialog box by selecting Close.

In caso di problemi, vedere risolvere i problemi di swap.If you have any problems, see Troubleshoot swaps.

Per automatizzare uno scambio in più fasi, vedere Automatizzare con PowerShell.To automate a multi-phase swap, see Automate with PowerShell.

Eseguire il rollback di uno scambioRoll back a swap

Se si verificano errori nello slot di destinazione (ad esempio, lo slot di produzione) dopo uno scambio di slot, ripristinare gli slot allo stato precedente scambiandoli immediatamente.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.

Configura scambio automaticoConfigure auto swap

Nota

Lo scambio automatico non è supportato nelle app Web in Linux.Auto swap isn't supported in web apps on Linux.

Lo scambio automatico semplifica gli scenari DevOps di Azure in cui si vuole distribuire l'app in modo continuo con zero avvio a freddo e senza tempi di inattività per i clienti dell'app.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. Quando lo scambio automatico è abilitato da uno slot in produzione, ogni volta che si esegue il push delle modifiche al codice in tale slot, il servizio app scambia automaticamente l'app in produzione dopo che è stato scaldato nello slot di origine.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.

Nota

Prima di configurare lo scambio automatico per lo slot di produzione, provare a testare lo scambio automatico in uno slot di destinazione non di produzione.Before you configure auto swap for the production slot, consider testing auto swap on a non-production target slot.

Per configurare lo scambio automatico:To configure auto swap:

  1. Passare alla pagina delle risorse dell'app.Go to your app's resource page. Selezionare slot > di distribuzione > > <slot di origine desiderata > configurazioneImpostazioni generali.Select Deployment slots > <desired source slot> > Configuration > General settings.

  2. Per scambio automatico abilitatoselezionare attivato.For Auto swap enabled, select On. Selezionare quindi lo slot di destinazione desiderato per lo slot di distribuzione di scambio automaticoe selezionare Salva sulla barra dei comandi.Then select the desired target slot for Auto swap deployment slot, and select Save on the command bar.

    Selezioni per la configurazione dello scambio automatico

  3. Eseguire un push del codice allo slot di origine.Execute a code push to the source slot. Lo scambio automatico si verifica dopo un breve periodo di tempo e l'aggiornamento viene riflesso nell'URL dello slot di destinazione.Auto swap happens after a short time, and the update is reflected at your target slot's URL.

In caso di problemi, vedere risolvere i problemi di swap.If you have any problems, see Troubleshoot swaps.

Specificare un riscaldamento personalizzatoSpecify custom warm-up

Alcune app potrebbero richiedere azioni di riscaldamento personalizzate prima dello scambio.Some apps might require custom warm-up actions before the swap. L' applicationInitialization elemento di configurazione in Web. config consente di specificare azioni di inizializzazione personalizzate.The applicationInitialization configuration element in web.config lets you specify custom initialization actions. L' operazione di scambio attende il completamento di questo riscaldamento personalizzato prima di eseguire lo scambio con lo slot di destinazione.The swap operation waits for this custom warm-up to finish before swapping with the target slot. Ecco un frammento di esempio di 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>

Per altre informazioni sulla personalizzazione dell' applicationInitialization elemento, vedere la maggior parte degli errori di swap degli slot di distribuzione più comuni e come risolverli.For more information on customizing the applicationInitialization element, see Most common deployment slot swap failures and how to fix them.

È anche possibile personalizzare il comportamento di riscaldamento con una o entrambe le impostazioni dell'appseguenti:You can also customize the warm-up behavior with one or both of the following app settings:

  • WEBSITE_SWAP_WARMUP_PING_PATH: Il percorso di ping per scaldare il sito.WEBSITE_SWAP_WARMUP_PING_PATH: The path to ping to warm up your site. Aggiungere questa impostazione dell'app specificando un percorso personalizzato che inizi con una barra come valore.Add this app setting by specifying a custom path that begins with a slash as the value. Un esempio è /statuscheck.An example is /statuscheck. Il valore predefinito è /.The default value is /.
  • WEBSITE_SWAP_WARMUP_PING_STATUSES: codici di risposta HTTP validi per l'operazione di riscaldamento.WEBSITE_SWAP_WARMUP_PING_STATUSES: Valid HTTP response codes for the warm-up operation. Aggiungere questa impostazione dell'app con un elenco di codici HTTP separati da virgole.Add this app setting with a comma-separated list of HTTP codes. Un esempio è 200,202 .An example is 200,202 . Se il codice di stato restituito non è presente nell'elenco, le operazioni di riscaldamento e scambio vengono interrotte.If the returned status code isn't in the list, the warmup and swap operations are stopped. Per impostazione predefinita, sono validi tutti i codici di risposta.By default, all response codes are valid.

Nota

<applicationInitialization>fa parte di ogni avvio di app, in cui le due impostazioni dell'app si applicano solo agli scambi di slot.<applicationInitialization> is part each app start-up, where as these two app settings apply only to slot swaps.

In caso di problemi, vedere risolvere i problemi di swap.If you have any problems, see Troubleshoot swaps.

Monitorare uno scambioMonitor a swap

Se il completamento dell' operazione di scambio richiede molto tempo, è possibile ottenere informazioni sull'operazione di scambio nel log attività.If the swap operation takes a long time to complete, you can get information on the swap operation in the activity log.

Nel riquadro sinistro della pagina delle risorse dell'app nel portale selezionare log attività.On your app's resource page in the portal, in the left pane, select Activity log.

Un'operazione di scambio è riportata nella query di log come Swap Web App Slots.A swap operation appears in the log query as Swap Web App Slots. È possibile espandere la voce e selezionare una sotto-operazione o un errore per visualizzare i dettagli.You can expand it and select one of the suboperations or errors to see the details.

Indirizzare il trafficoRoute traffic

Per impostazione predefinita, tutte le richieste client all'URL di produzione dell'app (http://<app_name>.azurewebsites.net) vengono indirizzate allo slot di produzione.By default, all client requests to the app's production URL (http://<app_name>.azurewebsites.net) are routed to the production slot. È possibile indirizzare una parte del traffico a un altro slot.You can route a portion of the traffic to another slot. Questa funzionalità è utile se occorre il feedback degli utenti per un nuovo aggiornamento, ma non si è pronti per rilasciarlo nell'ambiente di produzione.This feature is useful if you need user feedback for a new update, but you're not ready to release it to production.

Indirizzare automaticamente il traffico di produzioneRoute production traffic automatically

Per instradare automaticamente il traffico di produzione:To route production traffic automatically:

  1. Passare alla pagina delle risorse dell'app e selezionare slot di distribuzione.Go to your app's resource page and select Deployment slots.

  2. Nella colonna % traffico dello slot di destinazione dell'indirizzamento, specificare una percentuale (compresa tra 0 e 100) per rappresentare la quantità di traffico totale da indirizzare.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. Selezionare Salva.Select Save.

    Impostazione di una percentuale di traffico

Dopo che l'impostazione è stata salvata, la percentuale di client specificata viene indirizzata in modo casuale allo slot non di produzione.After the setting is saved, the specified percentage of clients is randomly routed to the non-production slot.

Dopo che un client viene indirizzato automaticamente a uno slot specifico, viene aggiunto a tale slot per la durata della sessione client.After a client is automatically routed to a specific slot, it's "pinned" to that slot for the life of that client session. Nel browser client è possibile visualizzare lo slot a cui è associata la sessione esaminando il cookie x-ms-routing-name nelle intestazioni 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. Per una richiesta indirizzata allo slot di "staging" il cookie è x-ms-routing-name=staging.A request that's routed to the "staging" slot has the cookie x-ms-routing-name=staging. Per una richiesta indirizzata allo slot di produzione il cookie è x-ms-routing-name=self.A request that's routed to the production slot has the cookie x-ms-routing-name=self.

Indirizzare manualmente il traffico di produzioneRoute production traffic manually

Oltre al routing automatico del traffico, il Servizio app può indirizzare le richieste a uno slot specifico.In addition to automatic traffic routing, App Service can route requests to a specific slot. Questa operazione è utile quando si vuole che gli utenti siano in grado di acconsentire esplicitamente o rifiutare esplicitamente l'app beta.This is useful when you want your users to be able to opt in to or opt out of your beta app. Per indirizzare manualmente il traffico di produzione, si usa il parametro di query x-ms-routing-name.To route production traffic manually, you use the x-ms-routing-name query parameter.

Per consentire agli utenti di rifiutare esplicitamente l'app beta, ad esempio, è possibile inserire questo collegamento nella pagina 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 stringa x-ms-routing-name=self specifica lo slot di produzione.The string x-ms-routing-name=self specifies the production slot. Quando il browser client accede al collegamento, viene reindirizzato allo slot di produzione.After the client browser accesses the link, it's redirected to the production slot. Ogni richiesta successiva ha il x-ms-routing-name=self cookie che blocca la sessione allo slot di produzione.Every subsequent request has the x-ms-routing-name=self cookie that pins the session to the production slot.

Per consentire agli utenti di acconsentire esplicitamente all'app beta, impostare lo stesso parametro di query sul nome dello slot non di produzione.To let users opt in to your beta app, set the same query parameter to the name of the non-production slot. Di seguito è riportato un esempio:Here's an example:

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

Per impostazione predefinita, ai nuovi slot viene assegnata una 0%regola di routing, visualizzata in grigio.By default, new slots are given a routing rule of 0%, shown in grey. Quando si imposta in modo esplicito questo 0% valore su (visualizzato in testo nero), gli utenti possono accedere allo slot di staging manualmente x-ms-routing-name tramite il parametro di query.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. Ma non verranno indirizzati automaticamente allo slot perché la percentuale di routing è impostata su 0.But they won't be routed to the slot automatically because the routing percentage is set to 0. Si tratta di uno scenario avanzato in cui è possibile "nascondere" lo slot di staging dal pubblico, consentendo ai team interni di testare le modifiche nello slot.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.

Eliminare uno slotDelete a slot

Passare alla pagina delle risorse dell'app.Go to your app's resource page. Selezionare > slot di distribuzione > slot per eliminare > Panoramica.<Select Deployment slots > <slot to delete> > Overview. Selezionare Elimina sulla barra dei comandi.Select Delete on the command bar.

Eliminare uno slot di distribuzione

Automatizzare con PowerShellAutomate with PowerShell

Nota

Questo articolo è stato aggiornato per usare il nuovo modulo Az di Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. È comunque possibile usare il modulo AzureRM, che continuerà a ricevere correzioni di bug almeno fino a dicembre 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Per altre informazioni sul nuovo modulo Az e sulla compatibilità di AzureRM, vedere Introduzione del nuovo modulo Az di Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Per istruzioni sull'installazione del modulo Az, vedere Installare Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

Azure PowerShell è un modulo che fornisce i cmdlet per gestire Azure tramite Windows PowerShell, tra cui il supporto per la gestione degli slot di distribuzione in Servizio app di Azure.Azure PowerShell is a module that provides cmdlets to manage Azure through Windows PowerShell, including support for managing deployment slots in Azure App Service.

Per informazioni sull'installazione e la configurazione di Azure PowerShell e sull'autenticazione di Azure PowerShell con l'abbonamento di Microsoft Azure, vedere l'argomento relativo alla procedura di installazione e configurazione di 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.


Crea un'app WebCreate a web app

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

Creare uno slotCreate a slot

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

Avviare uno scambio con un'anteprima (swap multifase) e applicare la configurazione dello slot di destinazione allo slot di origineInitiate 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

Annulla uno scambio in sospeso (scambia con revisione) e ripristina la configurazione dello slot di origineCancel 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

Scambia slot di distribuzioneSwap 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

Monitorare gli eventi di scambio nel log attivitàMonitor swap events in the activity log

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

Eliminare uno slotDelete a slot

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

Automatizzare i modelli ARMAutomate with ARM templates

I modelli ARM sono file JSON dichiarativi usati per automatizzare la distribuzione e la configurazione delle risorse di Azure.ARM Templates are declarative JSON files used to automate the deployment and configuration of Azure resources. Per scambiare gli slot con i modelli ARM, è necessario impostare due proprietà nelle risorse Microsoft. Web/sites/Slots e Microsoft. Web/sites :To swap slots using ARM templates, you will set two properties on the Microsoft.Web/sites/slots and Microsoft.Web/sites resources:

  • buildVersion: proprietà stringa che rappresenta la versione corrente dell'app distribuita nello slot.buildVersion: this is a string property which represents the current version of the app deployed in the slot. Ad esempio: "V1", "1.0.0.1" o "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: questa è una proprietà di stringa che specifica il buildVersion dello slot.targetBuildVersion: this is a string property that specifies what buildVersion the slot should have. Se targetBuildVersion non è uguale al buildVersion corrente, verrà attivata l'operazione di scambio individuando lo slot con l'buildVersion specificato.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.

Modello ARM di esempioExample ARM Template

Il modello ARM seguente aggiornerà il buildVersion dello slot di staging e imposterà il targetBuildVersion sullo slot di produzione.The following ARM template will update the buildVersion of the staging slot and set the targetBuildVersion on the production slot. Questa operazione comporterà lo scambio dei due slot.This will swap the two slots. Il modello presuppone che sia già stato creato un webapp con uno slot denominato "Staging".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')]"
            }
        }        
    ]
}

Questo modello ARM è idempotente, vale a dire che può essere eseguito ripetutamente e produrre lo stesso stato degli slot.This ARM template is idempotent, meaning that it can be executed repeatedly and produce the same state of the slots. Dopo la prima esecuzione, targetBuildVersion corrisponderà al buildVersion corrente, quindi non verrà attivato uno scambio.After the first execution, targetBuildVersion will match the current buildVersion, so a swap will not be triggered.

Automatizzare con l'interfaccia della riga di comandoAutomate with the CLI

Per i comandi dell'interfaccia della riga di comando di Azure relativi agli slot di distribuzione, vedere az webapp deployment slot.For Azure CLI commands for deployment slots, see az webapp deployment slot.

Risoluzione dei problemi di swapTroubleshoot swaps

Se si verifica un errore durante uno scambio di slot, questo viene registrato in D:\home\LogFiles\eventlog.XML.If any error occurs during a slot swap, it's logged in D:\home\LogFiles\eventlog.xml. Viene inoltre registrato nel log degli errori specifico dell'applicazione.It's also logged in the application-specific error log.

Di seguito sono riportati alcuni errori di scambio comuni:Here are some common swap errors:

  • Una richiesta HTTP alla radice dell'applicazione è scaduta.An HTTP request to the application root is timed. L'operazione swap resta in attesa di 90 secondi per ogni richiesta HTTP e ritenta fino a 5 volte.The swap operation waits for 90 seconds for each HTTP request, and retries up to 5 times. Se si è verificato il timeout di tutti i tentativi, l'operazione di scambio viene arrestata.If all retries are timed out, the swap operation is stopped.

  • L'inizializzazione della cache locale potrebbe non riuscire quando il contenuto dell'app supera la quota del disco locale specificata per la cache locale.Local cache initialization might fail when the app content exceeds the local disk quota specified for the local cache. Per altre informazioni, vedere Panoramica della cache locale.For more information, see Local cache overview.

  • Durante il Riscaldamento personalizzato, le richieste HTTP vengono effettuate internamente (senza passare attraverso l'URL esterno).During custom warm-up, the HTTP requests are made internally (without going through the external URL). Possono avere esito negativo con determinate regole di riscrittura URL in Web. config. Ad esempio, le regole per il reindirizzamento dei nomi di dominio o l'applicazione di HTTPS possono impedire che le richieste di riscaldamento raggiungano il codice dell'app.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. Per risolvere questo problema, modificare le regole di riscrittura aggiungendo le due condizioni seguenti: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>
    
  • Senza un riscaldamento personalizzato, le regole di riscrittura URL possono comunque bloccare le richieste HTTP.Without a custom warm-up, the URL rewrite rules can still block HTTP requests. Per risolvere questo problema, modificare le regole di riscrittura aggiungendo la condizione seguente:To work around this issue, modify your rewrite rules by adding the following condition:

    <conditions>
      <add input="{REMOTE_ADDR}" pattern="^100?\." negate="true" />
      ...
    </conditions>
    
  • Alcune regole di restrizione IP potrebbero impedire all'operazione di scambio di inviare richieste HTTP all'app.Some IP restriction rules might prevent the swap operation from sending HTTP requests to your app. Gli intervalli di indirizzi IPv4 che 10. iniziano 100. con e sono interni alla distribuzione.IPv4 address ranges that start with 10. and 100. are internal to your deployment. È necessario consentire la connessione all'app.You should allow them to connect to your app.

  • Dopo lo scambio di slot, l'app può riscontrare riavvii imprevisti.After slot swaps, the app may experience unexpected restarts. Questo è dovuto al fatto che dopo uno scambio la configurazione dell'associazione del nome host non viene sincronizzata, che non provoca il riavvio.This is because after a swap, the hostname binding configuration goes out of sync, which by itself doesn't cause restarts. Tuttavia, alcuni eventi di archiviazione sottostanti, ad esempio i failover del volume di archiviazione, possono rilevare tali discrepanze e forzare il riavvio di tutti i processi di lavoro.However, certain underlying storage events (such as storage volume failovers) may detect these discrepancies and force all worker processes to restart. Per ridurre al minimo questi tipi di riavvii, impostare l' WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 impostazione dell'app su tutti gli slot.To minimize these types of restarts, set the WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 app setting on all slots. Tuttavia, questa impostazione dell'app non funziona con le app Windows Communication Foundation (WCF).However, this app setting does not work with Windows Communication Foundation (WCF) apps.

Passaggi successiviNext steps

Bloccare l'accesso a slot non di produzioneBlock access to non-production slots