Sdílet prostřednictvím


Doporučení 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.
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á se má změnit. Nasazení mění konfiguraci infrastruktury a nenahrazovat ji novou infrastrukturou.

Klíčové strategie návrhu

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 správným 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é mohou nabíhát 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 úmyslní volat nejnovější známou dobrou verzi pro vaši úlohu.

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) můžou poskytovat různé nástroje pro správu konfigurace (jako je Aplikace Azure Konfigurace), 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 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í. Pomocí parametrů, proměnných a konfiguračních souborů nasaďte standardní sadu prostředků, které je možné upravit a nasadit libovolné prostředí v zásobníku povýšení kódu. Abstraktní nastavení, jako je velikost prostředku, počet, název, umístění, do kterých se má nasadit, a některá nastavení konfigurace. Dávejte pozor, abyste se příliš nezabýt. 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:

Nepoužívejte různé prostředky IaC pro různá prostředí. Neměli byste mít jiné soubory Terraformu pro produkční a testovací prostředí, například. Všechna prostředí by měla používat jeden soubor. S tímto souborem můžete pracovat tak, aby se podle potřeby nasazoval do různých prostředí.

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í prostředků. 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.

Ruční kroky dokumentu

Standardy dokumentů pro ruční kroky. 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ě.

Dokumentace standardů pro zpracování osamocených prostředků 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 osamocenými, pokud si je tým úloh nepamatuje ručně odstranit. Pokud chcete tyto scénáře zpracovat, 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

Ke sladění kanálů IaC v zásobníku úloh 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í cyklus nasazení nebo faktory, jako jsou funkce, úzce odpovídají funkcím, usnadňuje správu nasazení IaC.

Základní infrastruktura, jako jsou síťové prostředky, zřídka potřebují změny složitější než aktualizace konfigurace, takže by tyto prostředky měly vytvořit kanál IaC s nízkým dotykem. V závislosti na složitosti vaší úlohy můžete mít jeden nebo více kanálů IaC se středním dotykem a vysokým dotykem . 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ázení s kódem IaC a aplikace stejným způsobem

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é kolaci prostředků IaC společně 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 a odsouhlasit standardy vám pomůže opakovaně používat knihovny, šablony a moduly, abyste získali efektivitu a konzistenci napříč prostředími úloh. Stejně tak by měly být nástroje IaC v celé organizaci standardizovány v rozsahu, v jakém je to praktické.

Vynucení zabezpečení v kódu IaC

Použijte zásadu zabezpečení jako kódu, abyste zajistili, že zabezpečení je součástí kanálu nasazení. 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.

Testování rutiny a ne rutinních aktivit Testování nasazení, aktualizací konfigurace a procesů obnovení, včetně procesů vrácení zpět nasazení

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í určují, že přechod k nasazením v případě problémů s nasazením, ke kterým dochází, je upřednostňovaná možnost. V takovém případě byste pravděpodobně aktualizovali infrastrukturu.

Důležité informace

Zvýšená specializace: V některých případech přináší zavedení nových jazyků ve vašem týmu úloh křivku 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 základní kód a údržba nástrojů. Správně sledovat technický dluh a podporovat kulturu, kde snížení dluhu je 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. Obě je možné snadno integrovat do kanálů Azure nebo kanálů CI/CD GitHub Actions.

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 cílových zón Služby Azure Virtual Desktop a přidruženou referenční implementaci, například implementaci služby Virtual Desktop, kterou je možné nasadit prostřednictvím poskytnutého Resource Manageru, Bicep nebo souborů Terraformu.

Kontrolní seznam pro efektivitu provozu

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