Vrstvené zřizování

Azure Developer CLI (azd) podporuje vrstvené zřizování, které můžete použít k definování více vrstev zřizování v azure.yaml souboru. Každá vrstva odkazuje na vlastní sadu šablon Infrastruktury jako kódu (IaC). CLI vytváří vrstvy po jedné, v pořadí daném závislostmi mezi nimi. Můžete také zřizovat nebo rušit jednotlivé vrstvy nezávisle.

Tato funkce řeší složité scénáře závislostí, kdy prostředky v jedné vrstvě závisejí na prostředcích z jiné vrstvy. Místo kombinování IaC s imperativními skripty háku udržuje vrstvené zřizování vše deklarativní.

Poznámka:

Zřizování vrstev je v současné době beta funkcí. Přečtěte si další informace o strategii správy verzí.

Kdy použít vrstvené zřizování

Používejte vrstvené poskytování, pokud jedno azd provision nasazení nedokáže zpracovat všechny potřeby infrastruktury jedním krokem. Zvažte použití vrstveného zřizování v následujících případech:

  • Cyklické závislosti: Některé prostředky musí odkazovat na jiné prostředky, které musí být vytvořeny jako první, například virtuální síť, která musí existovat před konfigurací privátního koncového bodu.
  • Základní infrastruktura se liší od aplikační infrastruktury: Spravujete sdílené sítě, zabezpečení nebo prostředky identit odděleně od prostředků jednotlivých aplikací.
  • Vyžaduje se nezávislá správa životního cyklu: Aktualizujete a odstraňujete různé komponenty infrastruktury v různých časech. Síťová vrstva může být například dlouhodobá, zatímco aplikační vrstva se často znovu nasazuje.
  • Projekty Monorepo s odlišnými skupinami infrastruktury: Jedno úložiště obsahuje více nezávislých služeb (jako je centrum událostí, aplikace kontejnerů a aplikace funkcí), z nichž každé má vlastní šablony infrastruktury.

Konfigurace vrstev v azure.yaml

Definujte vrstvy v infra části azure.yaml souboru. Každá vrstva vyžaduje name a path směřující na adresář, který obsahuje šablony IaC pro danou vrstvu.

name: my-app
infra:
  layers:
    - name: networking
      path: ./infra/networking
    - name: application
      path: ./infra/application
services:
  api:
    project: ./src/api
    language: js
    host: containerapp

Důležité

Pořadí zpracování vrstev:azd provision zpracovává vrstvy na základě jejich závislostí. U vrstev Bicep a vlastních poskytovatelů nebo poskytovatelů rozšíření nástroj *.parameters.json odvozuje závislosti prohledáváním souborů parametrů (azd a azure.yaml) na odkazy na proměnné prostředí a výstupy vrstev a podle toho vrstvy seřazuje, místo aby se striktně řídil pořadím uvedeným v *.bicepparam. Vrstvy, které nemají žádné odvozené nebo deklarované závislosti běží v pořadí, v jakém jsou uvedeny. azd down se řídí odpovídajícím obráceným pořadím, takže závislé vrstvy se odeberou před vrstvami, na které závisí. Pomocí vlastnosti dependsOn deklarujte pořadí, které azd nedokáže odvodit.

Vlastnosti vrstvy

Každá vrstva podporuje následující vlastnosti:

Vlastnictví Povinné Description
name Ano Jedinečný název vrstvy. Tento název použijte při cílení na konkrétní vrstvu pomocí příkazů.
path Ano Relativní cesta k adresáři, který obsahuje šablony IaC pro tuto vrstvu.
module Ne Název modulu v adresáři vrstvy. Výchozí hodnota je main.
provider Ne Zprostředkovatel IaC pro tuto vrstvu (bicep nebo terraform). Dědí z kořenového adresáře infra.provider , pokud ho nezadáte.
dependsOn Ne Názvy dalších vrstev, na které tato vrstva závisí. Tuto vlastnost použijte při řazení důležitých věcí, ale azd nelze odvodit závislost z odkazů na parametry.

Důležité

Při definování infra.layersnemůžete deklarovat další vlastnosti v oddílu infra (path, module, deploymentStacks) na kořenové úrovni. Musíte zadat veškerou konfiguraci infrastruktury v rámci každé vrstvy.

Adresářová struktura

Typický projekt využívající vrstvené zřizování může mít následující adresářovou strukturu:

my-app/
├── azure.yaml
├── infra/
│   ├── networking/
│   │   └── main.bicep
│   └── application/
│       └── main.bicep
└── src/
    └── api/
        └── ...

Každý adresář vrstvy obsahuje vlastní kompletní sadu šablon IaC, stejně jako by to bylo v adresáři standardního azdinfra projektu.

Zřizování a správa vrstev

Můžete zřídit všechny vrstvy najednou nebo cílit na konkrétní vrstvu podle názvu. Následující části popisují běžné příkazy pro zřizování, odstraňování a aktualizaci stavu vrstvy.

Nastavení všech vrstev

Spuštěním azd provision bez argumentů zřiďte všechny vrstvy:

azd provision

azd zpracovává každou vrstvu postupně a zajišťuje, aby se vrstva dokončila před zahájením jakékoli vrstvy, která na ní závisí. U vrstev Bicep a vlastních nebo rozšiřujících poskytovatelů azd odvozuje závislosti z odkazů na proměnné prostředí a výstupy vrstev v souborech *.bicepparam a *.parameters.json, takže se pořadí spuštění může lišit od pořadí uvedeného v azure.yaml. Vrstvy bez odvozených nebo deklarovaných závislostí se spouštějí v uvedeném pořadí. Tento proces zaručuje, že závislé prostředky existují před nasazením vrstev, které na ně odkazují.

Zřízení konkrétní vrstvy

Pokud chcete zřídit pouze určitou vrstvu, předejte název vrstvy jako argument:

azd provision networking

Tento příkaz nasadí pouze prostředky definované ve vrstvě networking . Zřízení konkrétní vrstvy je užitečné v následujících případech:

  • Iterujete na jedné vrstvě během vývoje.
  • Potřebujete aktualizovat jednu vrstvu bez opětovného nasazení ostatních.
  • Nastavujete novou vrstvu nad stávající infrastrukturou.

Odbourání všech vrstev

Spusťte azd down bez argumentů, abyste uvolnili prostředky ze všech vrstev. Pokud existuje více vrstev, azd zpracuje je obráceně pořadí zřizování, takže závislé prostředky se odeberou před základními prostředky, na které závisejí:

azd down

Odstranění konkrétní vrstvy

Pokud chcete odstranit pouze určitou vrstvu, předejte název vrstvy jako argument:

azd down application

Tento příkaz odebere pouze prostředky nasazené vrstvou application a ostatní vrstvy zůstanou nedotčené.

Aktualizace stavu prostředí

Stav prostředí můžete aktualizovat z konkrétní vrstvy pomocí příznaku --layer s azd env refresh:

azd env refresh --layer networking

Tento příkaz aktualizuje proměnné prostředí a výstupy na základě posledního nasazení zadané vrstvy.

Příklad: Monorepo s více službami

Následující příklad ukazuje vrstvené zřizování monorepo, které obsahuje centrum událostí, aplikaci kontejneru s více kontejnery a aplikaci funkcí Azure:

name: logging-app
infra:
  layers:
    - name: eventhub
      path: ./infra/eventhub
    - name: aca
      path: ./infra/aca
    - name: functionapp
      path: ./infra/functionapp
services:
  functionapp:
    resourceName: ${site_name}
    language: dotnet
    project: ./src/function/functionapp.csproj
    host: appservice
    resourceGroup: ${rg_name}

Odpovídající adresářová struktura:

logging-app/
├── azure.yaml
├── infra/
│   ├── eventhub/
│   │   └── main.bicep
│   ├── aca/
│   │   └── main.bicep
│   └── functionapp/
│       └── main.bicep
└── src/
    └── function/
        └── functionapp.csproj

S touto konfigurací můžete:

  1. Zřízení pouze infrastruktury centra událostí: azd provision eventhub
  2. Poskytnutí pouze infrastruktury kontejnerové aplikace: azd provision aca
  3. Zřiďte vše v pořadí: azd provision
  4. Roztrhejte pouze vrstvu aplikace funkcí: azd down functionapp

Příklad: Základní vrstvy a vrstvy aplikací

Běžný vzor odděluje sdílenou nebo základní infrastrukturu od infrastruktury pro jednotlivé aplikace:

name: my-app
infra:
  layers:
    - name: base
      path: ./infra/base
    - name: app
      path: ./infra/app
services:
  web:
    project: ./src/web
    language: js
    host: containerapp

Vrstva base vytváří sdílené prostředky, jako jsou sítě, identita a monitorování. Vrstva app vytvoří prostředky specifické pro aplikaci (například prostředí Container App a kontejnerové aplikace), které odkazují na základní prostředky.

Během vývoje můžete základní vrstvu zřídit jednou a iterovat na aplikační vrstvě:

azd provision base
azd provision app
azd provision app  # re-provision only the app layer after changes

Příklad: Kombinovaní poskytovatelé IaC

Každá vrstva může používat jiného zprostředkovatele IaC. Můžete například použít Bicep pro sítě a Terraform pro aplikační vrstvu:

name: my-app
infra:
  layers:
    - name: networking
      path: ./infra/networking
      provider: bicep
    - name: application
      path: ./infra/application
      provider: terraform

Vestavění poskytovatelé jiní než Bicep (Terraform, Pulumi, ARM a testovací poskytovatel) jsou pro odvozování závislostí neprůhlední, protože azd nemůže analyzovat jejich vstupy z hlediska odkazů na jiné vrstvy. Při řazení mezi těmito vrstvami nebo mezi těmito vrstvami a dalšími vrstvami je důležité použít explicitní dependsOn vlastnost:

name: my-app
infra:
  layers:
    - name: networking
      path: ./infra/networking
      provider: bicep
    - name: application
      path: ./infra/application
      provider: terraform
      dependsOn:
        - networking

Úvahy a omezení

  • Když zřídíte všechny vrstvy, azd zpracuje je po jednom na základě jejich závislostí. Pro vrstvy Bicep a vlastní poskytovatele nebo poskytovatele rozšíření azd odvodí závislosti z odkazů na proměnné prostředí a odkazů na výstupy vrstev v souborech *.bicepparam a *.parameters.json. Vrstvy bez odvozených nebo deklarovaných závislostí se spouští v pořadí, v jakém definujete.
  • Integrovaní poskytovatelé jiní než Bicep (Terraform, Pulumi, ARM a testovací poskytovatel) jsou z hlediska odvozování závislostí netransparentní. Při řazení zahrnujících tyto vrstvy použijte explicitní dependsOn vlastnost.
  • Explicitní dependsOn je také vyžadován při řazení důležitých věcí, ale azd nemůže odvodit závislost z odkazů na parametry. Například použijte dependsOn, když hook jedné vrstvy postprovision produkuje hodnotu, kterou využívá jiná vrstva, protože hodnoty vytvořené hookem se v souborech *.parameters.json nebo *.bicepparam nezobrazují jako odkazy na výstup.
  • Když zrušíte všechny vrstvy, azd je zpracuje v opačném pořadí, než v jakém byly zřizovány.
    • Pokud více vrstev nasadí prostředky do stejné skupiny prostředků Azure a použijete výchozí chování odstranění založené na skupinách prostředků, mohou se při spuštění azd down sdílené prostředky odstranit.
    • Pokud chcete povolit nezávislé sledování a odstranění vrstvené infrastruktury, povolte zásobníky nasazení spuštěním příkazu azd config set alpha.deployment.stacks on.
  • Nemůžete použít příznak --preview při zřizování více vrstev najednou. <layer> Zadejte název pro použití režimu náhledu.
  • Vrstvy fungují nezávisle z hlediska IaC. Pokud chcete odkazovat na výstupy z jedné vrstvy v jiné vrstvě, použijte proměnné prostředí, které se nastaví po nasazení každé vrstvy azd. Odkazování na tyto proměnné prostředí z *.bicepparam nebo *.parameters.json souboru také umožňuje azd odvodit pořadí mezi vrstvami.
  • Všechny standardní azd funkce zřizování (ukládání stavu nasazení do mezipaměti, háky, parametry, Bicep nebo Terraform) fungují v jednotlivých vrstvách.
    • Háky příkazové úrovně (například preprovision, postprovision) se volají jednou na vrstvu. Když je definováno více vrstev, háky se spouští pro každou vrstvu v pořadí, v jakém jsou vrstvy zpracovávány.

Další kroky