Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure Developer CLI (azd) támogatja a rétegzett kiépítést, amellyel több kiépítési réteget definiálhat a azure.yaml fájlban. Minden egyes réteg a saját Infrastruktúra mint Kód (IaC) sablonkészletére mutat. A parancssori felület egyesével helyezi el a rétegeket, a közöttük lévő függőségek szerint rendezve. Önállóan is kiépítheti vagy lebonthatja az egyes rétegeket.
Ez a funkció olyan összetett függőségi forgatókönyveket old meg, amelyekben az egyik réteg erőforrásai egy másik réteg erőforrásaitól függenek. Ahelyett, hogy az IaC-t imperatív horogszkriptekkel kevernék, a rétegzett kiépítés mindent deklaratívvá teszi.
Megjegyzés:
A rétegzett kiépítés jelenleg bétaverziós funkció. További információ a verziószámozási stratégiáról.
Mikor érdemes rétegzett kiépítést használni?
Rétegzett kiépítést akkor használjon, ha egyetlen azd provision üzembe helyezés egyetlen lépésben nem tudja kezelni az összes infrastruktúraigényt. Fontolja meg a rétegzett kiépítés használatát a következő esetekben:
- Körkörös függőségek: Egyes erőforrásoknak más olyan erőforrásokra kell hivatkoznia, amelyeket először létre kell hozni, például egy virtuális hálózatot, amelynek léteznie kell egy privát végpont konfigurálása előtt.
- Az alapszintű infrastruktúra eltér az alkalmazásinfrastruktúrától: a megosztott hálózati, biztonsági vagy identitás-erőforrásokat az alkalmazásonkénti erőforrásoktól elkülönítve kezeli.
- Független életciklus-kezelésre van szükség: Különböző infrastruktúra-összetevőket frissíthet és bonthat le különböző időpontokban. Előfordulhat például, hogy egy hálózati réteg hosszú élettartamú, míg az alkalmazásréteget gyakran újra üzembe helyezik.
- Különálló infrastruktúracsoportokkal rendelkező monorepo-projektek: Egyetlen adattár több független szolgáltatást (például eseményközpontot, tárolóalkalmazást és függvényalkalmazást) tartalmaz, amelyek mindegyike saját infrastruktúrasablonokkal rendelkezik.
Rétegek konfigurálása az azure.yaml-ben
Definiálja a infra szakaszban lévő azure.yaml fájl rétegeket. Minden réteghez szükség van egy name és egy path olyan könyvtárra, amely az adott réteg IaC-sablonjait tartalmazza.
name: my-app
infra:
layers:
- name: networking
path: ./infra/networking
- name: application
path: ./infra/application
services:
api:
project: ./src/api
language: js
host: containerapp
Fontos
Rétegfeldolgozási sorrend:azd provision függőségeik alapján dolgozza fel a rétegeket. A Bicep rétegek és egyéni vagy bővítményszolgáltatók azd esetében függőségeket következtethet a környezeti változók és a rétegkimeneti hivatkozások paraméterfájljainak (*.bicepparam és *.parameters.json) vizsgálatával, és ennek megfelelően rendeli meg a rétegeket ahelyett, hogy szigorúan követi a listában felsorolt sorrendetazure.yaml. Azok a rétegek, amelyek nem rendelkeznek kikövetkezett vagy deklarált függőségekkel, a felsorolt sorrendben futnak.
azd down a megfelelő fordított sorrendet követi, így a függő rétegek el lesznek távolítva a függő rétegek előtt, amelyektől függenek. Az dependsOn tulajdonság használatával megadhatja azt a sorrendet, amelyre a azd nem tud következtetni.
Rétegtulajdonságok
Minden réteg a következő tulajdonságokat támogatja:
| Ingatlan | Kötelező | Description |
|---|---|---|
name |
Igen | A réteg egyedi neve. Ezt a nevet akkor használja, ha egy adott réteget céloz meg parancsokkal. |
path |
Igen | A réteg IaC-sablonjait tartalmazó könyvtár relatív elérési útja. |
module |
Nem | A modul neve a réteg könyvtárában. Alapértelmezett érték: main. |
provider |
Nem | A réteg IaC-szolgáltatója (bicep vagy terraform). A gyökértől infra.provider örökli, ha nem adja meg. |
dependsOn |
Nem | Azoknak a rétegeknek a neve, amelyektől ez a réteg függ. Ezt a tulajdonságot akkor használja, ha fontos a sorrend, de azd nem tudja a paraméterhivatkozásokból származó függőséget következtetni. |
Fontos
Amikor definiálja a infra.layers, nem deklarálhat más tulajdonságokat a infra szakasz (path, module, deploymentStacks) gyökérszintjén. Minden rétegen belül meg kell adnia az összes infrastruktúra-konfigurációt.
Címtárstruktúra
Egy rétegzett kiépítést használó tipikus projekt a következő könyvtárstruktúrával rendelkezhet:
my-app/
├── azure.yaml
├── infra/
│ ├── networking/
│ │ └── main.bicep
│ └── application/
│ └── main.bicep
└── src/
└── api/
└── ...
Minden rétegkönyvtár saját teljes IaC-sablonkészletet tartalmaz, ahogyan egy standard azd projekt könyvtára infra tenné.
Rétegek kiépítése és kezelése
Az összes réteget kiépítheti egyszerre, vagy név szerint megcélzhat egy adott réteget. Az alábbi szakaszok a rétegállapot kiépítésére, lebontására és frissítésére vonatkozó gyakori parancsokat ismertetik.
Az összes réteg kiépítése
Az összes réteg kiépítésére futtassa a azd provision parancsot argumentumok nélkül:
azd provision
azd egyenként dolgozza fel az egyes rétegeket, biztosítva, hogy egy réteg befejeződjön, mielőtt az attól függő rétegek elkezdődnek. A Bicep-rétegek, valamint az egyéni vagy bővítményszolgáltatók esetében a azd a *.bicepparam és *.parameters.json fájlokban található, a környezeti változókra és a rétegek kimeneteire mutató hivatkozások alapján következteti ki a függőségeket, ezért a végrehajtási sorrend eltérhet a azure.yaml fájlban felsorolt sorrendtől. A kikövetkezett vagy deklarált függőségeket nem tartalmazó rétegek a felsorolt sorrendben futnak. Ez a folyamat garantálja, hogy a függő erőforrások még az rájuk hivatkozó rétegek üzembe helyezése előtt léteznek.
Adott réteg kiépítése
Ha csak egy adott réteget szeretne kiépíteni, adja meg a réteg nevét argumentumként:
azd provision networking
Ez a parancs csak a rétegben networking definiált erőforrásokat helyezi üzembe. Egy adott réteg kiépítése akkor hasznos, ha:
- A fejlesztés során egyetlen rétegen kell iterálnia.
- Frissítenie kell egy réteget anélkül, hogy újra üzembe kellene helyeznie másokat.
- Új réteget állít be a meglévő infrastruktúra fölé.
Az összes réteg bontása
Futtassa azd down argumentumok nélkül az összes rétegben lévő erőforrások lebontásához. Ha több réteg létezik, azd azokat a kiépítési sorrend fordítottja szerint dolgozza fel, így a függő erőforrások el lesznek távolítva az alaperőforrások előtt, amelyektől függenek:
azd down
Adott réteg lebontása
Ha csak egy adott réteget szeretne lebontani, adja át a réteg nevét argumentumként:
azd down application
Ez a parancs csak a réteg által application telepített erőforrásokat távolítja el, a többi réteget érintetlenül hagyva.
Környezeti állapot frissítése
A környezeti állapotot egy adott rétegből frissítheti a --layer következő jelölővel azd env refresh:
azd env refresh --layer networking
Ez a parancs frissíti a környezeti változókat és kimeneteket a megadott réteg legutóbbi üzembe helyezése alapján.
Példa: Monorepo több szolgáltatással
Az alábbi példa egy eseményközpontot, egy több tárolót futtató tárolóalkalmazást és egy Azure-függvényalkalmazást tartalmazó monorepó rétegzett kiépítését mutatja be:
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}
A megfelelő könyvtárstruktúra:
logging-app/
├── azure.yaml
├── infra/
│ ├── eventhub/
│ │ └── main.bicep
│ ├── aca/
│ │ └── main.bicep
│ └── functionapp/
│ └── main.bicep
└── src/
└── function/
└── functionapp.csproj
Ezzel a konfigurációval a következő beállításokat végezheti el:
- Csak az Event Hub-infrastruktúra kiépítése:
azd provision eventhub - Csak a Container App-infrastruktúra kiépítése:
azd provision aca - Mindent sorrendben üzembe helyezni:
azd provision - Csak a függvényalkalmazás rétegének lebontása:
azd down functionapp
Példa: Alap- és alkalmazásrétegek
A közös minta elválasztja a megosztott vagy az alapszintű infrastruktúrát az alkalmazásonkénti infrastruktúrától:
name: my-app
infra:
layers:
- name: base
path: ./infra/base
- name: app
path: ./infra/app
services:
web:
project: ./src/web
language: js
host: containerapp
A base réteg megosztott erőforrásokat hoz létre, például hálózatkezelést, identitást és monitorozást. A app réteg létrehozza az alkalmazásspecifikus erőforrásokat (például tárolóalkalmazás-környezetet és tárolóalkalmazásokat), amelyek hivatkoznak az alaperőforrásokra.
A fejlesztés során kiépítheti egyszer az alapréteget, és iterálhat az alkalmazásrétegen:
azd provision base
azd provision app
azd provision app # re-provision only the app layer after changes
Példa: Vegyes IaC-szolgáltatók
Minden réteg használhat egy másik IaC-szolgáltatót. Használhatja például a Bicep-et a hálózatkezeléshez és a Terraformot az alkalmazásréteghez:
name: my-app
infra:
layers:
- name: networking
path: ./infra/networking
provider: bicep
- name: application
path: ./infra/application
provider: terraform
A beépített, nem Bicep-szolgáltatók (Terraform, Pulumi, ARM és a tesztszolgáltató) nem átláthatók a függőségkövetkeztetés számára, mert azd nem tudja elemezni a bemeneteiket, hogy talál-e bennük más rétegekre mutató hivatkozásokat. Használjon explicit dependsOn tulajdonságot, amikor e rétegek közötti, illetve e rétegek és más rétegek közötti sorrend számít:
name: my-app
infra:
layers:
- name: networking
path: ./infra/networking
provider: bicep
- name: application
path: ./infra/application
provider: terraform
dependsOn:
- networking
Megfontolások és korlátok
- Az összes réteg
azdkiépítésekor a függőségeik alapján egyenként dolgozza fel őket. A Bicep-rétegek és az egyéni vagy bővítményszolgáltatók esetében aazda környezeti változókra és a rétegkimenetekre mutató hivatkozásokból következteti ki a függőségeket a*.parameters.jsonés*.bicepparamfájlokban. A kikövetkezett vagy deklarált függőségek nélküli rétegek a megadott sorrendben futnak. - A beépített, nem Bicep-alapú szolgáltatók (Terraform, Pulumi, ARM és a tesztszolgáltató) nem átláthatók a függőségek kikövetkeztetése szempontjából. Használjon explicit
dependsOntulajdonságot, ha fontos az ezen rétegeket érintő sorrend. - Az explicit
dependsOnhasználata akkor is szükséges, amikor a sorrend számít, de aazdnem tudja kikövetkeztetni a függőséget a paraméterhivatkozásokból. Használja például adependsOnelemet, amikor az egyik rétegpostprovisionhookja olyan értéket állít elő, amelyet egy másik réteg használ, mert a hook által előállított értékek nem jelennek meg kimeneti hivatkozásként a*.parameters.jsonvagy*.bicepparamfájlokban. - Ha az összes réteget lebontja,
azdazokat a kiépítési sorrend fordítottja szerint dolgozza fel.- Ha több réteg helyez üzembe erőforrásokat ugyanabban az Azure-erőforráscsoportban, és az alapértelmezett erőforráscsoport-alapú törlési viselkedést használja, előfordulhat, hogy a megosztott erőforrások törlődnek az azd lefutásakor.
- A rétegzett infrastruktúra önálló nyomon követésének és törlésének lehetővé tételéhez engedélyezze a telepítési vermeket a(z)
azd config set alpha.deployment.stacks onparancs futtatásával.
- Több réteg egyszerre történő kiépítésekor nem használhatja a
--previewjelölőt. Adjon meg egy<layer>nevet az előnézeti mód használatához. - A rétegek az IaC szempontjából egymástól függetlenül működnek. Ha egy másik réteg egyik rétegének kimenetére szeretne hivatkozni, használjon környezeti változókat, amelyek
azdaz egyes rétegek üzembe helyezése után állíthatók be. Ha ezekre a környezeti változókra egy*.bicepparamvagyazdfájlból hivatkozik, az lehetővé teszi, hogy a*.parameters.jsonkövetkeztessen a rétegek közötti sorrendre. - Minden standard
azdkiépítési funkció (üzembehelyezési állapot gyorsítótárazása, horgok, paraméterek, Bicep vagy Terraform) az egyes rétegeken belül működik.- A parancsszintű horgokat (például
preprovision,postprovision) rétegenként egyszer hívjuk meg. Ha több réteg van definiálva, a horgok minden rétegnél a rétegek feldolgozási sorrendjében futnak.
- A parancsszintű horgokat (például