Strategie architektury pro použití infrastruktury jako kódu

Platí pro toto doporučení kontrolního seznamu provozní efektivity architektury Azure Well-Architected Framework:

OE:05 Připravte prostředky a jejich konfigurace pomocí standardizované infrastruktury jako kódu (IaC). Stejně jako u jiného kódu navrhujte IaC s konzistentními styly, odpovídající modularizací a zárukou kvality. Pokud je to možné, upřednostněte 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í 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

Pojem definice
Deklarativní nástroje Kategorie nástrojů, které definují koncový stav nasazení a spoléhají na systém, aby určil, jak nasadit prostředky 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 s každým nasazením. Nesmí se měnit na místě.
Imperativní nástroje Kategorie nástrojů, které uvádějí kroky provádění, které vedou k požadovanému koncovému stavu.
Modul Jednotka abstrakce pro dělení skupin prostředků za účelem zjednodušení složitých nasazení.
Proměnlivá infrastruktura Infrastruktura, která má být změněna na místě. Nasazení mění konfiguraci infrastruktury, spíše než aby ji nahrazovala novou infrastrukturou.

Jak je popsáno v průvodcích dodavatelským řetězcem a standardizací nástrojů a procesů , měli byste mít přísné zásady nasazování 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í těchto zásad vynucuje konzistenci procesů pro všechna nasazení IaC, minimalizuje riziko posunu konfigurace napříč vašimi prostředími a zajišťuje konzistenci infrastruktury napříč vašimi prostředími. Kromě toho byste měli standardizovat vývojové a nasazovací nástroje a procesy IaC v průvodci stylem. Mezi doporučení pro průvodce stylem patří:

Přednost deklarativním nástrojům před imperativními nástroji

Deklarativní nástroje a jejich přidružené soubory jsou lepší volbou pro nasazení a správu IaC než imperativní nástroje. Deklarativní nástroje používají pro své definiční soubory jednodušší syntaxi, která definuje pouze požadovaný stav prostředí po dokončení nasazení. Imperativní nástroje závisí na definování kroků potřebných k dosažení požadovaného koncového stavu, takže soubory mohou být mnohem složitější než deklarativní soubory. Deklarativní definiční soubory také pomáhají snížit technický dluh udržování imperativního kódu, jako jsou skripty nasazení, které mají sklon k nabíhání v průběhu času.

Použití nativních a standardních nástrojů

Použijte nativní nástroje cloudové platformy a další osvědčené nástroje, které se nativně integrují do platformy. Vaše cloudová platforma poskytuje nástroje, které usnadňují a zjednodušují nasazování IaC. Využijte tyto nástroje a další nástroje třetích stran, které mají nativní integraci, jako je Terraform, a ne vývoj vlastních řešení. Platforma podporuje nativní nástroje a zahrnuje integrované funkce pro většinu vašich potřeb. Poskytovatel platformy je průběžně aktualizuje, takže je bude užitečnější s tím, jak se platforma vyvíjí.

Poznámka:

Mějte na paměti, že jako poskytovatelé cloudu a vývojáři třetích stran aktualizují své nástroje a rozhraní API, můžete riskovat neočekávané problémy při používání nejnovější verze ve vaší úloze. Než je přijmete, ujistěte se, že důkladně testujete nové verze nástrojů a rozhraní API. Podobně se při volání nástroje nebo rozhraní API v kódu nasazení vyhněte použití příznaku "latest". Buďte záměrní v tom, že zvolte nejnovější známou stabilní verzi pro vaši úlohu.

Příležitost AI: Vývoj a ověřování šablon IaC založených na standardech, jako je Bicep a Terraform, je často časově náročný a náchylný k chybám. AI zjednodušuje vytváření a ověřování šablon a urychluje vaše úsilí o modernizaci. Zkontrolujte veškerý kód vygenerovaný AI, abyste splnili požadavky na přesnost a dodržování předpisů.

AI může snížit rizika nasazení kontrolou šablon pro chybné konfigurace a ověřením dodržování zásad organizace. Může simulovat, předpovídat a shrnout rizika pomocí instrukcí přirozeného jazyka.

Použití správného nástroje pro úkol

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

Podobně může použití konfigurace požadovaného stavu (DSC) pro různé typy infrastruktury 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ým nástrojem pro správu DSC v clusterech Kubernetes. Služby PaaS (Platforma jako služba) mohou poskytovat různé nástroje pro správu konfigurace (jako je Azure App Configuration), které lze spravovat prostřednictvím IaC. Služby SaaS (Software jako služba) můžou být omezenější, protože jsou důkladněji řízeny platformou.

Zamyslete se nad všemi úlohami a typy infrastruktury, které jsou v rozsahu vašich postupů IaC, a standardizujte nástroje, které jsou potřeba k jejich plnění a které je možné integrovat do vašich postupů vývoje a správy.

Podpora více prostředí

Vaše skripty a šablony by měly být dostatečně flexibilní, aby bylo možné snadno nasadit různá prostředí. Použijte parametry, proměnné a konfigurační soubory k nasazení standardní sady prostředků, které lze upravit pro nasazení libovolného prostředí v hierarchii povyšování kódu. Abstraktní parametry, jako je velikost prostředku, počet, název, umístění nasazení a nastavení konfigurace. Dávejte pozor, abyste příliš neabstrahovali. Existují nastavení, která se dají abstrahovat pomocí parametru nebo proměnné, která se nemusí v průběhu životního cyklu úloh ve skutečnosti měnit nebo která se můžou měnit jen zřídka. Neměli by být abstraktní.

Poznámka:

Používejte stejné prostředky IaC v různých prostředích, aby byla co nejvíce konzistentní. Nepoužívejte například různé soubory Terraformu pro produkční a testovací prostředí. Všechna prostředí by měla používat jeden soubor, se kterým můžete pracovat s nasazením do různých prostředí.

Příležitost AI: Udržujte prostředí konzistentní a zabraňte problémům s konfigurací, které mají vliv na kvalitu nebo stabilitu. AI může zkontrolovat kód aplikace v žádostech o přijetí změn a identifikovat požadované aktualizace IaC a doporučit změny v rané fázi. GitHub Copilot může analyzovat kód, navrhovat dokumenty a požadavky na návrhy aktualizací nebo umožnit vývojářům požadovat změny infrastruktury v přirozeném jazyce. Pokročilá řešení založená na agentech můžou odvodit potřeby infrastruktury z kódu a dalších zdrojů a generovat žádosti o přijetí změn s doporučenými změnami IaC a konfigurace.

Použití správné rovnováhy při zapouzdření funkcí

Strategie a standardizace použití modulů. Podobně jako parametry a proměnné můžou moduly opakovat nasazení infrastruktury. Mějte ale na mysli, jak je používáte. Standardizovaná strategie abstrakce pomáhá zajistit, aby moduly byly vytvořeny tak, aby splňovaly konkrétní, odsouhlasené cíle. Moduly slouží k zapouzdření složitých konfigurací nebo kombinací zdrojů. Pokud používáte pouze výchozí konfiguraci prostředku, vyhněte se modulům. Kromě toho buďte při vývoji nových modulů uvážliví. V případě potřeby používejte spravované opensourcové moduly, například v nesmyslných scénářích.

Dokumentování ručních kroků

Standardy pro dokumentaci ručních postupů. Můžou existovat kroky související s nasazením a údržbou infrastruktury, které jsou specifické pro vaše prostředí a které vyžadují ruční zásah. Ujistěte se, že jsou tyto kroky co nejvíce minimalizované a jasně zdokumentované. Ve vašem průvodci stylem a standardních provozních postupech standardizujte ruční kroky, abyste zajistili, že se úlohy provádějí bezpečně a konzistentně.

Doporučení standardů pro zpracování opuštěných zdrojů V závislosti na nástrojích, které používáte ke správě konfigurace a jejich omezení, může docházet k případům, kdy vaše úloha už konkrétní prostředek nepotřebuje a vaše nástroje IaC nemůžou prostředek 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ů. Tyto prostředky se můžou stát nevyužívanými, pokud si pracovní tým nepamatuje je ručně odstranit. Pro zpracování těchto scénářů standardizujte strategii pro vyhledání osamocených prostředků a jejich odstranění. Musíte také zvážit, jak zajistit, aby vaše šablony byly aktuální. Seznamte se s omezeními nástrojů IaC a seznamte se s tím, co byste v těchto situacích mohli potřebovat naplánovat.

Zvažte následující doporučení, která platí pro použití IaC pro vaši úlohu.

Použití vrstveného přístupu pro kanály IaC

Pro sladění vašich IaC potrubí v rámci vrstvy zátěže použijte vícevrstvý přístup. Oddělení kanálů IaC do vrstev pomáhá spravovat složitá prostředí. Nasazení desítek nebo stovek prostředků jako monolitického balíčku je neefektivní a může představovat několik problémů, jako jsou nefunkční závislosti. Použití více kanálů, které jsou v souladu s vrstvami složenými z prostředků, jejichž životní cykly nasazení nebo faktory, jako je funkčnost, úzce odpovídají, usnadňuje správu nasazení IaC.

Základní infrastruktura, jako jsou síťové prostředky, zřídka vyžaduje změny složitější než aktualizace konfigurace, takže by tyto prostředky měly tvořit IaC kanál s nízkou potřebou zásahů. V závislosti na složitosti vaší úlohy můžete mít jeden nebo více středně složitých a vysoce složitých kanálů IaC pro zdroje. Příkladem použití zásobníku aplikací založeného na Kubernetes může být jedna středně dotyková vrstva složená z clusterů, prostředků úložiště a databázových služeb. Vrstvy s vysokým dotykovým ovládáním 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 a aplikačním kódem stejně.

Zacházení s artefakty IaC stejným způsobem jako artefakty kódu aplikace vám pomůže použít stejnou rigorii pro správu kódu napříč všemi kanály. Postupy vývoje a nasazení IaC by navíc měly zrcadlit aplikační postupy. Standardy pro správu verzí, větvení, povýšení kódu a kvalitu by měly být stejné. Zvažte také seskupení prostředků IaC spolu s prostředky kódu aplikace. To pomáhá zajistit, aby se při každém nasazení dodržovaly stejné procesy, a pomáhá vyhnout se problémům, jako je neúmyslné nasazení infrastruktury před nezbytným kódem aplikace nebo naopak.

Použití centralizovaných standardů a prostředků

Spolupracujte s dalšími týmy ve vaší organizaci pro standardizaci a opakované použití. Velké organizace můžou někdy mít několik týmů, které vyvíjejí a podporují úlohy. Spolupráce mezi týmy na odsouhlasení standardů vám pomůže opakovaně používat knihovny, šablony a moduly, čímž dosáhnete efektivity a konzistence v různých prostředích pro zpracovávané úlohy. Stejně tak by měly být nástroje IaC v celé organizaci standardizovány v rozsahu, v jakém je to praktické.

Prosazení zabezpečení v kódu IaC

Použijte zásadu 'zabezpečení jako kód', abyste zajistili, že zabezpečení je součástí nasazovacího kanálu. Součástí procesu vývoje IaC je kontrola ohrožení zabezpečení a posílení zabezpečení konfigurace. Naskenujte ú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é na zabezpečení můžou před nasazením zkontrolovat kód, aby se zajistilo, že konfigurace schválená pro vydání podle zabezpečení je skutečně nasazená do produkčního prostředí. Podrobné pokyny najdete v tématu Doporučení pro zabezpečení životního cyklu vývoje.

Řádné a mimořádné testovací aktivity. Testování nasazení aplikací, aktualizací konfigurace a procesů obnovení, včetně procesů vrácení zpět nasazení.

Příležitost AI: Pokud chcete posílit stav zabezpečení a zrychlit dobu odezvy, integrujte AI do procesů kontroly zabezpečení a modelování hrozeb.

Vylepšete stávající proces zabezpečení pomocí nástrojů a funkcí umělé inteligence, abyste zvýraznili vzory kódování, které nejsou bezpečné a navrhují bezpečné alternativy. Generativní AI může analyzovat šablony IaC a architektonické diagramy, poté generovat modely hrozeb a mitigace na podporu kontinuálního modelování hrozeb. Pravidelně aktualizujte diagramy architektury a šablony IaC.

Přijetí neměnného modelu nasazení

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 chod firmy, je nejlepší použít neměnnou infrastrukturu. Podobně pokud máte vyspělý návrh infrastruktury založený na razítkech nasazení, může použití neměnné infrastruktury dávat 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í vyžadují, že pokračování v nasazení při řešitelných problémech s nasazením je preferovanou volbou. V takovém případě byste pravděpodobně aktualizovali infrastrukturu.

Úvahy

Zvýšená specializace: V některých případech přináší zavedení nových jazyků ve vašem pracovním týmu určitou obtížnost učení a závislost na dodavateli 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 základní kód a údržba nástrojů. Správně sledovat svůj technický dluh a pěstovat kulturu, kde je snížení dluhu odměněno.

Vyšší doba pro změny konfigurace: Nasazení infrastruktury pomocí pokynů příkazového řádku nebo přímo z portálu nevyžaduje žádný kódovací čas ani testovací artefakty. Minimalizujte dobu nasazení podle doporučených postupů, jako jsou kontroly kódu a postupy kontroly kvality.

Větší složitost modularizace: Použití více modulů a parametrizace zvyš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 Manageru (š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í lze snadno integrovat do Azure Pipelines nebo GitHub Actions CI/CD kanálů.

Terraform je další deklarativní nástroj IaC, který je plně podporovaný v Azure. 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 for Cloud.

Příklad

Podívejte se na architekturu akcelerátoru přistávací zóny pro Azure Virtual Desktop a přidruženou referenční implementaci pro příklad implementace Virtual Desktop, který lze nasadit pomocí poskytnutých souborů Resource Manager, Bicep nebo Terraform.

Kontrolní seznam pro efektivitu provozu

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