Jednodušší Infrastructure as a Code pomocí Azure Bicep

Blog

 
 Vukašin Terzić

Nasazení nových prostředků v Azure je obvykle rychlé a snadné. Můžeme ho provést ručně přes Azure Portál, to však může mít i negativní dopad na konzistenci a zabezpečení zdrojů a často to může negativně ovlivnit i náklady na provoz. Je opravdu snadné udělat chybu při pojmenování nebo při výběru správné velikosti a regionu. Řešením může být vytváření prostředků pomocí nástrojů Infrastructure as a Code.

Infrastructure As a Code

Koncept Infrastructure as a Code, kde definujeme a popisujeme naše prostředí ve formě kódu, přináší celou řadu výhod oproti manuálnímu vytváření prostředí uživatelem. IaaC můžeme použít k popisu infrastruktury a tyto definice pak ukládat do source code control systému. Zajistíme tak, že nasazování je automatizované, konzistentní a snadno opakovatelné. Můžeme také aplikovat softwarové inženýrství a postupy DevOps na náš zdrojový kód, abychom se ujistili, že je verzován, testován a funguje ještě před nasazením do produkce. Mezi další výhody využívání Infrastructure as a Code patří i to, že máme úplnou dokumentaci našeho prostředí ve tvaru kódu a můžeme z toho snadno vyčíst, co v prostředí máme nasazené a jak je vše nakonfigurované. Deployment resourců je pak snadno opakovatelný a můžeme jej použít pro rychlou obnovu celého prostředí v případě katastrofy nebo k vytvoření testovacího prostředí identického s naší produkcí.

V Azure máme celou řadu nástrojů a způsobů, jak využívát Infrastructure as a Code. Můžeme použit například ARM šablony, Terraform nebo dokonce i PowerShell nebo Azure CLI.

ARM templates

Šablony Azure Resource Manageru jsou IaaC řešení, které je přímo integrované do Azure. Můžeme je použít k nasazení, aktualizaci, odstranění a správě prostředků v Azure.

Výhodou použití šablon ARM oproti nástrojům jako jsou Azure CLI a PowerShell je, že ARM šablony jsou deklarativní popis, kde nemusíme přemýšlet o akci, pouze o definování toho, co chceme. Prostředky se pak nasadí ve správném pořadí na základě závislostí. A pokud prostředek se stejnou konfigurací již existuje, nebude změněn ani znovu vytvořen.

I přesto, že ARM šablony funguji skvěle, moje zkušenost při práci s mnoha různými zákazníky mi ukázala, že společnosti je moc nepoužívají. Jedním z důvodů je, že jsou ARM šablony založeny na jazyce JSON. Jsou proto nepřehledné a náročné na psaní.

Zde je základní schéma, které musíme dodržovat při psaní ARM templates:


{
 "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
 "contentVersion": "",
 "apiProfile": "",
 "parameters": { },
 "variables": { },
 "functions": [ ],
 "resources": [ ],
 "outputs": { }
}

V oficiálním Microsoft GitHub repositáři najdete příklad úplné šablony pro vytvoření jednoduchého virtuálního počítače s Windows v Azure.

https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.compute/vm-simple-windows

Vidíte, že syntaxe JSON je snadná a opakovatelná, ale i při menším množství konfigurovaných zdrojů velmi rychle vzniká dlouhý a nepřehledný kód. Je pak obtížné se v něm vyznat a pochopit, která vlastnost nebo parametr má jakou hodnotu.

Azure Bicep

Tady na scénu přichází Azure Bicep. Azure Bicep je domain specific language (DSL) který byl vytvořen stejným týmem lidí, kteří vytváří základy ARM šablon. Jeho cílem není nic jiného než zjednodušit psaní ARM šablon. Project Bicep opouští JSON syntaxi a je mnohem snazší pro čtení a psaní.

Z uživatelského pohledu byla většina syntaxe ARM šablon změněna a kód vypadá úplně jinak. I přesto Bicep není úplně nový jazyk. Funguje jako transparentní abstrakční vrstva nad šablonami ARM. Cílem nebylo nahradit šablony ARM, ale vylepšit jejích použitelnost pro uživatele.

Co to vlastně znamená? Jde o něco nového nebo ne? Vysvětlení je jednoduché. Máme nový jazyk s jednodušší syntaxí, která se snadno čte a zapisuje a ve kterém probíhá validace kódu při kompilaci, která u ARM šablon chyběla. K nasazení našich prostředků však nemůžeme použít přímo Azure Bicep. Místo toho, kód, který napíšeme v Azure Bicep, musíme zkompilovat. Během kompilace se převede do formátu ARM JSON - do našich známých šablon ARM. A k nasazovaní prostředků v Azure pak použijeme tyto šablony stejně, jak jsme to dělali dříve.

Výhodou tohoto přístupu oproti vytvoření zcela nového jazyka je, že Azure Bicep lze okamžitě použít k provedení všeho, co můžeme dělat se šablonami ARM máme možnost pracovat s existujícími šablonami ARM bez nutnosti je všechny přepisovat. Správci Azure prostředí tak mohou začít využívat Azure Bicep okamžitě a bez omezení.

Azure Bicep je od verze 0.3 plně podporován Microsoftem pro nasazení v produkčním prostředí. Pro existující šablony můžeme použít dekompilaci a převést je na Azure Bicep.

Jak využívat Azure Bicep

  • Instalace nástrojů

Skvělou zprávou je, že Bicep syntaxe je podporována v Azure CLI od verze 2.20.0 a v PowerShell modulu Az od verze 5.6.0. To znamená, že pokud již používáme Azure CLI nebo Az PowerShell, tak tyto nástroje již máme. Jediné, co je potřeba doinstalovat, je kompilátor a prostředí ve kterém budeme psát kód.

Pro Azure CLI, jako kompilátor je možné použít použít Bicep CLI. Jedná se o cross-platform sadu nástroju pro převod mezi Bicep a ARM templates.

Instalace je jednoduchá:

az bicep install
az bicep upgrade

Pro Azure PowerShell je možné využít Bicep PowerShell module, který zajistí kompilaci:

 Install-Module -Name Bicep

Pro psaní Azure Bicep syntaxe je možné použít jakýkoliv textový editor, protože verifikaci kódu provádí kompilátor. Psát něco takového v Notepadu by bylo velmi náročné, a proto je lepší použít editory jako je například Microsoft Visual Studio Code. Po instalaci Azure Bicep rozšíření VSCode umožní využít IntelliSense a automatické dokončování rozepsané syntaxe pomoci Tabu.

  • Vytvoření souboru

Když už máme všechny předpoklady a připravené prostředí, můžeme začít kódovat. Jedná se o nový jazyk a který se musíme naučit.

Jako příklad zde uvedu jak může vypadat .bicep soubor pro vytvoření Azure VNetu včetně Tagů:

param KPCSTags object = {
  Company: 'KPCS'
  Year: '2021'
  Author: 'Vukasin Terzic'
}
param location string = resourceGroup().location
param VNetName string
param addressPrefix string = '10.0.0.0/14'
param subnetPrefix string = '10.0.0.0/24'
param subnetName string
resource vn 'Microsoft.Network/virtualNetworks@2020-06-01' = {
 name: VNetName
 location: location
 tags: KPCSTags
 properties: {
  addressSpace: {
   addressPrefixes: [
​    addressPrefix
   ]
  }
  subnets: [
   {
​    name: subnetName
​    properties: {
​     addressPrefix: subnetPrefix
​    }
   }
  ]
 }
}
  • Kompilace souborů

Když už máme náš první .bicep soubor hotový, mužeme jej nasadit. K tomu můžeme použít stejné příkazy, které jsme použili se soubory .json pri využívání ARM šablon. V podporovaných verzích Azure CLI a PowerShell AZ tyto příkazy budou pracovat stejným způsobem se soubory typu .bicep.

\#Azure CLI
az deployment group create -f ./main.bicep -g MyTestRG --parameters VNetName=MyTestVNet subnetName=MyTestSubnet

\#Azure PowerShell
New-AzResourceGroupDeployment -TemplateFile ./main.bicep -ResourceGroupName MyTestRG -VNetName MyTestVNet -subnetName MyTestSubnet
  • Dekompilace souborů

Dekompilace z ARM šablon do Azure Bicep není nutná, ale může být velmi užitečná pokud již máme existující ARM šablony a chceme je jednoduše editovat pomoci Azure Bicep.

Převedení ARM šablony ve formátu JSON na Azure Bicep provedeme tímto příkazem:

bicep decompile ".\azuredeploy.json"

Stejná ARM šablona z předchozího příkladu po převedení do formátu Azure Bicep vypadá mnohem přehlednější a čitelnější pro koncového uživatele.

Azure Bicep pro Azure Governance

Infrastructure as a Code nástroje, jako jsou Azure Bicep, pomáhají s konzistencí prostředků a snadné aplikaci Azure Governance zásad na naše prostředí. Hlavní výhodou oproti manuálnímu nasazování je snadná opakovatelnost a možnost automatizace. Můžeme rychle vytvářet nové nebo měnit nastavení stávajících prostředků.

Sdílej v médiích

Kontakt

Nenašli jste, co hledáte? Pošlete nám zprávu a zůstaneme s vámi ve spojení.

* Vyžadované pole

Osobní data použijeme pouze pro vypracování odpovědi na dotaz. Pravidla zpracování osobních údajů

map us
map eu