Lageretablering

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:

  1. Etablera endast Event Hub-infrastrukturen: azd provision eventhub
  2. Etablera endast containerappens infrastruktur: azd provision aca
  3. Konfigurera allt i ordning: azd provision
  4. 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 azd bearbetar 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 azd dem 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 on Distributionsstackar 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 --preview flaggan 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 azd stä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.

Nästa steg