Azure Migrate App Containerization: migrazione semplificata delle applicazioni web verso Microsoft Azure

Azure Migrate App Containerization è una utility che permette di trasformare le applicazioni web in container e di migrarle verso Microsoft Azure. L’utility può essere installata su qualsiasi macchina Windows 10/11 o Windows Server 2016/2019/2022 che abbia accesso via rete all’applicazione web.

Il tool verifica le applicazioni che stanno girando sul web server e permette con molta semplicità di trasformarle in container Docker. Dopo la conversione dell’applicazione, il container potrà essere distribuito nel servizio Azure Kubernetes Service (AKS) oppure in una Azure App Service. Il processo di trasformazione in container non richiede l’accesso al codice sorgente dell’applicazione.

Lo strumento Azure Migrate App Containerization supporta attualmente:

  • Applicazioni ASP.NET che usano .NET Framework 3.5 o versione successiva.
  • Server applicazioni che eseguono Windows Server 2008 R2 o versione successiva. I server applicazioni devono eseguire PowerShell 5.1.
  • Applicazioni eseguite in Internet Information Services (IIS) 7.5 o versione successiva.

In questa guida migrerò un’applicazione ASP.NET, che ho recuperato dalla pagina karlrissland/AppWorkshop (github.com). Il template permette di distribuire un’applicazione web ASP.NET che si connette ad un database SQL Server. Verrà creata anche una VM con gli strumenti di sviluppo. Dopo esservi collegati alla pagina fate clic sul pulsante Deploy to Azure per lanciare la creazione delle risorse necessarie.

Figura 1: Pagina GitHub dove recuperare un esempio di applicazione ASP.NET

Configurate il template di Azure inserendo le informazioni mancanti e lanciate la distribuzione delle risorse in Azure.

Io ho lasciato i default settings, che riporto qui per comodità:

  • Admin User Name: sysadmin
    Admin User Password: Password$123
  • db Login Name: workshopServiceAcc
    db User Name: workshopServiceAcc
    db User Password: P2ssw0rd
  • Database Name: partsUnlimitedDB

Figura 2: Completamento delle informazioni richieste per la creazione delle risorse

Attendete la fine della distribuzione. Nell’immagine sotto sono mostrate le risorse Azure create dal template.

Figura 3: Risorse create dal template

Collegatevi all’indirizzo pubblico della VM chiamata vmweb01 e verificate che l’applicazione web ASP.NET sia stata installata correttamente.

Figura 4: Connessione all’indirizzo IP pubblico della VM che fa da web server

Figura 5: Applicazione ASP.NET installata correttamente

Installazione del tool Azure Migrate: App Containerization

Collegatevi alla VM vmdev01 in desktop remoto. Nella VM installerete il tool Azure Migrate: App Containerization

Le credenziali per connettersi alla macchina sono

  • Admin User Name: sysadmin
  • Admin User Password: Password$123

Figura 6: Macchina di management in cui verrà installato il tool Azure Migrate: App Containerization

Dopo aver effettuato il login alla VM, scaricate l’Azure Migrate: App Containerization installer dalla pagina https://go.microsoft.com/fwlink/?linkid=2134571

Al termine del download aprite un prompt di PowerShell con privilegi elevati e lanciate lo script .\AppContainerizationInstaller.ps1

Figura 7: Lancio dello script AppContainerizationInstaller.ps1

Lo script si occuperà di installare tutti i prerequisiti e procederà al download e successiva installazione del tool Azure Migrate: App Containerization. Terminata l’installazione collegatevi alla pagina https://vmdev01:44369/

Figura 8: Installazione del tool Azure Migrate: App Containerization completata

Il tool si presenta come applicazione web ed è molto intuitivo. Seguite le istruzioni passo passo. Attualmente è possibile trasformare in container Docker applicazioni ASP.NET oppure Java. Le destinazioni della conversione in container della vostra applicazione possono essere Azure Kubernetes Service oppure Azure App Service. Io ho deciso di utilizzare una Azure App Service.

Figura 9: Scelta del servizio Azure di destinazione del container

Leggete e accettate i termini di licenza, verificate che la macchina dove avete lanciato il tool sia connessa ad Internet e installate gli ultimi aggiornamenti del tool di App Containerization e di Microsoft Web Deploy.

Figura 10: Installazione dei prerequisiti di Azure Migrate: App Containerization

Figura 11: Installazione dei prerequisiti completata

Figura 12: Collegamento alla sottoscrizione Azure in cui verrà caricato il container della vostra app

Discover delle applicazioni

Il tool Azure Migrate App Containerization si connette remotamente agli application server utilizzando le credenziali che fornirete. Procedete quindi ad inserire IP o FQDN dei server e credenziali per accedere ai web server.

NOTA: Prima di connettervi ai web server è necessario abilitare la gestione remota tramite Powershell sul server su cui gira la vostra applicazione utilizzando il comando Enable-PSremoting e sistemare le regole del firewall in modo tale da permettere la connessione.

Figura 13: Connessione ai web server che ospitano le web app

Terminato il discover delle applicazioni potrete scegliere quali applicazioni volete trasformare in container. Nel campo Target container è necessario inserire il nome del container nella forma <name:tag>. Io ho utilizzato il nome partsunlimitedtest:v1

Figura 14: Applicazioni che saranno trasformate in container e relativo nome

I container creati saranno archiviati in un Azure Container Registry. Se non ne avete uno potete crearlo direttamente dal tool.

Figura 15: Creazione dell’Azure COntainer Registry che ospiterà i container creati dal tool

Fate clic su Review per verificare il Docker File. È possibile aggiungere altre cartelle che la vostra applicazione utilizza e specificare se dovranno essere inserite nel container oppure dovranno essere referenziate esternamente utilizzando un persistent volume da mettere in una Azure File Share. L’applicazione di test che ho utilizzato non ha nessuna dipendenza dal file system.

Figura 16: Docker File

Terminate le verifiche, scegliete le applicazioni da trasformare e fate clic su Build.

Figura 17: Creazione del container

Figura 18: Creazione del container in corso

Cliccando su Build Status è possibile verificare le operazioni che vengono effettuare durante il processo di App Containerization.

Figura 19: Operazioni vengono effettuare durante il processo di App Containerization

Figura 20: Creazione del container terminata

Creazione del Deployment

Terminata la creazione dei container, procedete alla creazione del deployment su Azure e quindi del vostro Azure App Service. Utilizzate un Service Plan esistente oppure createne uno nuovo.

Figura 21: Creazione di un nuovo Azure App Service Plan

Figura 22: Scelta dell’Azure App Service Plan che ospiterà il nostro container

Inserite il nome del vostro Azure App Service, che vi ricordo che dovrà essere univoco. Successivamente potrete aggiungere un dominio personalizzato e configurare un certificato digitale con il vostro nome di dominio.

Figura 23: Scelta del nome della Azure Web App

Figura 24: Deployment configuration completata

Controllate le impostazioni prima di procedere.

Figura 25: Controllo delle impostazioni

Se tutte le impostazioni sono corrette potete procedere con il Deploy, che creerà la web app in Azure e collegherà il container che avete creato nell’Azure Container Registry.

Figura 26: Deploy della Azure Web App

Figura 27: Deployment completato

A questo punto il deployment è completato e la vostra applicazione è stata migrata in un container che è in esecuzione in Azure App Service.

Il container creato è visibile nell’Azure Container Registry, come mostrato nella figura sotto:

Figura 28: Container creato nell’Azure Container Registry

Figura 29: Specifiche della versione del container

Verifica di funzionamento

Per testare il funzionamento dell’App Containerization potete collegavi all’URL dell’Azure App Service.

Figura 30: URL dell’Azure App Service

Figura 31: Azure App Service in avvio

Per far funzionare l’applicazione però dovremo effettuare alcune modifiche. Come si può vedere dal file web.config all’applicazione ASP.NET utilizza un database ospitato nella VM vmsql01

Figura 32: File web.config dell’applicazione ASP.NET

Se tentiamo di collegarci all’applicazione ospitata nella Azure Web App riceveremo l’errore mostrato nella figura sotto, perché Azure App Service non riesce a connettersi al database.

Figura 33: Azure App Service non riesce a connettersi al database

Per ovviare a questo problema ho prima integrato Azure App Service con la VNET dove è ospitata la VM vmsql01.

Figura 34: Integrazione dell’Azure App Service con la VNET in cui si trova il database server utilizzato dall’applicazione ASP.NET

Figura 35: Integrazione dell’Azure App Service con la VNET completata

Successivamente ho configurato l’Azure App Service in modo tale che possa parlare con il database server.

Considerazioni sulla sicurezza: È importante notare che memorizzare le credenziali del database direttamente nel file web.config può non essere la pratica migliore dal punto di vista della sicurezza. In alternativa, potete considerare di utilizzare variabili di ambiente di Azure o strumenti come Azure Key Vault per archiviare in modo sicuro queste informazioni sensibili.

Io ho deciso di utilizzare una variabile d’ambiente Azure e dalle proprietà della Azure Web App ho inserito una nuova Connection String con i seguenti parametri:

  • Name: DefaultConnectionString
  • Value: Server=tcp:vmsql01,1433;Initial Catalog=partsUnlimitedDB;Persist Security Info=False;User ID=workshopServiceAcc;Password=Password$123;MultipleActiveResultSets= False;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30;
  • Type: SQLServer

Figura 36: Creazione della Connection String per connetter l’Azure App Service alla VM con il database utilizzato dall’applicazione

Figura 37: Salvataggio della configurazione dell’Azure App Service

Rimozione delle informazioni di connessione dal file web.config

Assicuratevi che la vostra applicazione sia configurata per leggere la stringa di connessione dall’ambiente di Azure. Questo varia in base al linguaggio di programmazione che state utilizzando. Nel nostro esempio, potremo modificare il file web.config rimuovendo la stringa di connessione e semplicemente farla puntare alla variabile di ambiente Azure. Nel file web.config ho modifcato in questo modo:

dove DefaultConnectionString è il nome della variabile d’ambiente Azure.

 

Test di funzionamento

A questo punto, ricaricando la pagina, l’applicazione ha cominciato a funzionare. L’applicazione ASP.NET è quindi stata trasformata in un container ed è stata migrata in Azure perfettamente.

Figura 38: Applicazione ASP.NET trasformata in container e in esecuzione in un’Azure App Service

Conclusioni

Grazie all’Azure Migrate App Containerization trasformare le applicazioni in container Docker e migrarle in Azure non è mai stato così facile. Decisamente un tool interessante che ci permette di semplificare la modernizzazione delle nostre applicazioni web, che essendo eseguite in Azure, possono beneficiare dell’alta disponibilità e della scalabilità offerte da Azure App Service o da Azure Kubernetes Service.