IaC i Azure
För att på något sätt påbörja diskussionen kring IaC (Infrastruktur som kod) måste jag börja ha en kort beskrivning om Azure. På ett visst sätt sätt kan man argumentera för att Azure är som ”ditt klassiska datacenter men i molnet istället” och även om det till viss del är sant så är det inte det. Skillnaderna är flera och består bland annat i en nästan obegränsad kapacitet utan hårdvaruinvesteringar, men vi skulle främst säga att de viktigaste skillnaderna är hur vi kan använda olika produkter utan att ta hand om den underliggande hårdvaran och operativsystemet. Dessa skillnader kräver nya kompetenser och nya sätt att arbeta för en IT-avdelning.
Historiskt har driftsteamet på IT-avdelningen varit ansvarig för att installera hårdvara och konfigurera den, installera operativsystem och i slutändan kanske installera applikationerna på själva operativsystemet. En migrering till molnet förändrar dock de nödvändiga färdigheterna för driftspersonal och kräver nya kompetenser. Det här specifika inlägget kommer fokusera på ett av dessa kompetenser och det är den nya ”hårdvaruinstallationen” och konfigurationen i molnet. T.ex. försvinner vikten av att veta hur många ”U”1 en server behöver i datacentret.
Vad har kod och hårdvara med varandra att göra? Vi skulle nog säga det mesta. Så fort du gör något i Azure-portalen befinner du dig i en applikation (kod) som kör kod som och som sedan i sin tur konfigurerar programvaran ovanpå all underliggande hårdvara. Skapandet av en virtuell maskin till exempel i portalen ber dig om information (parametrar) som applikationen tar som ingångar och sedan skickar tillbaka till Azure ARM-motorn (Azure Resource Management) som skapar en ”serverapplikation”. Att skapa en ny maskin gör att portalen ber dig ännu en gång om parametrarma och så sker samma sak igen. Detta är mycket likartat som att arbeta med ett lokalt datacenter som kör Hyper-V eller VMware virtualisering. Här är dock inte enbart virtuella maskiner virtualiserade, det är allt.
Så likheterna med hur driftspersonal har arbetat tidigare via t.ex. Hyper-V manageeringsverktyg för att den enklaste vägen är att göra likadant. Skillnaden blir att kapaciteten är obegränsad. Med obegränsad kapacitet kommer obegränsad möjlighet att spendera. Vad som händer nu är att driftsteamet har automatiskt fått utgiftsmandat utan tydliga attester. Hela kostnadsfrågan är en fråga för ett annat inlägg.
Hur som helst, som förklarats ovan så klickar du enkelt i en portal för att bara skapa en virtuell maskin (och allt annat i Azure), detta skapar en möjlighet till fel i användarinmatningen, glömmer viktiga värden (taggar) eller tar bara onödig mycket tid. Det är ett litet värde att skapa en maskin som kostar otroligt mycket i timmen. Jag skulle vara rik om jag skulle ha fått en svensk krona varje gång jag har hört – ”du överdriver det tar ju bara någon minut, vi behöver inte automatisera detta, varför ändra något som fungerar?”. Jag skulle säga att även om det fungerar hundra gånger i rad så fungerar det aldrig om mänsklig interaktion är en del av den repetitiva processen. Vi måste utveckla något som är möjligt att upprepa exakt lika. Lång start på detta inlägg, nu kommer vi till infrastruktur som kod.
Kort så är infrastruktur som kod att ytterligare ett lager blir kod, din inmatning i en portal blir i stället kod. Skapandet av en virtuell maskin är att ”skicka i stället för att klicka” din beskrivning till ARM som tittar på vad du vill skapa och sedan skapar resurser för dig. Om du tar bort den nyskapade resursen och skickar tillbaka samma beskrivning får du exakt samma resurs igen, du kan inte glömma något om beskrivningen är i kod. Om du har versionskontrollerat koden och någon ändrar den ser du vad och vem som har ändrat beskrivningen.
Det viktiga här är att både skapande och förändring av infrastruktur på Azure måste beskrivas och versionskontrolleras i kod, då kan den också automatiseras och testas. Mer om detta i kommande inlägg där vi kommer att beskriva ARM-mallar med och utan Bicep men också Terraform och några skillnader. Läs till exempel MS-dokumentation2.
(1) – Om du inte vet vad detta är, oroa dig inte, åtminstone om du inte siktar på att arbeta med design av ett fysiskt datacenter. Läs om det i wiki Rack enhet – Wikipedia (2) Infrastruktur som kod | Microsoft Docs