Azure Resource Manager (ARM) - Azure Stack del 3 - Cygate

Azure Resource Manager (ARM) – Azure Stack del 3

Välkommen tillbaka till vår serie om Azure Stack. Denna gång ska vi titta i på en specifik del i stacken, nämligen Azure Resource Manager (ARM). Molnen är idag enormt viktiga för många företags IT-strategi. Microsoft satsar stort på Azure, Amazon är branschledande, Salesforce har en framgångsrik PaaS plattform och alla andra försöker hitta sin nisch …

Välkommen tillbaka till vår serie om Azure Stack. Denna gång ska vi titta i på en specifik del i stacken, nämligen Azure Resource Manager (ARM). Molnen är idag enormt viktiga för många företags IT-strategi. Microsoft satsar stort på Azure, Amazon är branschledande, Salesforce har en framgångsrik PaaS plattform och alla andra försöker hitta sin nisch och få en av denna växande kaka.

I föregående post har vi gått igenom virtualiseringens historia. Vi avslutade med att moln-api:er introducerades som gjorde att utvecklarna i allt högre grad arbetar mera direkt, och effektivare med sina IT-miljöer utan någon drifttekniker däremellan. Detta genom gränssnitt som Microsofts Azure Resource Manager (ARM).

Vad är Azure Resource Manager (ARM)?

ARM är Azures programmeringsgränssnitt mot alla tjänster och komponenter längre ner i stacken. Internetportaler, utvecklingsverktyg som Visual Studio och program som anropar Azure måste alla prata med ARM för skapa, förändra eller ta bort något i Azure.

Azure Resource Manager (ARM)
Azure har inte ett verktyg för att administrera Azures resurser utan det finns många sätt att nå fram, alltifrån grafiska till programmerbara gränssnitt. ARM i sin tur säger till varje provider vad dom ska skapa. En vanlig virtuell server skapar inte bara resurser i compute utan även i network och storage.

Azure Resource Manager (ARM) är därför en viktig del i Microsofts strategi att möjliggöra nya sätt att arbeta som DevOps, Infrastructure as Code och ha ett konsekvent hanteringslager. Syntaxen som används i ARM är deklarativa. Dvs, du berättar vad du vill åstadkomma, inte hur det ska gå till väga.

ARM hanterar resurser, vad innebär det egentligen?

”Resource” är ett managerbart objekt inom Azure (och i Azure Stack såklart). Det kan vara en virtuell server, ett storagekonto, en webbapp, en databas, ett nätverk och mycket mer.

”Resource provider” är tjänsten som resurserna rullas ut i. Dom tre vanligaste är Compute (där virtuella maskiner läggs upp i), Network och Storage men det finns många fler.

”Resource Groups” innan Azure Resource Manager (ARM) så fanns det lite stöd att egentligen gruppera och ha översikt över sina resurser i en subscription. Så länge ens konto bara innehöll några virtuella servrar eller dylikt så var det ingen som hade ett praktiskt behov att gruppera sina resurser men om en kund hade hundratals virtuella servrar eller många personer som var inblandade i olika projekt så blev det snabbt ett kaos av vem som administrerade vad, hur det skulle övervakas osv.

Microsoft löste det genom att skapa resursgrupper och göra det obligatoriskt för varje resurs vart den ska ligga i.

Här har jag skapat en ny virtuell server och lagt den i en också ny grupp ”Cygate-ResourceGroup”. Inte bara VMen utan även dess nätverkskort, ip-adress, virtuella nätverk, och nätverkets säkerhetsregler har också hamnat som individuella resurser i denna grupp.

Fördelarna med Resource Groups är många. Man kan t.ex. se billing information för bara en grupp av resurser, man kan monitorera information av resurserna inom gruppen, man kan managera alla resurser som ett enda stort set. Det är också möjligt att ha templates som skapar resurser på lite olika sätt beroende på vilken resursgrupp den ska läggas i.

Azure Resource Manager (ARM) template

En annan av fördelarna med ARM är att man kan deklarera molnresurser i en JSON strukturerad template som i dess simplaste form ser ut så här:

Azure Resource Manager (ARM)Json text

”$schema” berättar vart JSON schema filen som beskriver template språket finns.

”contentVersion” berättar versionsnumret på templatefilen. Gör man bara en template så har den troligtvis värdet 1.0.0.0 men versionshistorik blir fort viktigt om templates är under ständig utveckling.

”parameters” berättar vilka skräddarsydda värden som ska användas då template filen exekveras. Exempelvis så vill man ha en generell template och välja vid installation vilket datacenter som den ska köras på eller hur hur många virtualla servrar som ska skapas på en gång.

”variables” är värden som sätts i templatefilen som exempelvis beskriver hur många processorer en VM ska ha eller vad databasen heter. Dessa värden hämtas ofta från parameters.

”resources” beskriver vilka resurser som uppdateras via vilken API version, vilket namn det ska ha, vart det ska läggas upp, vilken grupp det ska skapas i, hur det ska taggas och kommenteras osv. Det kan vara resurser som storage accounts, virtuella maskiner eller nätverk.

”outputs” beskriver vad som ska returneras efter att template filen exekverats. Det kan t.ex. vara enkla siffror som ett verktyg plockar upp och analyserar eller en URI till den skapade resursen.

Vill ni titta närmare på templates design så kan jag varmt rekommendera http://armviz.io/ som är både en template designer och visualizer. Visual Studio har stöd för att på ett lätt sätt skapa och editera templates. Det finns också färdiga templates att använda https://github.com/Azure/azure-quickstart-templates och https://github.com/Azure/AzureStack-QuickStart-Templates

Vilka verktyg kan jag använda för att gå emot ARM?

Först så har vi den vanliga portalen som är ett bra verktyg för ny användare eller om man enkelt och smidigt vill göra små operationer.

Att använda portalen och dess GUI är också ett sätt att anropa ARM. Här har jag påbörjat skapandet av ett lagringskonto.

 

Eller så kan man via portalen göra en custom deployment av en template för att göra samma sak.

Powershell är såklart ett hett verktyg för att via CLI administrera sina resurser. Då man ska göra bulkoperationer eller ha mer kontroll än vad hemsidan kan göra så blir detta snabbt ett bättre alternativ.

 

Då man väl loggat in mot ARM så finns det hundratals cmdlets för att administrera Azure, bland annat denna som visar hur en enkel deployment av en virtuell server kan gå till. Notera att azuredeploy-101-simple-windows-vm är en av de exempel templates microsoft lagt ut på Github.

Det går också bra att att managera Azure Stack resurser eller köra templates ifrån Azure CLI – Ett gratis och kraftfullt commandline-verktyg som man kan använda för att managera Azure men det går också att exekvera kommandon till Azure Stack om man lagt sin stack som en ny ”environment”.

I detta exempel använder jag Azure CLI för att skapa en ny resursgrupp och via en template även skapa ett lagringskonto.

Visual Studio är också ett utmärkt verktyg för att publicera sina templates. Efter att man har skapat sin projekt och loggat in med sin Azure användare så har man tillgång till ett stort bibliotek av templates att editera och publicera.

Här räcker det med att trycka på OK knappen för att skapa en till virtuell server i resursgruppen ”Cygate-ResourceGroup2” baserat på templates och dom parametrar jag fyllt i.

Avslutningsvis

Jag har visat grunderna för hur man administrerar Azure (och i förlängningen Azure Stack) med verktyg som portalen, Azure CLI, Powershell och Visual Studio men det stannar inte där. Det går att direkt kontakta ARM via ett REST-API och skicka in JSON-dokument. Denna metod är effektivare då man ska designa lite större program som administrerar resurser. T.ex. integration mot organisationens existerande lösningar som billing.

Föregående poster i Cygates Azure Stack-serie: