Oefening: een n-laag-architectuur implementeren
Onthoud ons scenario over het migreren van een toepassing van on-premises naar Azure. Hoe ziet deze architectuur eruit? Uw organisatie heeft een niet-kritieke toepassing die een goede kandidaat is om uit te proberen. Het is een toepassing die is geschreven om het veelvoorkomende probleem van het kiezen van de lunch op te lossen.
Denk aan de laatste keer dat u met een groep vrienden of collega's ging lunchen. Was het gemakkelijk om een beslissing te nemen of hebt u veel tijd besteed aan het achterhalen van wat iedereen echt bedoelde toen ze "Ik vind alles leuk?" Laten we een toepassing implementeren op basis van een architectuur met drie lagen die u kan helpen dit probleem op te lossen. Met deze toepassing kunt u lunchsuggesties doen en iedereen kan stemmen op de gewenste keuze.
We hebben een sjabloon voor deze toepassing gemaakt die elke laag als Azure-resources implementeert en vervolgens de daadwerkelijke code implementeert. Dit is een ASP.NET Core MVC-toepassing die wordt geïmplementeerd op Linux-servers, maar deze architectuurstijl kan worden gebruikt ongeacht de onderliggende OS-platformen of SDK.
Dit is een visualisatie op hoog niveau van wat met deze sjabloon wordt geïmplementeerd.
Een n-laag-architectuur implementeren
Gebruik de volgende opdracht om de implementatie te starten. Met de opdracht
az deployment group createstart u een implementatie in onze sandbox-resourcegroep met behulp van het sjabloonbestand en de parameters die we opgeven. We geven ook een willekeurige tekenreeks van 32 tekens op die is gegenereerd met de opdrachthead /dev/urandom | tr -dc A-Za-z0-9 | head -c 32als wachtwoordparameter.De implementatie duurt ongeveer 5 minuten.
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)"
Bekijk de geïmplementeerde resources en test de toepassing
Nadat de implementatie is voltooid, test u de toepassing. Voer de volgende opdracht uit, waarmee de URL voor de app wordt geretourneerd.
az deployment group show \
--output table \
--resource-group <rgn>[sandbox resource group name]</rgn> \
--name azuredeploy \
--query properties.outputs.webSiteUrl
Open een webbrowser en ga naar de site. U ziet een vak waarin u voedselkeuzes kunt toevoegen. Nadat een optie is toegevoegd, wordt er een stem toegevoegd wanneer u deze selecteert.

Drie lagen van "Wat eten we als lunch?"
Deze toepassing is bewust zo eenvoudig mogelijk gehouden. Het is een leuke toepassing, maar nog steeds ziet u een architectuur met drie lagen. Met de sjabloon maakt u twee virtuele machines (VM's), een Azure SQL-database en de resources die nodig zijn voor de ondersteuning van deze resources, zoals schijven, NIC's en virtuele netwerken. U implementeert hiermee ook de code om de toepassing op elke laag uit te voeren. Het virtuele netwerk dat we hebben geïmplementeerd, heeft twee subnetten, één voor de presentatielaag en één voor de toepassingslaag, met een beveiligingsgrens voor elke laag.
We hebben ook tags toegepast op de resources als onderdeel van de implementatie om de laag weer te geven die door de resource wordt ondersteund (tier:presentation, tier:application, tier:data). Tags zijn een methode voor het toepassen van metagegevens op Azure-resources en in dit geval kunnen we hiermee de resources voor elke laag eenvoudig filteren.
Laten we elke laag nader bekijken. Hier volgt een gedetailleerde weergave van de resources die we zojuist hebben geïmplementeerd.
Presentatielaag
Voer de volgende opdracht uit om de resources van de presentatielaag weer te geven.
az resource list --tag tier=presentation --output table
In de drielaagse architectuur waarnaar we hebben verwezen, is dit de presentatielaag. De code die verantwoordelijk is voor de webinterface is geïmplementeerd op deze laag, presenteert de gebruikersinterface en verwerkt rechtstreeks gebruikersaanvragen. Deze laag heeft alleen betrekking op de presentatie van de website aan de gebruiker. Deze heeft geen directe toegang tot de gegevens en omvat geen bedrijfslogica.
We hebben een webserver geïmplementeerd met de naam demo-web-vm waarop de website draait die we willen openen. De server heeft een netwerkinterface demo-web-vm-nic, met een openbaar IP-adres, demo-web-vm-nic-pip, dat er aan is gekoppeld. Dit is het IP-adres dat we eerder hebben opgehaald. Het bevat ook een netwerkbeveiligingsgroep demo-web-nsg, die ondersteuning biedt voor (HTTP-)netwerkverkeer dat alleen via poort 80 binnenkomt van internet. Dit beperkt de toegang tot alleen de website en voorkomt toegang via onnodige poorten die kwaadwillend kunnen worden gebruikt. Deze laag communiceert met de presentatielaag via HTTP om aan de aanvraag voor de gebruiker te voldoen.
Toepassingslaag
Voer de volgende opdracht uit om de resources van de toepassingslaag weer te geven.
az resource list --tag tier=application --output table
De toepassingslaag is geïmplementeerd op een VM met de naam demo-biz-vm die de bedrijfslogica gebruikt. Het bevat ook een netwerkinterface demo-biz-vm-nic, maar deze netwerkinterface heeft alleen een privé IP-adres en biedt geen mechanisme voor directe binnenkomende verbindingen naar de server. Het bevat ook een netwerkbeveiligingsgroep demo-biz-nsg, waarmee alleen toegang vanaf het subnet van de presentatielaag mogelijk is.
Deze laag is het kanaal voor de toepassing om toegang te krijgen tot de gegevens. De code die de API beschikbaar stelt waarmee de presentatielaag wordt aangeroepen, wordt op deze server geïmplementeerd. Hier worden geen gegevens opgeslagen en gebruikers hebben geen directe toegang tot deze server. Deze laag communiceert met de gegevenslaag via T-SQL-opdrachten om toegang te krijgen tot gegevens en om aan gebruikersaanvragen te voldoen.
Er is een eenvoudig voorbeeld van bedrijfslogica die is opgenomen in de toepassing op deze laag. Er is validatie aan serverzijde van de lunchsuggesties, waarbij deze worden vergeleken met een lijst met acceptabele waarden. Als u iets probeert toe te voegen dat niet in deze lijst voorkomt, wordt het niet geaccepteerd en wordt een bericht geretourneerd met de geldige lunchopties.
Gegevenslaag
Voer de volgende opdracht uit om de resources van de gegevenslaag weer te geven.
az resource list --tag tier=data --output table
De gegevenslaag is een Azure SQL Database-server, demo-dbserver-abc123 (we voegen een willekeurige tekenreeks toe aan de servernaam voor algemene uniciteit). Deze server slaat de gegevens voor de toepassing op in een database met de naam demo sqldb. Deze laag van de toepassing is alleen gericht op de opslag van gegevens en biedt een methode voor toegang, in dit geval via T-SQL, de toepassing wordt uitgevoerd op de database. We verwerken geen bedrijfslogica op dit niveau en we voeren geen enkele presentatie van gegevens terug naar de gebruiker.
Deze laag stelt de connectiviteit via poort 1433 beschikbaar via een eindpunt van een VNet-service. VNet-service-eindpunten zijn een mechanisme om PaaS-services (zoals Azure SQL Database) te verbinden met een subnet en de connectiviteit te beperken tot alleen de resources binnen dat subnet.
Dit is ook een voorbeeld van het gebruik van PaaS-services in plaats van IaaS-VM's (Infrastructure as a Service) om een laag van een toepassing uit te voeren. N-laag-toepassingen worden vaak gezien als VM-gebaseerde toepassingen, maar dat is geen vereiste. Door PaaS-services te gebruiken in plaats van VM's, verlaagt u uw kosten, verhoogt u de beveiliging en verlaagt u de beheereisen.
Hulp nodig? Raadpleeg onze gids voor probleemoplossing of geef specifieke feedback door een probleem te melden.