Esercizio - Distribuire un'architettura a più livelli

Completato

Tenere presente lo scenario relativo alla migrazione di un'applicazione dall'ambiente locale ad Azure. Che aspetto potrebbe avere questa architettura? L'organizzazione descritta nello scenario ha un'applicazione non critica che è un buon candidato per una prova. È un'applicazione scritta per risolvere il comunissimo problema di cosa scegliere a pranzo.

Si pensi all'ultima volta che si è usciti a pranzo con un gruppo di amici o di colleghi. È stato facile decidere o si è impiegato molto tempo a capire cosa intendessero veramente tutti quando dicevano "mi piace tutto"? È possibile distribuire un'applicazione basata su un'architettura a tre livelli che può aiutare a risolvere il problema. Questa applicazione consente di presentare alcuni suggerimenti per il pranzo e gli utenti possono votare la propria scelta preferita.

È stato creato un modello per l'applicazione che distribuisce ogni livello come risorse di Azure, quindi distribuisce il codice effettivo. Si tratta di un'applicazione MVC ASP.NET Core distribuita in server Linux, ma questo stile di architettura può essere usato su qualsiasi piattaforma di sistema operativo o SDK.

Ecco una rappresentazione generale di ciò che questo modello distribuisce.

Visualization of the N-tier architecture to be deployed in this unit.

Distribuire un'architettura a più livelli

  1. Eseguire il comando riportato di seguito per avviare la distribuzione. Il comando az deployment group create avvia una distribuzione nel gruppo di risorse sandbox usando un file di modello e i parametri che vengono specificati. Viene specificata anche una stringa di 32 caratteri casuali generata dal comando head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 come parametro di password.

    Il completamento della distribuzione richiede circa 5 minuti.

    az deployment group create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --template-uri  https://raw.githubusercontent.com/MicrosoftDocs/mslearn-n-tier-architecture/master/Deployment/azuredeploy.json \
      --parameters password="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
    

Visualizzare le risorse distribuite e testare l'applicazione

Dopo aver completato la distribuzione, testare l'applicazione. Eseguire il comando riportato di seguito, che restituisce l'URL per l'app.

az deployment group show \
  --output table \
  --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name azuredeploy \
  --query properties.outputs.webSiteUrl

Aprire un Web browser e accedere al sito. Viene visualizzata una casella in cui è possibile aggiungere le scelte di cibo. Dopo aver aggiunto un'opzione, selezionandola viene aggiunto un voto.

Screenshot of the sample voting application.

I tre livelli di "What's For Lunch?"

Questa applicazione ha intenzionalmente una complessità minima. È un'applicazione amena, ma adatta a illustrare un'architettura a tre livelli. Il modello crea due macchine virtuali (VM), un database SQL di Azure e le risorse necessarie per supportare queste risorse, ad esempio dischi, schede di rete e reti virtuali. Distribuisce anche il codice per eseguire l'applicazione in ogni livello. La rete virtuale che è stata distribuita dispone di due subnet, una per il livello presentazione e una per il livello applicazione, offrendo così un limite di sicurezza per ogni livello.

Sono stati anche applicati tag alle risorse come parte della distribuzione per rispecchiare il livello supportato dalla risorsa (tier:presentation, tier:application, tier:data). I tag sono un metodo per applicare i metadati alle risorse di Azure e in questo caso ci consentono di filtrare facilmente le risorse per ogni livello.

Osserviamo ogni livello più da vicino. Ecco una rappresentazione dettagliata delle risorse distribuite.

Visualization of the N-tier architecture to be deployed in this unit again.

Livello presentazione

Eseguire il comando riportato di seguito per elencare le risorse del livello presentazione.

az resource list --tag tier=presentation --output table

Nell'architettura a tre livelli a cui si fa riferimento, questo è il livello presentazione. In questo livello è distribuito il codice responsabile dell'interfaccia Web, presenta l'interfaccia utente e gestisce direttamente le richieste degli utenti. Questo livello si concentra solo sulla presentazione del sito Web all'utente. Non ha accesso diretto ai dati e non include la logica di business.

È stato distribuito un server Web chiamato demo-web-vm che esegue il sito Web a cui si sta accedendo. Il server dispone di un'interfaccia di rete demo-web-vm-nic a cui è associato un indirizzo IP pubblico demo-web-vm-nic-pip. Questo indirizzo IP pubblico è l'URL recuperato in precedenza. Include anche un gruppo di sicurezza di rete demo-web-nsg che usa solo la porta 80 (HTTP) per ricevere il traffico in ingresso dal Web. Questo gruppo di sicurezza di rete limita l'accesso solo al sito Web e impedisce l'accesso da porte non necessarie che potrebbero essere usate da utenti malintenzionati. Questo livello comunica con il livello presentazione tramite HTTP per soddisfare la richiesta per l'utente.

Livello applicazione

Eseguire il comando riportato di seguito per elencare le risorse del livello applicazione.

az resource list --tag tier=application --output table

Il livello applicazione è stato distribuito in una VM denominata demo-biz-vm che esegue la logica di business. Include anche un'interfaccia di rete, demo-biz-vm-nic, la quale ha solo un indirizzo IP privato, pertanto non include alcun meccanismo per la connettività in ingresso diretta al server. Include anche un gruppo di sicurezza di rete demo-biz-nsg, che consente l'accesso solo dalla subnet del livello presentazione.

Questo livello è il canale che l'applicazione usa per accedere ai dati. Il codice che espone l'API che viene chiamata dal livello presentazione viene distribuito in questo server. Qui non viene archiviato alcun dato e gli utenti non possono accedere direttamente a questo server. Per accedere ai dati e soddisfare le richieste degli utenti, questo livello comunica con il livello dati tramite i comandi T-SQL.

È un esempio semplice di logica di business incorporata nell'applicazione in questo livello. È disponibile la convalida sul lato server dei suggerimenti per pranzo, dove viene eseguito il confronto con un elenco di valori accettabili. Se si cerca di aggiungere qualcosa che non è presente in questo elenco, non viene accettato. Viene restituito un messaggio con le opzioni per il pranzo valide.

Livello dati

Eseguire il comando riportato di seguito per elencare le risorse del livello dati.

az resource list --tag tier=data --output table

Il livello dati è un server di database SQL di Azure, demo-dbserver-abc123 (aggiungiamo una stringa casuale al nome del server per univocità globale). Questo server archivia i dati per l'applicazione in un database denominato demo-sqldb. Questo livello applicazione si occupa esclusivamente di memorizzare i dati e di fornire un metodo per accedervi. In questo caso, l'accesso avviene tramite T-SQL, che l'applicazione esegue contro il database. In questo livello non viene gestita alcuna logica di business, né si presentano i dati all'utente.

Questo livello espone la connettività sulla porta 1433 attraverso un endpoint del servizio Rete virtuale. Gli endpoint di servizio della rete virtuale sono un meccanismo per connettere servizi i PaaS, ad esempio Database SQL di Azure, a una subnet e limitare la connettività solo alle risorse all'interno di tale subnet.

Questo è anche un esempio dell'uso dei servizi PaaS al posto delle macchine virtuali IaaS (infrastruttura distribuita come servizio) per l'esecuzione di un livello di un'applicazione. Spesso si considera le applicazioni a più livelli come applicazioni basate su VM, ma questo non è un requisito. L'uso di servizi PaaS al posto delle macchine virtuali consente di ridurre i costi, aumentare la sicurezza e ridurre i requisiti di amministrazione.