Configurare gli ambienti di gestione temporanea nel Servizio app di Azure

Quando si distribuisce l'app Web, l'app Web in Linux, il back-end per dispositivi mobili o l'app per le API in Servizio app di Azure, è possibile usare uno slot di distribuzione separato anziché lo slot di produzione predefinito quando si esegue nel livello standard,Premium o Isolato servizio app piano. Gli slot di distribuzione sono app live con i rispettivi nomi host. È possibile scambiare il contenuto dell'app e gli elementi delle configurazioni tra i due slot di distribuzione, incluso lo slot di produzione.

La distribuzione dell'applicazione in uno slot non di produzione presenta i seguenti vantaggi:

  • È possibile convalidare le modifiche alle app in uno slot di distribuzione temporaneo prima di scambiarlo con quello di produzione.
  • 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. Ciò consente di evitare i tempi di inattività al momento della distribuzione dell'app. Il reindirizzamento del traffico è lineare e nessuna richiesta viene eliminata in seguito alle operazioni di scambio. È possibile automatizzare questo intero flusso di lavoro configurando lo scambio automatico quando la convalida di pre-scambio non è necessaria.
  • Dopo uno scambio, lo slot con l'app gestita temporaneamente include l'app di produzione precedente. 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.

Ogni piano del servizio app supporta un numero diverso di slot di distribuzione. Per l'uso degli slot di distribuzione non è previsto alcun costo aggiuntivo. Per scoprire il numero di slot supportati dal livello dell'app, vedere limiti servizio app.

Per ridimensionare l'app passando a un livello diverso, assicurarsi che il livello di destinazione supporti il numero di slot già usato dall'app. Se ad esempio l'app ha più di cinque slot, non è possibile passare a un piano inferiore scegliendo Standard, perché il livello Standard supporta solo cinque slot di distribuzione.

Aggiungi uno slot

L'app deve essere in esecuzione nel livello Standard, Premium o Isolato per abilitare più slot di distribuzione.

  1. nella portale di Azure cercare e selezionare Servizi app e selezionare l'app.

    Cercare Servizi app

  2. Nel riquadro sinistro selezionare Slot di distribuzione>Aggiungi slot.

    Aggiungi nuovo slot di distribuzione

    Nota

    Se l'app non è già nel livello Standard, Premium o Isolato , viene visualizzato un messaggio che indica i livelli supportati per abilitare la pubblicazione in fase. A questo punto, è possibile selezionare Aggiorna e passare alla scheda Ridimensiona dell'app prima di continuare.

  3. Nella finestra di dialogo Aggiungi uno slot assegnare allo slot un nome e selezionare se clonare una configurazione dell'app da un altro slot di distribuzione. Selezionare Aggiungi per continuare.

    Origine configurazione

    È possibile clonare una configurazione da qualsiasi slot esistente. 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.

Nota

Attualmente, la rete virtuale e l'endpoint privato non vengono clonati tra gli slot.

  1. Dopo aver aggiunto lo slot, selezionare Chiudi per chiudere la finestra di dialogo. Il nuovo slot è ora visualizzato nella pagina Slot di distribuzione . Per impostazione predefinita, il traffico % è impostato su 0 per il nuovo slot, con tutto il traffico del cliente instradato allo slot di produzione.

  2. Selezionare il nuovo slot di distribuzione per aprire la pagina della risorsa dello slot.

    Titolo dello slot di distribuzione

    Lo slot di staging ha una pagina di gestione come qualsiasi altra app del servizio app. È possibile modificare la configurazione dello slot. Per ricordare che si sta visualizzando lo slot di distribuzione, il nome dell'app viene visualizzato come <nome-app>/<nome-slot> e il tipo di app è servizio app (Slot). È anche possibile visualizzare lo slot come app separata nel gruppo di risorse, con le stesse designazioni.

  3. Selezionare l'URL dell'app nella pagina della risorsa dello slot. Lo slot di distribuzione ha il proprio nome host ed è anche un'app live. Per limitare l'accesso pubblico allo slot di distribuzione, vedere Servizio app di Azure restrizioni IP.

Il nuovo slot di distribuzione non ha contenuto, anche se si clonano le impostazioni da un altro slot. Ad esempio, è possibile pubblicare in questo slot con Git. È possibile distribuire lo slot da un ramo diverso del repository o da un repository diverso.

L'URL dello slot sarà del formato http://sitename-slotname.azurewebsites.net. Per mantenere la lunghezza dell'URL entro i limiti DNS necessari, il nome del sito verrà troncato a 40 caratteri, il nome dello slot verrà troncato a 19 caratteri e verranno aggiunti altri 4 caratteri casuali per assicurarsi che il nome di dominio risultante sia univoco.

Cosa accade durante uno scambio

Passaggi dell'operazione di scambio

Quando si scambiano due slot (in genere da uno slot di staging nello slot di produzione), servizio app esegue le operazioni seguenti per assicurarsi che lo slot di destinazione non verifichi tempi di inattività:

  1. Applicare le impostazioni seguenti dallo slot di destinazione (ad esempio, lo slot di produzione) a tutte le istanze dello slot di origine:

    Uno di questi casi attiva tutte le istanze nello slot di origine per il riavvio. Durante lo scambio con l'anteprima, questo contrassegna la fine della prima fase. L'operazione di scambio viene sospesa ed è possibile verificare che lo slot di origine funzioni correttamente con le impostazioni dello slot di destinazione.

  2. Attendere il completamento del riavvio di ogni istanza nello slot di origine. Se un'istanza non viene riavviata, l'operazione di scambio ripristina tutte le modifiche apportate allo slot di origine e arresta l'operazione.

  3. Se la cache locale è abilitata, attivare l'inizializzazione della cache locale eseguendo una richiesta HTTP alla radice dell'applicazione ("/") in ogni istanza dello slot di origine. Attendere che ogni istanza restituisca una risposta HTTP. L'inizializzazione della cache locale causa un altro riavvio in ogni istanza.

  4. Se lo scambio automatico è abilitato con il riscaldamento personalizzato, attivare l'avvio dell'applicazione eseguendo una richiesta HTTP alla radice dell'applicazione ("/") in ogni istanza dello slot di origine.

    Se applicationInitialization non viene specificato, attivare una richiesta HTTP alla radice dell'applicazione dello slot di origine in ogni istanza.

    Se un'istanza restituisce una risposta HTTP, viene considerata come riscaldata.

  5. Se il riscaldamento di tutte le istanze nello slot di origine viene eseguito correttamente, eseguire lo scambio dei due slot scambiando le rispettive regole di gestione. Dopo questo passaggio, lo slot di destinazione (ad esempio, lo slot di produzione) ha l'app precedentemente riscaldata nello slot di origine.

  6. Ora che lo slot di origine ha l'app di pre-scambio che in precedenza era nello slot di destinazione, eseguire la stessa operazione applicando tutte le impostazioni e riavviando le istanze.

In qualsiasi momento dell'operazione di scambio, tutto il processo di inizializzazione delle app scambiate avviene nello slot di origine. Lo slot di destinazione rimane online mentre lo slot di origine viene preparato e riscaldato, indipendentemente dalla posizione in cui lo scambio ha esito positivo o negativo. Per scambiare uno slot di staging con lo slot di produzione, assicurarsi che lo slot di produzione sia sempre quello di destinazione. In questo modo, l'operazione di scambio non influisce sull'app di produzione.

Nota

Le istanze nelle istanze di produzione precedenti (quelle che verranno scambiate in staging dopo questa operazione di scambio) verranno riciclate rapidamente nell'ultimo passaggio del processo di scambio. Nel caso in cui si disponga di operazioni a esecuzione prolungata nell'applicazione, verranno abbandonate, quando i lavoratori riciclano. Questo vale anche per le app per le funzioni. Pertanto, il codice dell'applicazione deve essere scritto in modo a tolleranza di errore.

Impostazioni incluse nello scambio

Quando si clona la configurazione da un altro slot di distribuzione, la configurazione clonata è modificabile. Alcuni elementi della configurazione seguono il contenuto nello scambio (non specifici dello slot), mentre altri elementi della configurazione restano nello stesso slot dopo uno scambio (specifici dello slot). Negli elenchi seguenti sono riportate le impostazioni che vengono modificate durante lo scambio degli slot.

Impostazioni scambiate:

  • Impostazioni generali, quali la versione del framework, 32/64 bit, i socket Web
  • Impostazioni app (possono essere configurate per adattarsi a uno slot)
  • Stringhe di connessione (possono essere configurate per adattarsi a uno slot)
  • Mapping dei gestori
  • Certificati pubblici
  • Contenuto WebJobs
  • Connessioni ibride *
  • Endpoint servizio *
  • Rete di distribuzione di contenuti di Azure *
  • Mapping dei percorsi

Le funzionalità contrassegnate con un asterisco (*) sono pianificate per l'annullamento dello scambio.

Impostazioni non scambiate:

  • Endpoint di pubblicazione
  • Nomi di dominio personalizzati
  • Certificati non pubblici e impostazioni TLS/SSL
  • Impostazioni di scalabilità
  • Utilità di pianificazione WebJobs
  • Restrizioni IP
  • Always On
  • Impostazioni di diagnostica
  • Condivisione di risorse tra le origini (CORS)
  • Integrazione della rete virtuale
  • Identità gestite
  • Impostazioni che terminano con il suffisso _EXTENSION_VERSION

Nota

Per rendere scambiabili le impostazioni sopra indicate, aggiungere l'impostazione WEBSITE_OVERRIDE_PRESERVE_DEFAULT_STICKY_SLOT_SETTINGS dell'app in ogni slot dell'app e impostarne il valore su 0 o false. Queste impostazioni sono tutte scambiabili oppure non lo sono, non è possibile renderne scambiabili solo alcune. Le identità gestite non vengono mai scambiate e non sono interessate da questa impostazione di override dell'app.

Alcune impostazioni dell'app che si applicano alle impostazioni non crittografate non vengono scambiate. Ad esempio, poiché le impostazioni 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.

Per configurare un'impostazione dell'app o una stringa di connessione per l'accesso a uno slot specifico (non scambiata), passare alla pagina Configurazione per tale slot. Aggiungere o modificare un'impostazione e quindi selezionare l'impostazione dello slot di distribuzione. Selezionando questa casella di controllo si indica al servizio app che l'impostazione non è scambiabile.

Impostazione slot

Scambiare due slot

È possibile scambiare slot di distribuzione nella pagina Slot di distribuzione dell'app e nella pagina Panoramica . Per informazioni tecniche sullo scambio di slot, vedere Cosa accade durante lo scambio.

Importante

Prima di scambiare un'app da uno slot di distribuzione nell'ambiente di produzione, assicurarsi che l'ambiente di produzione sia lo slot di destinazione e che tutte le impostazioni nello slot di origine siano configurate esattamente come si vogliono avere nell'ambiente di produzione.

Per scambiare gli slot di distribuzione:

  1. Passare alla pagina Slot di distribuzione dell'app e selezionare Scambia.

    Pulsante Di scambio

    La finestra di dialogo Scambia mostra le impostazioni negli slot di origine e di destinazione selezionati che verranno modificate.

  2. Selezionare gli slot desiderati in Origine e Destinazione. In genere, la destinazione è lo slot di produzione. Selezionare anche le schede Modifiche dell'origine e Modifiche della destinazione e verificare che le modifiche di configurazione siano quelle previste. Al termine è possibile scambiare gli slot immediatamente selezionando Scambia.

    Scambio completo

    Per vedere come verrà eseguito lo slot di destinazione con le nuove impostazioni prima che lo scambio si verifichi effettivamente, non selezionare Scambia, ma seguire le istruzioni riportate in Scambio con l'anteprima.

  3. Una volta completate queste operazioni, chiudere la finestra di dialogo selezionando Chiudi.

Se si verificano problemi, vedere Risolvere i problemi di scambio.

Scambio con anteprima (swap multifase)

Prima di passare all'ambiente di produzione come slot di destinazione, verificare che l'app venga eseguita con le impostazioni scambiate. Anche lo slot di origine viene riscaldato prima del completamento dello scambio, operazione consigliabile per le applicazioni cruciali.

Quando si esegue uno scambio con anteprima, servizio app esegue la stessa operazione di scambio, ma viene sospesa dopo il primo passaggio. Questo consente di verificare il risultato nello slot di staging prima di completare lo scambio.

Se si annulla lo scambio, il servizio app riapplica gli elementi di configurazione allo slot di origine.

Per eseguire lo scambio con anteprima:

  1. Seguire la procedura descritta negli slot di distribuzione swap , ma selezionare Esegui scambio con anteprima.

    Scambiare con anteprima

    La finestra di dialogo illustra come cambia la configurazione nello slot di origine nella fase 1 e come cambiano gli slot di origine e di destinazione nella fase 2.

  2. Quando si è pronti per avviare lo scambio, selezionare Avvia scambio.

    Al termine della fase 1, viene visualizzata una notifica nella finestra di dialogo. Visualizzare in anteprima lo scambio nello slot di origine passando a 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.

    Per annullare uno scambio in sospeso, selezionare Annulla scambio.

  4. Una volta completate queste operazioni, chiudere la finestra di dialogo selezionando Chiudi.

Se si verificano problemi, vedere Risolvere i problemi di scambio.

Per automatizzare uno scambio a più fasi, vedere Automatizzare con PowerShell.

Eseguire il rollback di uno scambio

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.

Configurare lo scambio automatico

Nota

Lo scambio automatico non è supportato nelle app Web in Linux e App Web per contenitori.

Lo scambio automatico semplifica gli scenari di Azure DevOps nei quali si vuole distribuire l'app in modo continuativo senza avvio a freddo e senza tempi di inattività per i clienti dell'app. Quando lo scambio automatico viene abilitato da uno slot in produzione, ogni volta che si esegue il push delle modifiche del codice a tale slot, servizio app scambia automaticamente l'app in produzione dopo il riscaldamento nello slot di origine.

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.

Per configurare lo scambio automatico:

  1. Passare alla pagina delle risorse dell'app. Selezionare Slot di distribuzione><desiderate Impostazioni generali di configurazione dello slot>> di origine.>

  2. Per Scambio automatico abilitato, selezionare Attiva. Selezionare quindi lo slot di destinazione desiderato per lo slot di distribuzione di scambio automatico e selezionare Salva sulla barra dei comandi.

    Selezioni per la configurazione dello scambio automatico

  3. Eseguire un push del codice allo slot di origine. Lo scambio automatico viene eseguito dopo pochi minuti e l'aggiornamento si riflette nell'URL dello slot di destinazione.

Se si verificano problemi, vedere Risolvere i problemi di scambio.

Specificare il riscaldamento personalizzato

Alcune app potrebbero richiedere azioni preliminari personalizzate prima dello scambio. L'elemento di configurazione applicationInitialization in web.config consente di specificare le azioni di inizializzazione personalizzate. L'operazione di scambio attende il completamento del riscaldamento personalizzato prima di scambiare con lo slot di destinazione. Di seguito è riportato un frammento di web.config di esempio.

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

Per altre informazioni sulla personalizzazione dell'elemento applicationInitialization, vedere Errori di scambio di slot di distribuzione più comuni e come risolverli.

È anche possibile personalizzare il comportamento di riscaldamento con una o entrambe le impostazioni dell'app seguenti:

  • WEBSITE_SWAP_WARMUP_PING_PATH: percorso del ping su HTTP per riscaldamento del sito. Aggiungere questa impostazione dell'app specificando un percorso personalizzato che inizi con una barra come valore. Un esempio è /statuscheck. Il valore predefinito è /.
  • WEBSITE_SWAP_WARMUP_PING_STATUSES: codici di risposta HTTP validi per l'operazione di preparazione. Aggiungere questa impostazione dell'app con un elenco di codici HTTP separati da virgole. Un esempio è 200,202. Se il codice di stato restituito non è presente nell'elenco, l'operazione preliminare di preparazione e l'operazione di scambio vengono arrestate. Per impostazione predefinita, sono validi tutti i codici di risposta.
  • WEBSITE_WARMUP_PATH: percorso relativo nel sito che deve essere eseguito il ping ogni volta che il sito viene riavviato (non solo durante gli scambi di slot). I valori di esempio includono /statuscheck o il percorso radice, /.

Nota

L'elemento <applicationInitialization> di configurazione fa parte di ogni avvio dell'app, mentre le due impostazioni dell'app di riscaldamento si applicano solo agli scambi di slot.

Se si verificano problemi, vedere Risolvere i problemi di scambio.

Monitorare uno scambio

Se l'operazione di scambio richiede molto tempo per completare, è possibile ottenere informazioni sull'operazione di scambio nel log attività.

Nella pagina delle risorse dell'app nel portale selezionare Log attività nel riquadro a sinistra.

Un'operazione di scambio è riportata nella query di log come Swap Web App Slots. È possibile espandere la voce e selezionare una sotto-operazione o un errore per visualizzare i dettagli.

Indirizzare il traffico

Per impostazione predefinita, tutte le richieste client all'URL di produzione dell'app (http://<app_name>.azurewebsites.net) vengono indirizzate allo slot di produzione. È possibile indirizzare una parte del traffico a un altro slot. Questa funzionalità è utile se occorre il feedback degli utenti per un nuovo aggiornamento, ma non si è pronti per rilasciarlo nell'ambiente di produzione.

Indirizzare automaticamente il traffico di produzione

Per indirizzare automaticamente il traffico di produzione:

  1. Accedere alla pagina delle risorse dell'app e selezionare Slot di distribuzione.

  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. Selezionare Salva.

    Impostazione di una percentuale di traffico

Dopo aver salvato l'impostazione, la percentuale specificata di client viene indirizzata in modo casuale allo slot non di produzione.

Una volta indirizzato automaticamente a uno slot specifico, il client viene associato a tale slot per tutta la durata della sessione client. Nel browser client è possibile visualizzare lo slot a cui è associata la sessione esaminando il cookie x-ms-routing-name nelle intestazioni HTTP. Per una richiesta indirizzata allo slot di "staging" il cookie è x-ms-routing-name=staging. Per una richiesta indirizzata allo slot di produzione il cookie è x-ms-routing-name=self.

Nota

È anche possibile usare il az webapp traffic-routing set comando nell'interfaccia della riga di comando di Azure per impostare le percentuali di routing da strumenti CI/CD come GitHub Actions, pipeline DevOps o altri sistemi di automazione.

Indirizzare manualmente il traffico di produzione

Oltre al routing automatico del traffico, il Servizio app può indirizzare le richieste a uno slot specifico. Ciò è utile quando si vuole che gli utenti possano acconsentire esplicitamente o rifiutare esplicitamente l'app beta. Per indirizzare manualmente il traffico di produzione, si usa il parametro di query x-ms-routing-name.

Ad esempio, per consentire agli utenti di rifiutare esplicitamente l'app beta, è possibile inserire nella pagina Web questo collegamento:

<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. Dopo che il browser client avrà eseguito l’accesso al collegamento, verrà reindirizzato allo slot di produzione. Ogni richiesta successiva sarà associata al cookie x-ms-routing-name=self, che aggiungerà la sessione allo slot di produzione.

Affinché gli utenti debbano fornire il consenso esplicito per l'app beta, è necessario impostare lo stesso parametro di query sul nome dello slot non di produzione. Ecco un esempio:

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

Per impostazione predefinita, ai nuovi slot viene assegnata una regola di routing di 0%, visualizzata in grigio. Quando si imposta questo valore in modo esplicito su 0% (visualizzato in testo nero), gli utenti possono accedere manualmente allo slot di staging usando il x-ms-routing-name parametro di query. Gli utenti, tuttavia, non verranno indirizzati automaticamente allo slot perché la percentuale di routing è impostata su 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.

Eliminare uno slot

Cercare e selezionare l'app. Selezionare Slot di distribuzione><per eliminare>>Panoramica. Il tipo di app viene visualizzato come servizio app (slot) per ricordare che si sta visualizzando uno slot di distribuzione. Selezionare Elimina sulla barra dei comandi.

Eliminare uno slot di distribuzione

Automatizzare con PowerShell

Nota

Per interagire con Azure, è consigliabile usare il modulo Azure Az PowerShell. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

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.

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.


Creare un'app Web

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

Creare uno 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 (scambio in più fasi) e applicare la configurazione dello slot di destinazione allo slot di origine

$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

Annullare uno scambio in sospeso (scambio con revisione) e ripristinare la configurazione dello slot di origine

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

Swap degli slot di distribuzione

$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à

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

Eliminare uno slot

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

Per eseguire uno scambio di slot dallo slot di produzione, per eseguire l'operazione Microsoft.Web/sites/slotsswap/Action è necessario disporre almeno delle autorizzazioni identity. Per altre informazioni, vedere Operazioni del provider di risorse

Automatizzare con modelli di Resource Manager

I modelli di Azure Resource Manager sono file JSON dichiarativi usati per automatizzare la distribuzione e la configurazione delle risorse di Azure. Per scambiare gli slot usando modelli di Resource Manager, verranno impostate due proprietà nelle risorse Microsoft.Web/sites/slots e Microsoft.Web/sites:

  • buildVersion: si tratta di una proprietà stringa che rappresenta la versione corrente dell'app distribuita nello slot. Ad esempio: "v1", "1.0.0.1" o "2019-09-20T11:53:25.2887393-07:00".
  • targetBuildVersion: si tratta di una proprietà stringa che specifica ciò che buildVersion lo slot deve avere. Se targetBuildVersion non è uguale all'oggetto corrente buildVersion, verrà attivata l'operazione di scambio individuando lo slot con l'oggetto specificato buildVersion.

Modello di Resource Manager di esempio

Il modello di Resource Manager seguente aggiornerà l'oggetto buildVersion dello slot di staging e imposterà l'oggetto nello targetBuildVersion slot di produzione. In questo modo i due slot verranno scambiati. Il modello presuppone che sia già stata creata un'app Web con uno slot denominato "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 Resource Manager è idempotente, ovvero può essere eseguito ripetutamente e produrre lo stesso stato degli slot. Dopo la prima esecuzione, corrisponderà all'oggetto correntebuildVersion, targetBuildVersion quindi non verrà attivato uno scambio.

Automatizzare con l'interfaccia della riga di comando

Per i comandi dell'interfaccia della riga di comando di Azure relativi agli slot di distribuzione, vedere az webapp deployment slot.

Risolvere i problemi relativi agli scambi

Se si verifica un errore durante uno scambio di slot, viene registrato D:\home\LogFiles\eventlog.xml. Viene anche registrato nel log degli errori specifico dell'applicazione.

Ecco alcuni errori comuni di scambio:

  • Viene eseguita una richiesta HTTP alla radice dell'applicazione. L'operazione di scambio attende 90 secondi per ogni richiesta HTTP e riprova fino a 5 volte. Se si verifica il timeout di tutti i tentativi, l'operazione di scambio viene arrestata.

  • L'inizializzazione della cache locale potrebbe non riuscire quando il contenuto dell'app supera la quota del disco locale specificata per la cache locale. Per altre informazioni, vedere Panoramica della cache locale.

  • Durante il riscaldamento personalizzato, le richieste HTTP vengono effettuate internamente (senza passare attraverso l'URL esterno). 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. Per risolvere questo problema, modificare le regole di riscrittura aggiungendo le due condizioni seguenti:

    <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. Per risolvere questo problema, modificare le regole di riscrittura aggiungendo la condizione seguente:

    <conditions>
      <add input="{REMOTE_ADDR}" pattern="^100?\." negate="true" />
      ...
    </conditions>
    
  • Dopo gli scambi di slot, l'app potrebbe riscontrare riavvii imprevisti. Ciò è dovuto al fatto che dopo uno scambio, la configurazione dell'associazione del nome host non viene sincronizzata, che da sola non causa i riavvii. Tuttavia, alcuni eventi di archiviazione sottostanti (ad esempio i failover del volume di archiviazione) possono rilevare queste discrepanze e forzare il riavvio di tutti i processi di lavoro. Per ridurre al minimo questi tipi di riavvii, impostare l'impostazione dell'appWEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG=1 su tutti gli slot. Tuttavia, questa impostazione dell'app non funziona con le app windows Communication Foundation (WCF).

Passaggi successivi

Bloccare l'accesso a slot non di produzione