Doporučení pro použití infrastruktury jako kódu

Platí pro toto doporučení kontrolního seznamu efektivity provozu azure Well-Architected Framework:

OE:05 Příprava prostředků a jejich konfigurací pomocí standardizovaného přístupu infrastruktury jako kódu (IaC). Stejně jako u jiných kódů navrhujte IaC s konzistentními styly, vhodnou modularizací a zajištěním kvality. Pokud je to možné, upřednostňujte deklarativní přístup.

Tato příručka popisuje doporučení pro použití IaC jako standardu pro nasazení infrastruktury. Použití IaC umožňuje integrovat nasazení a správu infrastruktury do stávajících postupů vývoje softwaru. Poskytuje konzistentní a standardní metodologii pro vývoj a nasazení pro všechny komponenty vaší úlohy. Spoléhání na ruční nasazení vystavuje vaše úlohy riziku nekonzistentních konfigurací a potenciálně nezabezpečeného návrhu.

Definice

Období Definice
Deklarativní nástroje Kategorie nástrojů, které definují koncový stav nasazení a spoléhají na systém při určování způsobu nasazení prostředků tak, aby odpovídaly definovanému koncovému stavu.
Neměnná infrastruktura Infrastruktura, která má být nahrazena novou infrastrukturou, která spouští novou konfiguraci při každém nasazení. Nesmí se měnit na místě.
Imperativní nástroje Kategorie nástrojů obsahující seznam kroků spuštění, které vedou k požadovanému koncovému stavu.
Modul Jednotka abstrakce pro rozdělení skupin prostředků za účelem zjednodušení složitých nasazení.
Měnitelná infrastruktura Infrastruktura, která má být změněna na místě. Nasazení mění konfiguraci infrastruktury, místo aby ji nahradila novou infrastrukturou.

Klíčové strategie návrhu

Jak je popsáno v průvodcích pro dodavatelský řetězec a standardizaci nástrojů a procesů , měli byste mít přísné zásady nasazení změn infrastruktury (včetně změn konfigurace) pouze prostřednictvím kódu. IaC byste měli nasadit prostřednictvím kanálů kontinuální integrace a průběžného doručování (CI/CD). Přijetím těchto zásad vynutíte konzistenci procesů pro všechna nasazení IaC, minimalizujete riziko posunu konfigurace v různých prostředích a zajistíte konzistenci infrastruktury napříč prostředími. Kromě toho byste měli standardizovat vývojové a nasazovací nástroje a procesy IaC ve stylu průvodce. Mezi doporučení pro průvodce správným stylem patří:

Upřednostněte deklarativní před imperativními nástroji. Deklarativní nástroje a jejich přidružené soubory jsou celkově lepší volbou pro nasazení a správu IaC než imperativní nástroje. Deklarativní nástroje používají pro své definiční soubory jednodušší syntaxi a definují pouze požadovaný stav prostředí po dokončení nasazení. Imperativní nástroje závisí na definování kroků potřebných k získání požadovaného koncového stavu, takže soubory můžou být mnohem složitější než deklarativní soubory. Deklarativní definiční soubory také pomáhají snižovat technický dluh při údržbě imperativního kódu, jako jsou skripty nasazení, který může časem narůstat.

Použijte nativní nástroje vaší cloudové platformy a další prověřené nástroje, které se nativně integrují do platformy. Vaše cloudová platforma poskytuje nástroje, které usnadňují a zjednodušují nasazení IaC. Využijte výhod těchto nástrojů a dalších nástrojů třetích stran, které mají nativní integraci, jako je Terraform, a nemusíte vyvíjet vlastní řešení. Nativní nástroje jsou podporovány platformou a obsahují integrované funkce pro většinu vašich potřeb. Poskytovatel platformy je průběžně aktualizuje, takže jsou užitečnější s tím, jak se platforma vyvíjí.

Poznámka

Mějte na paměti, že když poskytovatelé cloudu a vývojáři třetích stran aktualizují své nástroje a rozhraní API, můžete při použití nejnovější verze úloh riskovat neočekávané problémy. Před přijetím nových verzí nástrojů a rozhraní API nezapomeňte důkladně otestovat. Stejně tak při volání nástroje nebo rozhraní API v kódu nasazení nepoužívejte příznak "latest". Záměrně volejte nejnovější známou funkční verzi pro vaši úlohu.

Používejte správné nástroje pro konkrétní úlohy a typy infrastruktury. Do životního cyklu infrastruktury se kromě nasazení podílí více úloh. Je například potřeba použít a udržovat konfiguraci a nástroj, který používáte k nasazení skriptů, jako je Bicep, nemusí být nejlepším nástrojem pro každou operaci správy.

Podobně použití konfigurace požadovaného stavu (DSC) pro různé typy infrastruktury může vyžadovat různé nástroje. Existují například konkrétní nástroje, jako je Ansible pro správu DSC pro virtuální počítače, zatímco Flux je vhodný nástroj pro správu DSC v clusterech Kubernetes. Služby PaaS (platforma jako služba) můžou poskytovat různé nástroje pro správu konfigurace (například Azure App Configuration), které je možné zpracovat prostřednictvím IaC. Služby saaS (software jako služba) můžou být omezenější, protože jsou přísněji kontrolovány platformou.

Zamyslete se nad všemi úlohami a typy infrastruktury, které jsou v rozsahu vašich postupů IaC, a standardizujte nástroje, které dělají úlohy, ke kterým je potřebujete, a dají se integrovat do vašich postupů vývoje a správy.

Vaše skripty a šablony by měly být dostatečně flexibilní, aby bylo možné snadno nasadit nejrůznější prostředí. Pomocí parametrů, proměnných a konfiguračních souborů nasaďte standardní sadu prostředků, kterou je možné upravit pro nasazení libovolného prostředí ve vašem zásobníku povýšení kódu. Abstrakt nastavení, jako je velikost prostředku, počet, název, umístění, do nichž se má nasadit, a některá nastavení konfigurace. Dávejte však pozor, abyste příliš ne abstrahovat. Existují nastavení, která se dají abstrahovat pomocí parametru nebo proměnné, která se v průběhu životního cyklu úloh nemusí ve skutečnosti měnit nebo se můžou měnit jen zřídka. Neměly by být abstrahovány.

Poznámka

Nepoužívejte různé prostředky IaC pro různá prostředí. Například pro produkční a testovací prostředí byste neměli mít různé soubory Terraformu. Všechna prostředí by měla používat jeden soubor. S tímto souborem můžete manipulovat a podle potřeby ho nasadit do různých prostředí.

Strategiizujte a standardizujte používání modulů. Podobně jako parametry a proměnné můžou moduly opakovat nasazení infrastruktury. Buďte však pozor na to, jak je používáte. Standardizovaná strategie abstrakce pomáhá zajistit, aby moduly byly vytvořeny tak, aby splňovaly konkrétní a dohodnuté cíle. Moduly slouží k zapouzdření složitých konfigurací nebo kombinací prostředků. Pokud používáte jenom výchozí konfiguraci prostředku, modulům se vyhněte. Kromě toho buďte uvážliví při vývoji nových modulů. Pokud je to vhodné, používejte spravované opensourcové moduly, například v nesmyslných scénářích.

Zdokumentování standardů pro ruční kroky Můžou existovat kroky související s nasazením a údržbou infrastruktury, které jsou pro vaše prostředí konkrétní a vyžadují ruční zásah. Ujistěte se, že jsou tyto kroky co nejvíce minimalizovány a jasně zdokumentované. V průvodci správným stylem a standardních provozních postupech standardizujte ruční kroky, abyste zajistili, že se úlohy provádějí bezpečně a konzistentně.

Standardy dokumentů pro zpracování osamocených prostředků V závislosti na nástrojích, které používáte ke správě konfigurací a jejich omezeních, můžou nastat chvíle, kdy vaše úloha určitý prostředek už nepotřebuje a vaše nástroje IaC ho nemůžou automaticky odebrat. Řekněme například, že přecházíte z virtuálních počítačů na službu PaaS pro určitou funkci a nástroje IaC nemají logiku pro odebrání vyřazených prostředků. Pokud si tým úloh nepamatuje ruční odstranění těchto prostředků, můžou se stát osamocenými. Pokud chcete tyto scénáře zpracovat, standardizujte strategii vyhledávání osamocených prostředků a jejich odstranění. Musíte také zvážit, jak zajistit, aby vaše šablony byly aktuální. Projděte si omezení nástrojů IaC, abyste pochopili, co byste v těchto situacích měli naplánovat.

Další strategie IaC

Zvažte následující doporučení týkající se používání IaC pro vaši úlohu:

K zarovnání kanálů IaC do zásobníku úloh použijte vícevrsrstý přístup. Rozdělení kanálů IaC do vrstev vám pomůže spravovat složitá prostředí. Nasazení desítek nebo stovek prostředků jako monolitického balíčku je neefektivní a může způsobovat několik problémů, jako jsou poškozené závislosti. Použití více kanálů, které jsou sladěné s vrstvami složených z prostředků, jejichž životní cyklus nasazení nebo faktory, jako jsou funkce, úzce odpovídají, usnadňuje správu nasazení IaC.

Základní infrastruktura, jako jsou síťové prostředky, zřídkakdy vyžadují složitější změny než aktualizace konfigurace, takže tyto prostředky by měly vytvářet nízkodotykový kanál IaC. V závislosti na složitosti úloh můžete pro prostředky mít jeden nebo více střednědotykového a vysoce dotykového kanálu IaC. Když jako příklad použijeme stack aplikací založený na Kubernetes, jedna střednědotyká vrstva se může skládat z clusterů, prostředků úložiště a databázových služeb. Vysoce dotykové vrstvy se skládají z kontejnerů aplikací, které se velmi často aktualizují v režimu průběžného doručování.

Zacházejte s kódem IaC stejně jako s kódem aplikace. Když s artefakty IaC zacházíte stejně jako s artefakty kódu aplikace, můžete použít stejnou přísnost při správě kódu napříč všemi kanály. Postupy vývoje a nasazení IaC by navíc měly odpovídat aplikačním postupům. Standardy pro správu verzí, větvení, povýšení kódu a kvalitu by měly být identické. Zvažte také spolupráci vašich prostředků IaC s prostředky kódu aplikace. Tím zajistíte, aby se při každém nasazení dodržovaly stejné procesy, a pomůže vám to vyhnout se problémům, jako je neúmyslné nasazení infrastruktury před potřebným kódem aplikace nebo naopak.

Spolupracujte s dalšími týmy ve vaší organizaci za zajištění standardizace a opakované použitelnosti. Velké organizace můžou někdy mít více týmů, které vyvíjejí a podporují úlohy. Spolupráce mezi týmy za účelem dohodnout se na standardech pomáhá opakovaně používat knihovny, šablony a moduly, abyste získali efektivitu a konzistenci napříč prostředími úloh. Stejně tak nástroje IaC by měly být standardizovány v rámci celé organizace v rozsahu, v jakém je to praktické.

Použijte princip "zabezpečení jako kód", abyste zajistili, že je zabezpečení součástí kanálu nasazení. V rámci procesu vývoje IaC zahrňte kontrolu ohrožení zabezpečení a posílení zabezpečení konfigurace. Zkontrolujte úložiště IaC a vyhledejte klíče a tajné kódy, které jsou vystavené. Jednou z výhod použití IaC je, že členové týmu zaměřeného na zabezpečení můžou před nasazením zkontrolovat kód, aby měli jistotu, že konfigurace schválená pro vydání podle zabezpečení je ve skutečnosti to, co se nasazuje do produkčního prostředí. Podrobné pokyny najdete v tématu Doporučení pro zabezpečení životního cyklu vývoje.

Rutinní a netýrné aktivity. Testování nasazení, aktualizací konfigurace a procesů obnovení, včetně procesů vrácení zpět nasazení

Proměnlivá vs. neměnná infrastruktura

Volba mezi nasazením proměnlivé a neměnné infrastruktury závisí na několika faktorech. Pokud je vaše úloha důležitá pro firmy, je nejlepší použít neměnnou infrastrukturu. Podobně platí, že pokud máte vyspělý návrh infrastruktury, který je založený na razítek nasazení, může mít použití neměnné infrastruktury smysl, protože můžete spolehlivě nasadit kód aplikace a novou infrastrukturu. Naopak použití proměnlivé infrastruktury může být lepší volbou, pokud vaše postupy bezpečného nasazení určují, že upřednostňovanou možností je postupné zavádění nasazení, když dojde k mitigable problémům s nasazením. V takovém případě byste pravděpodobně aktualizovali infrastrukturu.

Požadavky

Zvýšená specializace: V některých případech je zavedení nových jazyků v týmu úloh s křivkou učení a zámek dodavatele může být špatnou volbou. Vyžaduje se školení členů týmu a analýza správného nástroje na základě podpory nástrojů poskytovatelů cloudu.

Zvýšené úsilí o údržbu: K zajištění aktuální a zabezpečené implementace IaC se vyžaduje údržba základu kódu a nástrojů. Správně sledovat technický dluh a podporovat kulturu, kde snížení dluhu je odměněno.

Delší doba změn konfigurace: Nasazení infrastruktury pomocí pokynů příkazového řádku nebo přímo z portálu nevyžaduje žádný čas psaní kódu nebo testování artefaktů. Minimalizujte dobu nasazení pomocí doporučených postupů, jako jsou kontroly kódu a postupy zajištění kvality.

Zvýšená složitost modularizace: Použití více modulů a parametrizace prodlužuje dobu potřebnou k ladění a zdokumentování systému a přidává vrstvu abstrakce. Vyvažte použití modularizace, abyste snížili složitost a vyhnuli se nadměrnému inženýrství.

Usnadnění Azure

Šablony Azure Resource Manager (šablony ARM) a Bicep jsou nativní nástroje Azure pro nasazení infrastruktury pomocí deklarativní syntaxe. Šablony ARM jsou napsané ve formátu JSON, zatímco Bicep je jazyk specifický pro doménu. Obojí je možné snadno integrovat do kanálů Azure nebo GitHub Actions kanálů CI/CD.

Terraform je další deklarativní nástroj IaC, který je v Azure plně podporovaný. Dá se použít k nasazení a správě infrastruktury a dá se integrovat do kanálu CI/CD.

K zjišťování chybných konfigurací v IaC můžete použít Microsoft Defender pro cloud.

Příklad

Příklad implementace služby Virtual Desktop, kterou je možné nasadit prostřednictvím souborů Resource Manager, Bicep nebo Terraform, najdete v architektuře akcelerátoru cílové zóny služby Azure Virtual Desktop a související referenční implementaci.

Kontrolní seznam provozní efektivity

Projděte si kompletní sadu doporučení.