Infrastruktura jako kód

Infrastruktura jako kód (IaC) je klíčovým postupem DevOps, který v popisném modelu zahrnuje správu infrastruktury, jako jsou sítě, výpočetní služby, databáze, úložiště a topologie připojení. IaC umožňuje týmům rychleji a s větší jistotou vyvíjet a vydávat změny. Mezi výhody IaC patří:

  • Zvýšená důvěra v nasazení
  • Schopnost spravovat více prostředí
  • Lepší porozumění stavu infrastruktury

Další informace o výhodách použití infrastruktury jako kódu najdete v tématu Opakovatelná infrastruktura.

Nástroje

Při implementaci infrastruktury jako kódu můžete použít dva přístupy.

  • Imperativní infrastruktura jako kód zahrnuje psaní skriptů v jazycích, jako je Bash nebo PowerShell. Explicitně uvedete příkazy, které se spouští za účelem vytvoření požadovaného výsledku. Při použití imperativních nasazení je na vás, abyste spravily posloupnost závislostí, řízení chyb a aktualizace prostředků.
  • Deklarativní infrastruktura jako kód zahrnuje napsání definice, která definuje, jak má vaše prostředí vypadat. V této definici určíte požadovaný výsledek, nikoli způsob, jakým ho chcete dosáhnout. Tyto nástroje zjistí, jak výsledek provést kontrolou aktuálního stavu, porovnáním s cílovým stavem a následným použitím rozdílů.

Šablony ARM

Projděte si informace o šablonách Azure Resource Manager (šablony ARM).

Bicep

Bicep je jazyk specifický pro doménu (DSL), který k nasazování prostředků Azure používá deklarativní syntaxi. V souborech Bicep definujete infrastrukturu, kterou chcete nasadit, a její vlastnosti. V porovnání se šablonami ARM se soubory Bicep snadněji čtou a zapisují pro cílové skupiny, které nejsou vývojáři, protože používají stručnou syntaxi.

param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Terraform

Projděte si informace o Terraformu.

Azure CLI

Projděte si informace o Azure CLI.

Moduly infrastruktura jako kód

Jedním z cílů použití kódu k nasazení infrastruktury je zabránit duplikování práce nebo vytváření více šablon pro stejné nebo podobné účely. Moduly infrastruktury by měly být opakovaně použitelné a flexibilní a měly by mít jasný účel.

Moduly jsou nezávislé soubory, které obvykle obsahují sadu prostředků, které se mají nasazovat společně. Moduly umožňují rozdělit složité šablony na menší sady kódu, které se dají lépe spravovat. Můžete zajistit, aby se každý modul zaměřoval na konkrétní úlohu a aby všechny moduly byly opakovaně použitelné pro více nasazení a úloh.

Moduly Bicep

Bicep umožňuje vytvářet a volat moduly. Jakmile se moduly vytvoří, můžou se využívat z jakékoli jiné šablony Bicep. Vysoce kvalitní modul Bicep by měl definovat více souvisejících prostředků. Když například definujete funkci Azure, obvykle nasadíte konkrétní aplikaci, plán hostování pro tuto aplikaci a účet úložiště pro metadata této aplikace. Tyto komponenty jsou definovány samostatně, ale tvoří logické seskupení prostředků, takže byste měli zvážit jejich definování společně jako modul.

Moduly Bicep běžně používají:

  • Parametry pro příjem hodnot z volajícího modulu
  • Výstupní hodnoty pro vrácení výsledků volajícímu modulu
  • Prostředky , které definují jeden nebo více objektů infrastruktury pro modul, který se má spravovat.

Publikování modulů Bicep

Moduly Bicep můžete publikovat a sdílet několika způsoby.

  • Veřejný registr: Veřejný registr modulů je hostovaný v registru kontejnerů Microsoftu (MCR). Jeho zdrojový kód a moduly, které obsahuje, jsou uložené v GitHubu.
  • Privátní registr: Azure Container Registry můžete použít k publikování modulů do privátního registru. Informace o publikování modulů do registru v kanálu CI/CD najdete v tématu Bicep a GitHub Actions, případně Bicep a Azure Pipelines.
  • Specifikace šablony: K publikování modulů Bicep můžete použít specifikace šablon . Specifikace šablon mají být kompletní šablony, ale Bicep umožňuje používat specifikace šablon k nasazení modulů.
  • Systém správy verzí: Moduly můžete načítat přímo z nástrojů pro správu verzí, jako je GitHub nebo Azure DevOps.

Moduly Terraformu

Terraform umožňuje vytvářet a volat moduly. Každá konfigurace Terraformu obsahuje alespoň jeden modul, označovaný jako kořenový modul, který se skládá z prostředků definovaných v .tf souborech v hlavním pracovním adresáři. Každý modul může volat jiné moduly, což umožňuje zahrnout podřízené moduly do hlavního konfiguračního souboru. Moduly je také možné volat vícekrát v rámci stejné konfigurace nebo z různých konfigurací.

Moduly se definují se stejnými koncepty konfiguračního jazyka. Nejčastěji používají:

  • Zadejte proměnné pro příjem hodnot z volajícího modulu.
  • Výstupní hodnoty pro vrácení výsledků volajícímu modulu
  • Prostředky , které definují jeden nebo více objektů infrastruktury pro modul, který se má spravovat.

Publikování modulů Terraformu

Moduly Terraformu můžete publikovat a sdílet několika způsoby:

  • Veřejný registr: HashiCorp má vlastní registr modulů Terraformu, který uživatelům umožňuje generovat moduly Terraformu s možnostmi schůdky. V registru modulů Terraformu je aktuálně publikováno několik modulů Azure .
  • Privátní registr: Moduly Terraformu můžete bez problémů publikovat do privátního úložiště, jako je privátní registr Terraform Cloudu nebo Azure Container Registry.
  • Systém správy verzí: Privátní moduly můžete načíst přímo z nástrojů pro správu verzí, jako je GitHub. Informace o podporovaných zdrojích najdete v tématu Zdroje modulů Terraformu.

Na co dát pozor při navrhování

  • Při nasazování prostředků cílové zóny do Azure zvažte použití IaC. IaC plně realizuje optimalizaci nasazení, snižuje úsilí při konfiguraci a automatizuje nasazení celého prostředí.

  • Určete, jestli byste měli použít imperativní nebo deklarativní přístup IaC.

    • Pokud používáte imperativní přístup, explicitně uveďte příkazy, které se mají provést a které vygenerují požadovaný výsledek.

    • Pokud používáte deklarativní přístup, určete požadovaný výsledek místo toho, jak ho chcete provést.

  • Zvažte rozsahy nasazení. Dobře rozumí úrovním správy a hierarchii Azure. Každé nasazení IaC musí znát obor, ve kterém se nasazují prostředky Azure.

  • Určete, jestli byste měli použít nativní nástroj Azure nebo nástroj IaC, který není nativní v Azure. Některé body ke zvážení:

    • Microsoft plně podporuje nativní nástroje Azure, jako je Azure CLI, šablony ARM a Bicep, což umožňuje rychlejší integraci nových funkcí.

    • Ne nativní nástroje, jako je Terraform, umožňují spravovat infrastrukturu jako kód napříč několika poskytovateli cloudu, jako je AWS nebo GCP. Zahrnutí nových funkcí Azure do jiných než nativních funkcí ale může nějakou dobu trvat. Pokud je vaše organizace multicloudová nebo už terraform používá a dobře ho používá, zvažte použití Terraformu k nasazení cílových zón Azure.

  • Vzhledem k tomu, že moduly umožňují rozdělit složité šablony do menších sad kódu, zvažte použití modulů IaC pro prostředky, které se běžně nasazují společně. Můžete zajistit, aby se každý modul zaměřoval na určitou úlohu a byl opakovaně použitelný pro více nasazení a úloh.

  • Zvažte přijetí strategie publikování modulů IaC výběrem mezi veřejnými registry, privátními registry nebo systémem správy verzí, jako je úložiště Git.

  • Zvažte použití kanálu CI/CD pro nasazení IaC. Kanál vynucuje opakovaně použitelný proces, který nastavíte, aby se zajistila kvalita nasazení a prostředí Azure.

Doporučení k návrhu

  • Osvojte si přístup IaC pro nasazení, správu, řízení a podporu nasazení cílových zón Azure.

  • Nativní nástroje Azure pro IaC použijte v následujících scénářích:

    • Chcete používat pouze nativní nástroje Azure. Vaše organizace může mít předchozí prostředí pro nasazení šablony ARM nebo Bicep.

    • Vaše organizace chce mít okamžitou podporu pro všechny verze Preview a obecně dostupné verze služeb Azure.

  • Ne nativní nástroje pro IaC používejte v následujících scénářích:

    • Vaše organizace v současné době používá Terraform k nasazení infrastruktury do jiných cloudů, jako jsou AWS nebo GCP.

    • Vaše organizace nemusí mít okamžitou podporu pro všechny verze Preview a obecně dostupné verze služeb Azure.

  • Pomocí opakovaně použitelných modulů IaC se vyhněte opakované práci. Můžete sdílet moduly v rámci vaší organizace, abyste mohli nasadit více projektů nebo úloh a spravovat méně složitý kód.

  • Publikujte a používejte moduly IaC z veřejných registrů v následujících scénářích:

    • Chcete použít moduly pro cílovou zónu Azure, která je již publikovaná ve veřejných registrech. Další informace najdete v modulu Terraform cílových zón Azure.

    • Chcete používat moduly, které jsou spravované, aktualizované a podporované Microsoftem, Terraformem nebo jinými poskytovateli modulů.

      • Ujistěte se, že jste zkontrolovali příkaz podpory od libovolného poskytovatele modulu, který vyhodnotíte.
  • Publikujte a používejte moduly IaC z privátních registrů nebo systémů správy verzí v následujících scénářích:

    • Chcete vytvořit vlastní moduly na základě požadavků vaší organizace.

    • Chcete mít plnou kontrolu nad všemi funkcemi a udržovat, aktualizovat a publikovat nové verze modulů.

  • Pomocí kanálu CI/CD nasaďte artefakty IaC a zajistěte kvalitu nasazení a prostředí Azure.