Sdílet prostřednictvím


Infrastruktura jako kód

Tip

Tento obsah je výňatek z eBooku, Architekting Cloud Native .NET Applications for Azure, který je k dispozici na webu Docs pro .NET nebo jako soubor PDF zdarma ke stažení, který si můžete přečíst offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Systémy nativní pro cloud přijímají mikroslužby, kontejnery a moderní návrh systému, aby bylo dosaženo rychlosti a flexibility. Poskytují automatizované fáze sestavení a vydávání, které zajišťují konzistentní a kvalitní kód. Ale to je jen část příběhu. Jak zřídíte cloudová prostředí, na kterých tyto systémy běží?

Moderní aplikace nativní pro cloud přijímají široce uznávaný postup infrastruktury jako kódu nebo IaC. S IaC automatizujete zřizování platforem. V podstatě používáte postupy softwarového inženýrství, jako je testování a správa verzí, na vaše postupy DevOps. Vaše infrastruktura a nasazení jsou automatizované, konzistentní a opakovatelné. Stejně jako průběžné doručování automatizuje tradiční model ručních nasazení, infrastruktura jako kód (IaC) vyvíjí způsob správy aplikačních prostředí.

Nástroje, jako je Azure Resource Manager (ARM), Terraform a rozhraní příkazového řádku Azure (CLI), umožňují deklarativní skriptování požadované cloudové infrastruktury.

Šablony Azure Resource Manageru

ARM je zkratka pro Azure Resource Manager. Je to modul pro zřizování rozhraní API, který je integrovaný do Azure a zpřístupněný jako služba API. ARM umožňuje nasadit, aktualizovat, odstranit a spravovat prostředky obsažené ve skupině prostředků Azure v jediné koordinované operaci. Modul poskytnete šabloně založenou na formátu JSON, která určuje požadované prostředky a jejich konfiguraci. ARM automaticky orchestruje nasazení ve správném pořadí, které respektuje závislosti. Modul zajišťuje idempotenci. Pokud už požadovaný prostředek se stejnou konfigurací existuje, zřizování se bude ignorovat.

Šablony Azure Resource Manageru jsou jazyk založený na formátu JSON pro definování různých prostředků v Azure. Základní schéma vypadá přibližně jako obrázek 10–14.

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

Obrázek 10–14 – schéma šablony Resource Manageru

V této šabloně můžete definovat kontejner úložiště v oddílu prostředků, například takto:

"resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "apiVersion": "2018-07-01",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],

Obrázek 10–15 – Příklad účtu úložiště definovaného v šabloně Resource Manageru

Šablonu ARM je možné parametrizovat s dynamickými informacemi o prostředí a konfiguraci. Umožňuje ho znovu použít k definování různých prostředí, jako je vývoj, kontrola kvality nebo produkční prostředí. Šablona obvykle vytvoří všechny prostředky v rámci jedné skupiny prostředků Azure. V případě potřeby je možné definovat více skupin prostředků v jedné šabloně Resource Manageru. Všechny prostředky v prostředí můžete odstranit odstraněním samotné skupiny prostředků. Analýzu nákladů je možné spustit také na úrovni skupiny prostředků, což umožňuje rychlé účtování nákladů jednotlivých prostředí.

V projektu Šablony pro rychlý start Azure na GitHubu je k dispozici mnoho příkladů šablon ARM. Můžou vám pomoct urychlit vytváření nové šablony nebo úpravu existující šablony.

Šablony Resource Manageru je možné spouštět mnoha způsoby. Nejjednodušší způsob, jak je jednoduše vložit na web Azure Portal. U experimentálních nasazení může být tato metoda rychlá. Dají se také spustit jako součást procesu sestavení nebo vydání v Azure DevOps. Existují úlohy, které budou ke spouštění šablon využívat připojení k Azure. Změny šablon Resource Manageru se použijí přírůstkově, což znamená, že přidání nového prostředku vyžaduje jenom jeho přidání do šablony. Nástroje odsouhlasí rozdíly mezi aktuálními prostředky a prostředky definovanými v šabloně. Prostředky se pak vytvoří nebo změní tak, aby odpovídaly tomu, co je definováno v šabloně.

Terraform

Aplikace nativní pro cloud se často vytvářejí tak, aby byly cloud agnostic. To znamená, že aplikace není úzce svázána s konkrétním dodavatelem cloudu a je možné ji nasadit do libovolného veřejného cloudu.

Terraform je komerční nástroj pro šablony, který dokáže zřizovat aplikace nativní pro cloud ve všech hlavních cloudových hráčích: Azure, Google Cloud Platform, AWS a AliCloud. Místo použití FORMÁTU JSON jako jazyka definice šablony používá mírně více terse HCL (Hashicorp Configuration Language).

Příklad souboru Terraformu, který se shoduje s předchozí šablonou Resource Manageru (obrázek 10–15), je znázorněn na obrázku 10–16:

provider "azurerm" {
  version = "=1.28.0"
}

resource "azurerm_resource_group" "testrg" {
  name     = "production"
  location = "West US"
}

resource "azurerm_storage_account" "testsa" {
  name                     = "${var.storageAccountName}"
  resource_group_name      = "${azurerm_resource_group.testrg.name}"
  location                 = "${var.region}"
  account_tier             = "${var.tier}"
  account_replication_type = "${var.replicationType}"

}

Obrázek 10–16 – příklad šablony Resource Manageru

Terraform také poskytuje intuitivní chybové zprávy pro šablony problémů. Existuje také šikovná úloha, která se dá použít ve fázi sestavení k včasnému zachycení chyb šablony.

Stejně jako u šablon Resource Manageru jsou k dispozici nástroje příkazového řádku pro nasazení šablon Terraformu. V Azure Pipelines jsou také úlohy vytvořené komunitou, které můžou ověřovat a používat šablony Terraformu.

Někdy Terraform a šablony ARM vypíše smysluplné hodnoty, například připojovací řetězec do nově vytvořené databáze. Tyto informace je možné zachytit v kanálu buildu a použít je v následných úlohách.

Skripty a úlohy Azure CLI

Nakonec můžete využít Azure CLI k deklarativnímu skriptování cloudové infrastruktury. Skripty Azure CLI se dají vytvořit, najít a sdílet za účelem zřízení a konfigurace téměř jakéhokoli prostředku Azure. Rozhraní příkazového řádku je jednoduché používat s jemným křivkou učení. Skripty se spouštějí buď v PowerShellu, nebo v prostředí Bash. Je také jednoduché ladit, zejména v porovnání se šablonami ARM.

Skripty Azure CLI fungují dobře, když potřebujete infrastrukturu vypnout a znovu nasadit. Aktualizace existujícího prostředí může být složitá. Mnoho příkazů rozhraní příkazového řádku není idempotentní. To znamená, že prostředek znovu vytvoří při každém spuštění, i když už prostředek existuje. Před vytvořením je vždy možné přidat kód, který kontroluje existenci jednotlivých prostředků. Váš skript se ale může stát nafouknutým a obtížně spravovat.

Tyto skripty lze také vložit do kanálů Azure DevOps jako Azure CLI tasks. Spuštění kanálu vyvolá skript.

Obrázek 10–17 ukazuje fragment kódu YAML, který obsahuje verzi Azure CLI a podrobnosti předplatného. Všimněte si, že příkazy Azure CLI jsou součástí vloženého skriptu.

- task: AzureCLI@2
  displayName: Azure CLI
  inputs:
    azureSubscription: <Name of the Azure Resource Manager service connection>
    scriptType: ps
    scriptLocation: inlineScript
    inlineScript: |
      az --version
      az account show

Obrázek 10–17 – Skript Azure CLI

V článku Co je infrastruktura jako kód, autor Sam Guckenheimer popisuje, jak "Týmy, které implementují IaC, mohou rychle a ve velkém dodávat stabilní prostředí. Týmy se vyhýbají ruční konfiguraci prostředí a vynucují konzistenci tím, že představují požadovaný stav jejich prostředí prostřednictvím kódu. Nasazení infrastruktury s využitím IaC jsou opakovatelná a zabraňují problémům za běhu způsobeným odchylkou od konfigurace nebo chybějícími závislostmi. Týmy DevOps mohou spolupracovat s jednotnou sadou postupů a nástrojů, které poskytují aplikace a jejich podpůrnou infrastrukturu rychle, spolehlivě a ve velkém měřítku.