MS Certificering: AZ-204, deel 7

Ingediend door Dirk Hornstra op 22-nov-2021 20:56

Omdat mijn laatste AZ-204-blog van 13 oktober was: link (en het is nu 10 november) zou je kunnen denken dat ik de studie opgegeven heb. Dat is gelukkig niet zo :)

Via mijn werk heb ik nu namelijk een account voor Pluralsight. Zo nu en dan kun je daar gratis een account aanmaken en een studie volgen, daar ben ik eerder over getipt door collega's, maar toen was ik druk bezig met andere dingen. En dan is een maand ineens voorbij. Maar goed, dat probleem heb ik nu niet meer. Maar mocht jij geen account hebben, hou die site in de gaten want volgens mij kun je zo nu en dan een gratis account aanmaken en grasduinen door de studies.

Pluralsight biedt ook video's aan met uitleg voor de AZ-204 studie. Yes! Dus de afgelopen weken heb ik elke maandag- en dinsdagavond (en soms een woensdagavond) deze video's bekeken. Uitleg over CDN, Eventhubs, Eventgrids, Azure Service Bus, Azure Functions, Azure Active Directory en nog veel, heel veel meer. En aan het eind dan een stuk uitleg en nog een aantal vragen. En daar had ik soms wel wat goed, maar ook vaak antwoorden fout. Ik heb met opzet geen aantekeningen gemaakt, want ik weet dat ik dan dubbel of driedubbel de tijd kwijt ben aan basiskennis die waarschijnlijk nog niet voldoende is. Ik weet dat het een pittige klus wordt want bij de specs van deze studie staat dat je eigenlijk al "1 of 2 jaar in Azure aan het werk moet zijn". Ik heb wel eens wat in Azure gedaan, maar niet in die mate dat ik een kenner ben.

Mijn plan is:

  1. die video's volgen: check.
  2. Vervolgens zelf in Azure aan de slag gaan met de punten die genoemd staan op de pagina van Microsoft: link. En doe dat op basis van de PDF met de eisen: link.
  3. Bij de video's van Pluralsight werden volgens mij ook soms bestanden/voorbeelden aangeleverd én ik ga wat daar als voorbeelden getoond werden ook in mijn eigen Azure-omgeving uitwerken.

 

Ik ga met punt 2 aan de slag. In de PDF beginnen we met de "compute solutions". Hierbij bestaat het eerste blok uit:

  • provision virtual machines (VMs)
  • configure, validate, and deploy ARM templates
  • configure container images for solutions
  • publish an image to the Azure Container Registry
  • run containers by using Azure Container Instance


Het vierde blok op de pagina van Microsoft verwijst naar Virtual Machines, due daar starten we mee, Deploy a website with Azure virtual machines: link.

We beginnen met de instructies hoe je een Virtual Machine op gaat zetten. Het eerste punt daarbij is het netwerk, dat is in principe een intern netwerk wat niet van buitenaf bereikbaar is. Je gebruikt er interne IP-ranges voor (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 of een eigen range). Let op, 5 adressen zijn niet bruikbaar, want de eerste 4 en de laatste gebruikt Azure! Standaard staat de boel open, maar met Network Security Groups kun je regels instellen, wat werkt als een softwarematige firewall.

Geef de VM een naam. Een Windows VM kan een naam van maximaal 15 karakters krijgen, een Linux VM maximaal 64. Omdat de VM ook met deze naam in je resources terugkomt is het verstandig om een duidelijke naam aan de VM te geven. Die kun je na de tijd niet even makkelijk aanpassen. De site toont hier een aantal opties voor wat je hierin mee kan nemen:

Element Example Notes
Environment dev, prod, QA Identifies the environment for the resource
Location uw (US West), ue (US East) Identifies the region into which the resource is deployed
Instance 01, 02 For resources that have more than one named instance (web servers, etc.)
Product or Service service Identifies the product, application, or service that the resource supports
Role sql, web, messaging Identifies the role of the associated resource


Vervolgens wil je de grootte van je VM bepalen. Maar om nu je geheugen in te stellen, daarna diskgrootte en het waarschijnlijk de vraag is "wat is nu een juist aantal?" biedt Microsoft een aantal scenario's aan waar je op kunt richten:

Option Description
General purpose General-purpose VMs are designed to have a balanced CPU-to-memory ratio. Ideal for testing and development, small to medium databases, and low to medium traffic web servers.
Compute optimized Compute optimized VMs are designed to have a high CPU-to-memory ratio. Suitable for medium traffic web servers, network appliances, batch processes, and application servers.
Memory optimized Memory optimized VMs are designed to have a high memory-to-CPU ratio. Great for relational database servers, medium to large caches, and in-memory analytics.
Storage optimized Storage optimized VMs are designed to have high disk throughput and IO. Ideal for VMs running databases.
GPU GPU VMs are specialized virtual machines targeted for heavy graphics rendering and video editing. These VMs are ideal options for model training and inferencing with deep learning.
High performance computes High performance compute is the fastest and most powerful CPU virtual machines with optional high-throughput network interfaces.


Blijkt later dat je de boel te hoog ingeschat hebt (of te laag), dan kun je de specs nog aanpassen, ook als de VM draait. Wel zorgt dit voor een reboot. En het kan ook een aanpassing van het IP adres veroorzaken. Wees dus erg voorzichtig als dit een productie-VM is!

Betalen: je betaalt voor computing en storage. Dus voor "online beschikbaar zijn" en voor opslag. Ook als je VM uit staat betaal je dus voor opslag. De compute-costs betaal je per minuut. En let op, heb je een Windows VM, controleer of je een bestaande licentie kunt gebruiken (kan je veel geld besparen) via de Azure Hybrid Benefit. Het betalen voor computing kun je met "pay as you go" doen, dus voor (tijdelijke) VM's die een korte workload hebben of onvoorspelbaar qua gebruik. Heb je een VM die continu moet draaien en algauw een jaar online staat, dan zal "reserved virtual machine instances"  een betere optie zijn, je legt het dan voor 1 tot 3 jaar vast en krijgt daar tot 72% korting voor terug. En let op, Azure ondersteunt alleen 64-bits operating systems!

Een VM heeft minimaal 2 schijven, 1 voor het OS en 1 voor tijdelijke opslag. Je kunt hier nog schijven aan toe voegen (voor bijvoorbeeld data-opslag), standaard kun je maximaal 2 per CPU gebruiken. De VHD bestanden worden opgeslagen in Azure Storage als blobs opgeslagen.

Je hebt 2 smaken Azure Storage, Standard (prima voor test) en Premium (waarbij met SSD's gewerkt wordt en je snelle respons hebt). Als je een schijf aanmaakt kun je kiezen voor "Unmanaged disks", wat inhoudt dat je zelf de storage-accounts aan moet maken en beheren. Een enkel account heeft 20.000 I/O operaties per seconde, waardoor je maximaal 40 standaard schijven kunt bedienen. Heb je meer nodig, dan heb je meer Storage Accounts nodig.

Of je kiest voor de "aangeraden optie", de "Managed Disks". Microsoft zorgt dan voor de opslag en koppeling, jij hoeft nergens over na te denken. Een disk kan dan tot 4 TB groot zijn.

Als je na het opzetten van een Virtual Machine nog zaken wilt tunen, extra software installeren en dat moet automatisch gebeuren, daarvoor gebruik je de Azure VM Extensions. Deze kun je uitvoeren met de Azure CLI, PowerShell, Azure Resource Manager templates en de portal.

Met Azure Automation Services kan het leven wat makkelijker gemaakt worden. Met Process Automation kun je een VM monitoren op een specifiek event (error) zodat je actie kunt ondernemen.
Configuration Management is handig voor het bijhouden of software verouderd is en bijgewerkt moet worden. Je kunt dat ook uitschakelen voor bepaalde software. Met Microsoft Endpoint Configuration Manager wat normaal gebruikt wordt voor bedrijfscomputers en mobiele devices kun je dat ook instellen.
Update Management is voor het updaten van een VM. Dat kan via het Azure Automation account, maar ook voor een enkele machine in het portal.

Beschikbaarheid, iets wat ook bij Fundamentals naar voren kwam. Zo kun je minimaal 2 VM's deployen, een Availability Set. Microsoft geeft dan een SLA van 99.95%. Met een fault-domain zorgt je dat een VM in rek 1 komt en de andere in rek 2, zodat bij stroomuitval in rek 1 die in rek 2 door blijft draaien. Fault is voor storing. Een update-domain is het indelen in domeinen voor updates, je VM kan dan bijgewerkt worden terwijl een andere door blijft draaien en de bezoekers dus niets merken.

Azure Site Recovery zorgt ervoor dat data van een primaire locatie gekopieerd wordt naar een secundaire locatie, als de primaire locatie uitvalt, kunnen klanten/bezoekers verder werken op de secundaire locatie.

Azure Backup is backup-as-a-service, wat zowel Azure-data kan backuppen, als ook data die "on premise" staat.

  • Je betaalt alleen voor de opslag die je gebruikt.
  • Het gebruikt de Azure infrastructuur en kan dus naar behoeven opgeschaald worden.
  • De backups kunnen lokaal, maar ook geo-redundant opgeslagen worden.
  • Data encryptie, zowel bij transport als opslag.
  • Applicatie-consistent, dus een punt in tijd bevat alle data die teruggezet moet worden.
  • Langdurige retentie, er zit geen limiet qua tijd aan de opslag.


Er zijn verschillende backup-componenten die je kunt gebruiken:  Azure Backup agent, System Center Data Protection Manager, Azure Backup Server en Azure Backup VM extension.


Door met het volgende blok, Een virtuele Linux-machine maken in Azure: link.

Oh ja, vorige keer vergeten te noteren, maar mijn "ervaringspunten" in Microsoft Learn zijn bij het starten van dit blok:  11950 /23599 ervaringspunten

Resources voor een Linux VM zijn:

  • een virtuele machine die voor het geheugen- en  CPU-resources zorgt
  • een Azure Storage account dat de virtuele harde schijven bevat
  • de virtuele schijven "zelf" waar je gegevens, toepassingen en bovenal: het besturingssysteem opslaat
  • een Virtueel Netwerk (VNet) om de machine te verbinden met andere Azure-diensten of de hardware die in de eigen vestiging staat
  • een netwerk-interface om te communiceren met het netwerk
  • een optioneel openbaar IP-adres om van buitenaf bij de VM te kunnen komen.


De grootte van een VM is ingedeeld in categorieën. Deze loopt van B tot H. B = eenvoudig testen, H = intensieve rekentaken. Azure heeft daar zelf bepaalde adviezen voor:

Waarvoor te gebruiken? Houd rekening met deze grootte
Computing/web voor algemeen gebruik: testen en ontwikkelen, kleine tot middelgrote databases of webservers met weinig tot gematigd verkeer. B, Dsv3, Dv3, DSv2, Dv2
Zware rekenkundige taken: webservers met gemiddeld verkeer, netwerkapparatuur, batchprocessen en toepassingsservers. Fsv2, Fs, F
Intensief geheugengebruik: servers voor relationele databases, middelgrote tot grote caches en in-memory analysefuncties. Esv3, Ev3, M, GS, G, DSv2, Dv2
Gegevensopslag en -verwerking: big data-, SQL- en NoSQL-databases waarvoor snelle doorvoer van schijfgegevens en I/O is vereist. Ls
Intensieve rendering van grafische objecten of videobewerking, evenals modeltraining en inferentie (ND) met deep learning. NV, NC, NCv2, NCv3, ND
HPC (High Performance Computing): als u virtuele machines met de snelste en krachtigste CPU nodig hebt met netwerkinterfaces voor optioneel hoge doorvoer. H

 

Opslag kan op een HDD, maar ook op SSD. Daarbij kun je de keuze maken tussen Standard voor normale workloads met betere prestaties of Premium voor I/O intensieve workloads.

Standaard krijgt een Linux VM 2 schijven, de /dev/sda - hier staat het besturingssysteem op. Maximaal 2.048 GB.
De andere is /dev/sdb - tijdelijke opslag, na reboot dus "leeg". Voor data en andere zaken die je niet op de sda wilt hebben kun je zelf dataschijven toevoegen. Die kunnen maximaal 32.767 GiB groot zijn. Dit zijn Gibibytes, 1074 * een Gigabyte.

Je kunt ook een kopie van een VHD-schijf koppelen, een handige manier om je "on-premise-data" in de cloud te krijgen.

Je kunt kiezen voor beheerde of onbeheerde schijven. Bij onbeheerde schijven moet je zelf zorgen voor je opslagaccounts van VHD-bestanden. Er kunnen per opslagaccount maximaal 40 virtuele schijven ondersteund worden. 1 opslagaccount kan maximaal 20.000 I/O bewerkingen per seconde uitvoeren. Als je moet opschalen heb je meer accounts nodig. Dat is een ingewikkelde zaak, daarom raadt Microsoft beheerde schijven aan.

Naast het makkelijk kunnen beheren/aanmaken van de VHD's is er extra betrouwbaarheid (VM's worden op verschillende onderdelen van Azure Storage geplaatst voor betrouwbare opslag), betere beveiliging (via de Resourcegroup goed in te stellen wie er wel (en niet) van de VHD gebruik mag maken), ondersteuning voor momentopname (hiermee kan een alleen-lezen kopie gemaakt worden, die gebruikt kan worden om problemen op te lossen), ondersteuning voor back-ups (er kan automatisch een backup gemaakt worden van beheerde schijven naar verschillende regio's voor herstel na noodgevallen met Azure Backup zonder dat dit invloed heeft op de werking van de VM).

Connectie maken met een VM wordt vaak met SSH gedaan (Secure SHell). Authenticatie gaat via username/password of met een sleutelpaar. Omdat username/password mogelijk met brute-force te kraken is gaat de voorkeur naar het sleutelpaar.

Windows 10 bevat een SSH Client, informatie hierover kun je hier nalezen: link. Of je gaat in WSL2 aan de slag. In deze opdracht gaan we via de Azure Cloud Shell de acties uitvoeren, via het SSH-2 RSA protocol. Je geeft een lengte op, minimum is 2.048, in het voorbeeld wordt 4.096 gebruikt:

ssh-keygen -m PEM -t rsa -b 4096

Er worden 2 bestanden gemaakt, id_rsa en id_rsa.pub
Je kunt een wachtwoord-zin opgeven die je makkelijk kunt onthouden. Die heb je nodig als je de sleutel gaat gebruiken om toegang te krijgen tot de VM.
Ik zie in de output de SHA256 fingerprint en ook een random-art image van de key.

cat /home/naam/.ssh/id_rsa.pub

Met bovenstaand commando bekijk je de inhoud van het bestand met de public key. Kopieer die inhoud, die gaan we gebruiken bij het aanmaken van een VM.

Als je een VM hebt met de naam myserver en een gebruiker azureuser dan kun je deze SSH key ook installeren op die bestaande VM.
Dat doe je met onderstaand commando:


ssh-copy-id -i /home/naam/.ssh/id_rsa.pub azureuser@myserver

Om later connectie te maken voer je dit uit:


ssh gebruikersnaam@publiek-ip-adres

Je kunt vervolgens een aantal opdrachten uitvoeren, zo doen we een lsblk waarmee je alle schijven ziet. Je ziet wel een sdc, maar die schijf is nog niet "gemount".

Met dmesg | grep SCSI kun je kernel-berichten over SCSI-schijven terug zien (wow, ik heb het gevoel dat ik nu terug ga in het verleden!).


// partitie aanmaken:
(echo n; echo p; echo 1; echo ; echo ; echo w) | sudo fdisk /dev/sdc

// bestandssysteem maken:
sudo mkfs -t ext4 /dev/sdc1

// mounten!
sudo mkdir /data && sudo mount /dev/sdc1 /data

Vervolgens gaan we software installeren:


sudo apt-get update
sudo apt-get install apache2 -y
sudo systemctl status apache2 --no-pager
 

Vervolgens gaan we het netwerk open zetten, zodat we bij de standaard website in onze browser kunnen komen;

We beginnen met een Netwerkbeveiligingsgroep, NSG. Azure pakt eerst de instellingen die met een NSG op het subnet ingesteld zijn, daarna de instellingen die op de netwerkinterface ingesteld zijn. Uitgaand verkeer werkt net andersom, eerst de netwerkinterface, daarna de instellingen van het subnet.

Je begint de regels met de laagste prioriteit. En gaat zo door. De laatste regel is altijd dat als iets niet in een eerdere regel opgepakt is: dan wordt het geweigerd. Prio 65500. Poort 25 voor SMTP wordt (bijna) standaard geblokkeerd en is alleen in overleg met Microsoft Azure aan te passen, maar alleen bij hoge uitzondering.

Hierna een aantal vragen, waaronder of je een image van een VM alleen uit de Azure Marketplace moet halen (nee, je mag ook een eigen VM uploaden), of bij het aanmaken van een VM het netwerk open of dicht staat (naar buiten is "ongevaarlijk" en staat open, inkomend verkeer is alleen in het eigen VNet toegestaan) en de "best practise" om een VM via SSH te beheren.

We gaan door met het derde blok, Een virtuele Windows-machine maken in Azure: link.

Bij de start van dit blok staan mijn ervaringspunten op 13050 /23599 ervaringspunten

Je volgt de instructies om een Windows Server (Windows Server 2019 Minimal) te maken, dat doe je met een Sandbox-account. Ik kom uiteindelijk niet door het aanmaak-proces, omdat de concierge-subscription onvoldoende is, je moet dan bij betalen en dat werkt niet. In ieder geval, ik volg de instructies maar voer ze dus zelf niet uit.

Als je via RDP (remote desktop, voer op je pc mstsc uit) verbinding maakt, kom je in het scherm van Servermanager. Je kunt daar rollen aanmaken, de site spreekt over rol "webserver" aanmaken, vervolgens HTTP aanvragen uitschakelen en FTP server inschakelen (dat is voor het voorbeeldscenario voldoende, er moeten video's op deze VM verwerkt worden die Windows Codecs bevatten en alleen op een Windows PC verwerkt kunnen worden).

Dat ik de boel niet echt kon aanmaken en opstarten is niet erg, want de uitleg is bijna identiek aan het tweede blok waarbij je met een Linux VM werkt.

Tijd voor het laatste blok in het onderdeel virtuele machines, Een webtoepassing maken en uitvoeren met de MEAN-stack op een virtuele Linux-machine in Azure: link.

Ik ken de XAMPP stack (Apache, MariaDB, PHP), maar het gaat hier over MEAN: MongoDB, Express.js, AngularJS en Node.js. We krijgen eerst wat uitleg over de sterke en minder sterke punten. Zo is MongoDB een noSQL database, handig voor "ongestructureerde data". Is voor de frameworks online veel informatie te vinden. Als je wel een goede tabelstructuur wilt hebben is mySQL of een SQL Server variant een betere keuze. En als je niet zo van javascript bent dan geeft de site LAMP als voorbeeld (Linux, Apache, mySQL en PHP).

We gaan aan de slag in de sandbox. Er is al een resourcegroup aangemaakt, maar we krijgen nog even uitleg hoe je via script dat zelf later bij een eigen omgeving uit kunt voeren:


// resource group aanmaken:
az group create \
  --name <resource-group-name> \
  --location <resource-group-location>

// virtual machine aanmaken:
az vm create \
  --resource-group learn-024a23c9-ee8a-45f4-bae5-32d985d7fc64 \
  --name MeanStack \
  --image Canonical:0001-com-ubuntu-server-focal:20_04-lts:latest \
  --admin-username azureuser \
  --generate-ssh-keys

// output die je krijgt:
(Output Example)
{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/MeanStack",
  "location": "eastus",
  "macAddress": "00-0D-3A-1E-1B-3B",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.5",
  "publicIpAddress": "104.211.9.245",
  "resourceGroup": "learn-024a23c9-ee8a-45f4-bae5-32d985d7fc64",
  "zones": ""
}

// open poort 80:
az vm open-port \
  --port 80 \
  --resource-group learn-024a23c9-ee8a-45f4-bae5-32d985d7fc64 \
  --name MeanStack

// maak verbinding via SSH, vraag eerst het IP-adres op
ipaddress=$(az vm show \
  --name MeanStack \
  --resource-group learn-024a23c9-ee8a-45f4-bae5-32d985d7fc64 \
  --show-details \
  --query [publicIps] \
  --output tsv)

ssh azureuser@$ipaddress

Vervolgens gaan we de software van de MEAN stack installeren. Daar komen wat bekende linux-commando's om de hoek kijken:


// systeem bijwerken
sudo apt update && sudo apt upgrade -y
// mongodb installeren
sudo apt-get install -y mongodb
// status controleren
sudo systemctl status mongodb
// versie controleren, yep geen mongodb maar mongod
mongod --version
// node.js downloaden
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
// node.js installeren
sudo apt install nodejs
// controle van de versie
nodejs -v

Express is een web framework wat voor node gebouwd is. Angular is een front-end javascript.

We moeten vervolgens een aantal mappen en bestanden aanmaken (mkdir op de mappen, touch op de bestanden) en met code mapnaam open je Visual Studio Code. Mongoose wordt gebruikt om in je code connectie te maken met de MongoDB database: link. Wat we hier even snel in elkaar zetten heeft Microsoft ook in een eigen repo gezet: link.

Vervolgens kopiëren we de bestanden via SCP over naar de virtuele machine:


scp -r ~/Books azureuser@$ipaddress:~/Books

Vervolgens verbinden we weer met SSH met de VM. Daarna moeten we nog wat pakketten installeren, ons project gebruikt dus Mongoose, Express en Body-parser, staan genoemd in de package.json en moeten dus nog toegevoegd worden:


sudo apt install npm
npm install

// hierna opstarten:
sudo nodejs server.js

Het hoofdstuk wordt afgesloten met een aantal links naar documentatie en websites van software die hier genoemd is:

https://www.mongodb.com/
https://expressjs.com/
https://angularjs.org/
https://nodejs.org/
https://www.npmjs.com/
https://www.npmjs.com/package/mongoose
https://www.npmjs.com/package/body-parser

Azure documentatie om een nodejs-app te maken: link.

Automatisering, via CI/CD een pijplijn maken voor node.js: link.

En met het beantwoorden van de vragen bij deze module zit ik nu op 16150 ervaringspunten. Het loopt lekker op!