Distributionslägen för Azure Resource Manager

När du distribuerar dina resurser anger du att distributionen antingen är en inkrementell uppdatering eller en fullständig uppdatering. Skillnaden mellan dessa två lägen är hur Resource Manager hanterar befintliga resurser i resursgruppen som inte finns i mallen.

För båda lägena försöker Resource Manager skapa alla resurser som anges i mallen. Om resursen redan finns i resursgruppen och dess inställningar är oförändrade vidtas ingen åtgärd för den resursen. Om du ändrar egenskapsvärdena för en resurs uppdateras resursen med de nya värdena. Om du försöker uppdatera platsen eller typen av en befintlig resurs misslyckas distributionen med ett fel. Distribuera i stället en ny resurs med den plats eller typ som du behöver.

Standardläget är inkrementellt.

Fullständigt läge

I fullständigt läge tar Resource Manager bort resurser som finns i resursgruppen men som inte anges i mallen.

Anteckning

Använd alltid konsekvensåtgärden innan du distribuerar en mall i fullständigt läge. What-if visar vilka resurser som ska skapas, tas bort eller ändras. Använd konsekvens för att undvika oavsiktlig borttagning av resurser.

Om mallen innehåller en resurs som inte distribueras eftersom villkoret utvärderas till falskt beror resultatet på vilken REST API-version du använder för att distribuera mallen. Om du använder en tidigare version än 2019-05-10 tas inte resursen bort. Med 2019-05-10 eller senare tas resursen bort. De senaste versionerna av Azure PowerShell och Azure CLI tar bort resursen.

Var försiktig med att använda fullständigt läge med kopieringsloopar. Alla resurser som inte anges i mallen när du har löst kopieringsloopen tas bort.

Om du distribuerar till mer än en resursgrupp i en mall kan resurser i resursgruppen som anges i distributionsåtgärden tas bort. Resurser i de sekundära resursgrupperna tas inte bort.

Det finns vissa skillnader i hur resurstyper hanterar fullständig borttagning av lägen. Överordnade resurser tas bort automatiskt när de inte finns i en mall som distribueras i fullständigt läge. Vissa underordnade resurser tas inte bort automatiskt när de inte finns i mallen. Dessa underordnade resurser tas dock bort om den överordnade resursen tas bort.

Om din resursgrupp till exempel innehåller en DNS-zon (Microsoft.Network/dnsZones resurstyp) och en CNAME-post (Microsoft.Network/dnsZones/CNAME resurstyp) är DNS-zonen den överordnade resursen för CNAME-posten. Om du distribuerar med fullständigt läge och inte inkluderar DNS-zonen i mallen tas både DNS-zonen och CNAME-posten bort. Om du inkluderar DNS-zonen i mallen men inte inkluderar CNAME-posten tas inte CNAME bort.

En lista över hur resurstyper hanterar borttagning finns i Ta bort Azure-resurser för distributioner i fullständigt läge.

Om resursgruppen är låst tas inte resurserna bort i fullständigt läge.

Anteckning

Endast mallar på rotnivå stöder fullständigt distributionsläge. För länkade eller kapslade mallar måste du använda inkrementellt läge.

Distributioner på prenumerationsnivå stöder inte fullständigt läge.

Portalen stöder för närvarande inte fullständigt läge.

Inkrementellt läge

I inkrementellt läge lämnar Resource Manager oförändrade resurser som finns i resursgruppen men som inte anges i mallen. Resurser i mallen läggs till i resursgruppen.

Viktigt

När du omdistribuerar en befintlig resurs i inkrementellt läge tillämpas alla egenskaper igen. Egenskaperna läggs inte till stegvis. Ett vanligt missförstånd är att tro att egenskaper som inte anges i mallen lämnas oförändrade. Om du inte anger vissa egenskaper tolkar Resource Manager distributionen som att skriva över dessa värden. Egenskaper som inte ingår i mallen återställs till standardvärdena. Ange alla värden som inte är standard för resursen, inte bara de som du uppdaterar. Resursdefinitionen i mallen innehåller alltid resursens slutliga tillstånd. Det kan inte representera en partiell uppdatering av en befintlig resurs.

Varning

I sällsynta fall kan du ange egenskaper antingen för en resurs eller på någon av dess underordnade resurser. Två vanliga exempel är undernät i virtuella nätverk och platskonfigurationsvärden för webbappar. I dessa fall måste du hantera inkrementella uppdateringar noggrant.

För undernät anger du värdena via subnets egenskapen på resursen Microsoft.Network/virtualNetworks . Definiera inte värdena via den underordnade resursen Microsoft.Network/virtualNetworks/undernät. Så länge undernäten definieras i det virtuella nätverket kan du distribuera om det virtuella nätverket och inte förlora undernäten.

För platskonfigurationsvärden implementeras värdena i den underordnade resurstypen Microsoft.Web/sites/config. Om du distribuerar om webbappen och anger ett tomt objekt för platskonfigurationsvärdena uppdateras inte den underordnade resursen. Men om du anger nya platskonfigurationsvärden uppdateras den underordnade resurstypen.

Exempelresultat

Tänk på följande scenario för att illustrera skillnaden mellan inkrementella och fullständiga lägen.

Resursgruppen innehåller:

  • Resurs A
  • Resurs B
  • Resurs C

Mallen innehåller:

  • Resurs A
  • Resurs B
  • Resurs D

När resursgruppen distribueras i inkrementellt läge har den:

  • Resurs A
  • Resurs B
  • Resurs C
  • Resurs D

När resurs C distribueras i fullständigt läge tas den bort. Resursgruppen har:

  • Resurs A
  • Resurs B
  • Resurs D

Ange distributionsläge

Om du vill ange distributionsläget när du distribuerar med PowerShell använder du parametern Mode .

New-AzResourceGroupDeployment `
  -Mode Complete `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json

Om du vill ange distributionsläget när du distribuerar med Azure CLI använder du parametern mode .

az deployment group create \
  --mode Complete \
  --name ExampleDeployment \
  --resource-group ExampleResourceGroup \
  --template-file storage.json

I följande exempel visas en länkad mall inställd på inkrementellt distributionsläge:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2020-10-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
          <nested-template-or-external-template>
    }
  }
]

Nästa steg