2.1 Deploy workloads on Azure Resource Manager (ARM) virtual machines (VMs)
Identify workloads that can and cannot be deployed; run workloads, including Microsoft and Linux; create VMs; connect to a Windows/Linux VM
2.1.1 Define workloads that can and cannot be deployed
Microsoft Azure er en glimrende plattform å etablere mange forskjellige typer løsninger på, men er allikevel ikke passende for alt. Oppgaver som egner seg best til å kjøres på Azure VM-er kan oppsummeres i de tre følgende:
- Serviceløsninger som er avhengig av high availability, slik som f.eks. en kommersiell nettbutikk
- Løsninger som det er vanskelig å forutse veksten av (high scalability)
- Løsninger som opplever utforutsette eller periodiske økninger i belastningen
Workloads som ikke egner seg fullt så godt for Azure er:
- Løsninger som er under jevn belastning og som kan driftes billigere på egen on-premise hardware.
- Regulerte miljøer, som f.eks. Forsvaret, som typisk vil ha svært strenge sikkerhetsregler som ikke muliggjør å ha data i skyen. Imidlertid kan det tenkes at slike miljøer er kandidater for et hydrid miljø, hvor deler av den ikke-sensitive infrastrukturen kan ligge i skyen.
Blant server-software som vanligvis finnes tilgjengelig fra Microsoft, så er det ikke alt som kan tas i bruk på en Azure VM. En oversikt over kompatible server-software fra Microsoft finnes her: Microsoft server software support for Microsoft Azure virtual machines
Når det kommer til selve operativsystemet, så er Windows Server 2003 og senere støttet på Microsoft-siden, men kun Windows Server 2008 R2 og senere kan hentes direkte fra Azure Marketplace inne i portalen.
Blant Roles and Features, er det nyttig å vite at flere av disse ikke er støttede workloads på en Azure VM med Windows Server operativsystem. Dette kommer som en følge av den gitte funksjonaliteten blir ivaretatt på andre måter av funksjonalitet som finnes i Azure selv. Av roller, så er ikke de følgende supportert:
- DHCP Server
- Hyper-V
- Rights Management Services (RMS)
- Windows Deployment Services (WMS)
De nevnte Windows Server Features er heller ikke støttet:
- BitLocker Drive Encryption (på OS-disken)
- Internet Storage Name Server
- Multipath I/O
- Network Load Balancing (NLB)
- Peer Name Resolution Protocol
- RRAS
- DirectAccess
- SNMP Services
- Storage Manager for SANs
- Windows Internet Name Service
- Wireless LAN Service
I forkant av en eventuell migrering fra et on-premise miljø og frem til Azure, så er det laget et nedlastbart verktøy for å inspisere i hvilken grad miljøet er klargjort for migrering. Last ned fra følgende lenke: Azure Virtual Machine Readiness Assessment
2.1.2 Run workloads, including Microsoft and Linux
2.1.3 Create VMs
VM-er kan primært opprettes på tre ulike måter i Azure:
- Azure-portalen
- Azure PowerShell
- Azure Resource Manager template (ARM template)
I tillegg er det også mulig å bruke en av de nevnte metodene nedenfor for å opprette en Windows VM
- Client SDKs (gjennom bruk av C#)
- Rest API-er
2.1.3.1 Opprette Windows VM i portalen
Aller først, logg inn på portalen på http://portal.azure.com. Velg så fra menyen øverst til venstre:
New (plusstegn) --> Compute --> Windows Server 2016 Datacenter --> Create
Etterpå må du fylle ut hoved-detaljene for den nye maskinen i Basics-skjemaet, slik som blant annnet VM-navn, resource group, størrelse, brukernavn og passord. Påloggingsinformasjonen brukes i neste omgang til å kunne logge inn på VM-en. Resource group er en logisk container for Azure-objekter som er tiltenkt å ha samme livssyklus, f.eks. alle objekter knyttet til en applikasjon eller et prosjekt.
Deretter fyller du inn 2) Size og 3) Settings før informasjonen summeres på slutt under 4) Summary. Til slutt gjenstår det bare å trykke OK for å starte deployment av VM-en.
Etter at VM-en er ferdig opprettet så kan den navigeres frem til i portalen ved å velge Virtual Machines i menyen på venstre side.
2.1.3.2 Opprette Windows VM ved hjelp av PowerShell
Før du oppretter en forbindelse til Azure med PowerShell, påse at du har siste versjon av Azure PowerShell-modulen installert på din klient og du har koblet deg mot ditt Azure-abonnement. Se Kapittel 7.1 Komme i gang med Azure PowerShell.
I forkant av at selve maskinen kan opprettes ved hjelp av PowerShell så behøves det å konfigurere en del nødvendige objekter som den virtuelle maskinen trenger. Disse er:
- Resource group
- Nettverksressurser (Virtuelt nettverk, subnett, offentlig IP-adresse)
- Network security group (NSG)
- Network card (NIC)
Felles variabler
Aller først er det greit å definere noen felles variabler som kan brukes i de ulike stegene:
$resourceGroup = "resourceGroup1"
$location = "westeurope"
$vmName = "VM1"
1. Resource Group
Deretter oppretter du en ressursgruppe som VM-en skal plasseres i. Dette kan gjøres med kommandoen:
## Opprette resource group
New-AzureRmResourceGroup -Name $resourceGroup -Location $location
2. Nettverksressurser
Neste steg er å konfigurere nettverket som VM-en skal koble seg mot. Først defineres et subnett som VM-en skal stå i, og deretter opprettes VNet-et som subnettet inngår i. I tillegg må det også settes opp en offentlig IP-adresse for at vi senere skal være i stand til å koble oss til VM-en fra internett.
## Konfigurere nettverksressurser
# Definere en subnett-konfiguration
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name subnet1 -AddressPrefix 192.168.1.0/24
# Opprette et virtuelt nettverk
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName $resourceGroup -Location $location `
-Name vNET1 -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
# Opprette en offentlig IP-adresse og angi et DNS-navn
$ipPublic = New-AzureRmPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
-AllocationMethod Static -IdleTimeoutInMinutes 4 -Name "publicdns$(Get-Random)"
3. Network Security Group
En NSG behøves for å sikre tilgangen til maskinen som i utgangspunktet er direkte eksponert fra internett. Maskinens Network Security Group består av regler for hva slags type nettverkstrafikk maskinen skal ha åpning for. For å senere kunne koble seg på maskinen med RDP på port 3389 så opprettes det regler for dette. Det opprettes også en regel for innkommende trafikk på port 80 som gjør det mulig for serveren å fungere som webserver.
## Konfigurere NSG
# Opprette en NSG-regel for innkommende RDP-trafikk på port 3389
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name NSGregelRDP -Protocol Tcp `
-Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 3389 -Access Allow
# Opprette en NSG-regel for innkommende nettverkstrafikk på port 80
$nsgRuleWeb = New-AzureRmNetworkSecurityRuleConfig -Name NSGregelWWW -Protocol Tcp `
-Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 80 -Access Allow
# Opprette network security group
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
-Name NetworkSecurityGroup1 -SecurityRules $nsgRuleRDP,$nsgRuleWeb
4. NIC
Siste ledd som må konfigureres på forhånd er et NIC som knyttes til subnettet, offentlig IP og NSG som nettopp har blitt opprettet.
## Opprette NIC som kobler VM-en mot et subnett, en network security group og en offentlig IP
$nic = New-AzureRmNetworkInterface -Name nic1 -ResourceGroupName $resourceGroup -Location $location `
-SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $ipPublic.Id -NetworkSecurityGroupId $nsg.Id
Opprette VM
Helt til slutt så gjenstår det bare å definere selve VM-en med info om størrelse, operativsystem og hvilket NIC den skal ha, før den kan opprettes.
# Opprette VM-konfigurasjon
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize Standard_DS2 | `
Set-AzureRmVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred | `
Set-AzureRmVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzureRmVMNetworkInterface -Id $nic.Id
## Opprette VM
New-AzureRmVM -ResourceGroupName $resourceGruop -Location $location -VM $vmConfig | -Wait
2.1.3.3 Opprette Windows VM ved hjelp av ARM templates
Når en VM opprettes gjennom PowerShell slik som i avsnittet ovenfor, må den defineres sekvensielt. Det betyr at rekkefølgen de forskjellige objektene opprettes i, er avgjørende for at maskinen skal kunne opprettes på en riktig måte.
Ved å bruke Azure Resource Manager templates, kjent som ARM templates, så har du fordelen at du fullstendig slipper å ta stilling til rekkefølgen de ulike objektene opprettes i. Dette kan du gjøre siden ARM templates er en deklarativ måte å definere/opprette en VM på. Gjennom å opprette en .JSON-fil så kan alle objekter VM-en avhenger av beskrives og angis med parametre. Når VM-en senere skal opprettes, så vet Azure selv i hvilken rekkefølge de ulike objektene skal opprettes i.
2.1.3.4 Opprette Linux VM i PowerShell
Linux-maskiner kan opprettes på grovt sett samme metoder som Windows-maskiner, men konfigurasjonene rundt blant annet autentiseringsmetode er noe forskjellige i de to tilfellene. I forbindelse med oppsett av Linux-VM-er er det nemlig vanlig å generere et SSH key par som brukes under autentisering mot maskinen. Det er også mulig kun å benytte seg av brukernavn og passord også for Linux-maskiner. Mer om dette i Kapittel 2.1.4 Connect to a Windows/Linux VM.
Mer informasjon om hvordan man oppretter en Linux VM i PowerShell finner du her: Getting started with Azure PowerShell. Søk etter "Create a Linux Virtual Machine".
2.1.4 Connect to a Windows/Linux VM
Før man kobler seg til en VM, så er det fint å være klar over at man på enkelt vis i Azure-portalen kan resette passordet til en bruker på maskinen dersom du har glemt dette. Dette gjøres ved å velge aktuell server, og så gå til sidefanen "Reset password" nederst i menyen.
Koble seg mot Windows VM
For å koble seg opp mot en Windows VM bruker man RDP.
Den aktuelle maskinen nås enkelt ved å først navigere seg inn til riktig maskin i Azure-portalen. Inne i menyen til aktuell maskin, under sidefanen "Overview", velg "Connect" som markert med rødt i skjermdumpen nedenfor. Man vil da laste ned en .rdp-fil som er definert til å gå mot den offentlige IP-adressen til maskinen. Brukernavn og passord som ble angitt under opprettelse av maskinen må så angis for å få logget på.
Koble seg mot Linux VM
RDP er en proprietær Windows-teknologi, så tilkobling til Linux-maskiner foregår på en litt annen måte. For å koble seg på en Linux-VM bruker man vanligvis en SSH klient. Dette er som regel ikke er installert fra før på en Windows-maskin, med mindre du har en Windows 10 maskin med Anniversary update. Det finnes mange mulige pakker å velge mellom som alle inneholder det nødvendige verktøyet for Windows. En av de greieste jeg har jobbet med er "Git for Windows", som kan lastes ned her. Følg standardvalg under installasjonen. Etterpå kan du starte Git Bash fra startmenyen.
Under opprettelse av Linux-VM-en gjorde du et valg for hvilken type autentiseringsmetode du ville bruke for å koble deg mot maskinen, som er enten passord eller SSH public key. Dersom autentiseringsmetoden er passord, er fremgangsmåten videre rett frem. Inne i Git Bash eller annet bash shell, kjør kommandoen nedenfor, etterfulgt av taste inn passord når du blir promptet for det:
ssh [brukernavn]@[offentligIP]
Etterpå er det greit å kjøre en test-kommando for å sjekke at du faktisk er koblet på en ekte Linux-VM.
Dersom du har valgt å bruke SSH public key under autentisering, krever dette at du først setter opp private og public krypto-nøkler. Dette er den anbefalte og mest sikre måten å autentisere seg på, og denne er også standardvalget i Azure. Bruk av bruker brukernavn og passord gjør VM-en sårbar for brute force-angrep siden den er direkte eksponert fra internett.
Git for Windows kan også brukes til å sette opp de nødvendige nøklene for å bruke SSH public key autentisering. Mer om hvordan de nødvendige SSH keys settes opp leser du her: How to Use SSH keys with Windows on Azure