Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure Developer CLI (azd) har stöd för lageretablering, som du kan använda för att definiera flera etableringslager i azure.yaml filen. Varje lager pekar på en egen uppsättning IaC-mallar (Infrastruktur som kod). CLI etablerar lager sekventiellt i den ordning du definierar dem. Du kan också etablera eller ta bort enskilda lager oberoende.
Den här funktionen löser komplexa beroendescenarier där resurser i ett lager är beroende av resurser från ett annat lager. I stället för att blanda IaC med imperativa hook-skript håller lagerbaserad etablering allt deklarativt.
Anmärkning
Layered-etablering är för närvarande en betafunktion. Läs mer om versionsstrategin.
När du ska använda skiktad provisioning
Använd lagerbaserad provisionering när en enskild azd provision distribution inte kan hantera alla era infrastrukturbehov i ett steg. Överväg att använda skiktad resurstilldelning när:
- Cirkulära beroenden: Vissa resurser måste referera till andra resurser som måste skapas först, till exempel ett virtuellt nätverk som måste finnas innan en privat slutpunkt kan konfigureras.
- Grundläggande infrastruktur skiljer sig från programinfrastruktur: Du hanterar delade nätverks-, säkerhets- eller identitetsresurser separat från resurser per program.
- Oberoende livscykelhantering krävs: Du uppdaterar och river olika infrastrukturkomponenter vid olika tidpunkter. Ett nätverkslager kan till exempel vara långvarigt, medan ett programlager distribueras om ofta.
- Monorepoprojekt med distinkta infrastrukturgrupper: En enskild lagringsplats innehåller flera oberoende tjänster (till exempel en händelsehubb, en containerapp och en funktionsapp), var och en med sina egna infrastrukturmallar.
Konfigurera lager i azure.yaml
Definiera lager under avsnittet infra i azure.yaml filen. Varje lager kräver en name och en path som pekar på katalogen som innehåller IaC-mallarna för det lagret.
name: my-app
infra:
layers:
- name: networking
path: ./infra/networking
- name: application
path: ./infra/application
services:
api:
project: ./src/api
language: js
host: containerapp
Viktigt!
Lagerbearbetningsordning:azd provision bearbetar lager uppifrån och ned i den ordning de visas i azure.yaml.
azd down bearbetar lager i omvänd ordning (nedifrån och upp). Definiera dina lager så att grundläggande resurser visas först, följt av lager som är beroende av dem. Den här ordningen säkerställer att du skapar beroenden före de resurser som behöver dem och tar bort beroenden efter dessa resurser.
Lageregenskaper
Varje lager har stöd för följande egenskaper:
| Fastighet | Krävs | Description |
|---|---|---|
name |
Ja | Ett unikt namn för lagret. Använd det här namnet när du riktar in dig på ett visst lager med kommandon. |
path |
Ja | Den relativa sökvägen till katalogen som innehåller IaC-mallarna för det här lagret. |
module |
Nej. | Namnet på modulen i lagrets katalog. Standardinställningen är main. |
provider |
Nej. | IaC-providern för det här lagret (bicep eller terraform). Ärver från roten infra.provider om du inte anger den. |
Viktigt!
När du definierar infra.layerskan du inte deklarera andra egenskaper i infra avsnittet (path, module, deploymentStacks) på rotnivå. Du måste ange all infrastrukturkonfiguration inom varje lager.
Katalogstruktur
Ett typiskt projekt med lageretablering kan ha följande katalogstruktur:
my-app/
├── azure.yaml
├── infra/
│ ├── networking/
│ │ └── main.bicep
│ └── application/
│ └── main.bicep
└── src/
└── api/
└── ...
Varje lagerkatalog innehåller en egen komplett uppsättning IaC-mallar, precis som en standardprojektkatalog azdinfra skulle göra.
Etablera och hantera lager
Du kan etablera alla lager samtidigt eller rikta in dig på ett visst lager efter namn. I följande avsnitt beskrivs vanliga kommandon för provisionering, borttagning och uppdatering av lagertillstånd.
Provisionera alla lager
Kör azd provision utan argument för att etablera alla lager sekventiellt i den ordning de definieras i azure.yaml:
azd provision
azd bearbetar varje lager ett i taget, vilket säkerställer att det första lagret slutförs innan det andra lagret börjar. Den här processen garanterar att beroende resurser finns innan lager som refererar till dem distribueras.
Etablera ett specifikt lager
Om du bara vill etablera ett visst lager skickar du lagernamnet som ett argument:
azd provision networking
Det här kommandot distribuerar endast de resurser som definierats i networking lagret. Det är användbart att etablera ett visst lager när:
- Du itererar på ett enda lager under utvecklingen.
- Du måste uppdatera ett lager utan att distribuera om andra.
- Du konfigurerar ett nytt lager ovanpå befintlig infrastruktur.
Ta bort alla lager
Kör azd down utan argument för att ta bort resurser från alla lager. När det finns azd flera lager bearbetas de i omvänd ordning, så beroende resurser tas bort innan de grundläggande resurserna de är beroende av:
azd down
Ta ned ett visst lager
Om du bara vill ta bort ett visst lager skickar du lagernamnet som ett argument:
azd down application
Det här kommandot tar bara bort de resurser som distribueras av application lagret och lämnar de andra lagren intakta.
Uppdatera miljötillstånd
Du kan uppdatera miljöns tillstånd från en specifik nivå genom att använda --layer flaggan med azd env refresh:
azd env refresh --layer networking
Det här kommandot uppdaterar miljövariabler och utdata baserat på den senaste distributionen av det angivna lagret.
Exempel: Monorepo med flera tjänster
I följande exempel visas lageretablering för ett monorepo som innehåller en händelsehub, en containerapp som kör flera containrar, och en Azure-funktionsapp.
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}
Motsvarande katalogstruktur:
logging-app/
├── azure.yaml
├── infra/
│ ├── eventhub/
│ │ └── main.bicep
│ ├── aca/
│ │ └── main.bicep
│ └── functionapp/
│ └── main.bicep
└── src/
└── function/
└── functionapp.csproj
Med den här konfigurationen kan du:
- Etablera endast Event Hub-infrastrukturen:
azd provision eventhub - Etablera endast containerappens infrastruktur:
azd provision aca - Konfigurera allt i ordning:
azd provision - Ta bara ned funktionsapplagret:
azd down functionapp
Exempel: Bas- och programlager
Ett vanligt mönster separerar delad eller grundläggande infrastruktur från infrastruktur per program:
name: my-app
infra:
layers:
- name: base
path: ./infra/base
- name: app
path: ./infra/app
services:
web:
project: ./src/web
language: js
host: containerapp
Lagret base skapar delade resurser som nätverk, identitet och övervakning. Lagret app skapar de programspecifika resurserna (till exempel en Container App-miljö och containerappar) som refererar till basresurserna.
Under utvecklingen kan du etablera basskiktet en gång och iterera på programskiktet:
azd provision base
azd provision app
azd provision app # re-provision only the app layer after changes
Exempel: Blandade IaC-leverantörer
Varje lager kan använda en annan IaC-provider. Du kan till exempel använda Bicep för nätverk och Terraform för programskiktet:
name: my-app
infra:
layers:
- name: networking
path: ./infra/networking
provider: bicep
- name: application
path: ./infra/application
provider: terraform
Överväganden och begränsningar
- När du etablerar alla lager
azdbearbetar du dem sekventiellt i den ordning du definierar. Planera ordningen av lager så att grundläggande resurser får provisioneras först. - När alla lager rivs, bearbetar
azddem i omvänd ordning.- Om flera lager distribuerar resurser till samma Azure-resursgrupp och du använder standardbeteendet för resursgruppbaserad borttagning kan delade resurser tas bort när du kör azd down.
- Om du vill tillåta oberoende spårning och borttagning av lagerinfrastruktur aktiverar du distributionsstackar med kommandot
azd config set alpha.deployment.stacks onDistributionsstackar så att azd kan spåra resurser per lager i stället för att enbart förlita sig på borttagning av resursgrupper.
- Du kan inte använda
--previewflaggan när du etablerar flera lager samtidigt. Ange ett<layer>namn som ska användas i förhandsgranskningsläge. - Lager fungerar oberoende av varandra när det gäller IaC. Om du vill referera till utdata från ett lager i ett annat lager använder du miljövariabler som
azdställs in efter varje lagers distribution. - Alla standardetableringsfunktioner
azd(cachelagring av distributionstillstånd, krokar, parametrar, Bicep eller Terraform) fungerar inom varje enskilt lager.- Kommandonivåkrokar (till exempel
preprovision,postprovision) anropas en gång per lager. När flera lager definieras, körs krokar för varje lager i den ordning som lagren bearbetas.
- Kommandonivåkrokar (till exempel