Resursgruppsdistributioner med ARM-mallar

Den här artikeln beskriver hur du omfångsbegränsar distributionen till en resursgrupp. Du använder en Azure Resource Manager-mall (ARM-mall) för distributionen. Artikeln visar också hur du expanderar omfånget bortom resursgruppen i distributionsåtgärden.

Dricks

Vi rekommenderar Bicep eftersom det erbjuder samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i distributioner av resursgrupper.

Resurser som stöds

De flesta resurser kan distribueras till en resursgrupp. En lista över tillgängliga resurser finns i ARM-mallreferens.

Schema

Använd följande schema för mallar:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  ...
}

För parameterfiler använder du:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  ...
}

Distributionskommandon

Om du vill distribuera till en resursgrupp använder du distributionskommandona för resursgrupper.

För Azure CLI använder du az deployment group create. I följande exempel distribueras en mall för att skapa en resursgrupp. Den resursgrupp som du anger i parametern --resource-group är målresursgruppen.

az deployment group create \
  --name demoRGDeployment \
  --resource-group ExampleGroup \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
  --parameters storageAccountType=Standard_GRS

Mer detaljerad information om distributionskommandon och alternativ för distribution av ARM-mallar finns i:

Distributionsomfång

När du distribuerar till en resursgrupp kan du distribuera resurser till:

  • målresursgruppen från åtgärden
  • andra resursgrupper i samma prenumeration eller andra prenumerationer
  • valfri prenumeration i klientorganisationen
  • klientorganisationen för resursgruppen

De enda förbjudna omfångsövergångarna sker från resursgrupp till hanteringsgrupp eller från prenumeration till hanteringsgrupp.

En tilläggsresurs kan begränsas till ett annat mål än distributionsmålet.

Användaren som distribuerar mallen måste ha åtkomst till det angivna omfånget.

Det här avsnittet visar hur du anger olika omfång. Du kan kombinera dessa olika omfång i en enda mall.

Omfång till målresursgrupp

Om du vill distribuera resurser till målresursen lägger du till dessa resurser i resursavsnittet i mallen.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    resource-group-resources
  ],
  "outputs": {}
}

En exempelmall finns i Distribuera till målresursgrupp.

Omfång för resursgrupp i samma prenumeration

Om du vill distribuera resurser till en annan resursgrupp i samma prenumeration lägger du till en kapslad distribution och inkluderar resourceGroup egenskapen . Om du inte anger prenumerations-ID eller resursgrupp används prenumerationen och resursgruppen från den överordnade mallen. Alla resursgrupper måste finnas innan distributionen körs.

I följande exempel riktar sig den kapslade distributionen till en resursgrupp med namnet demoResourceGroup.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedDeployment",
      "resourceGroup": "demoResourceGroup",
      "properties": {
        "mode": "Incremental",
        "template": {
          resource-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

En exempelmall finns i Distribuera till flera resursgrupper.

Omfång för resursgrupp i en annan prenumeration

Om du vill distribuera resurser till en resursgrupp i en annan prenumeration lägger du till en kapslad distribution och inkluderar subscriptionId egenskaperna och resourceGroup . I följande exempel riktar sig den kapslade distributionen till en resursgrupp med namnet demoResourceGroup.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedDeployment",
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "resourceGroup": "demoResourceGroup",
      "properties": {
        "mode": "Incremental",
        "template": {
          resource-group-resources
        }
      }
    }
  ],
  "outputs": {}
}

En exempelmall finns i Distribuera till flera resursgrupper.

Omfång för prenumeration

Om du vill distribuera resurser till en prenumeration lägger du till en kapslad distribution och inkluderar subscriptionId egenskapen . Prenumerationen kan vara prenumerationen för målresursgruppen eller någon annan prenumeration i klientorganisationen. Ange även egenskapen location för den kapslade distributionen.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedDeployment",
      "location": "centralus",
      "subscriptionId": "0000000-0000-0000-0000-000000000000",
      "properties": {
        "mode": "Incremental",
        "template": {
          subscription-resources
        }
      }
    }
  ],
  "outputs": {}
}

En exempelmall finns i Skapa resursgrupp.

Omfång för klientorganisation

Om du vill skapa resurser i klientorganisationen anger du scope till /. Användaren som distribuerar mallen måste ha den åtkomst som krävs för att distribuera i klientorganisationen.

Om du vill använda en kapslad distribution anger du scope och location.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedDeployment",
      "location": "centralus",
      "scope": "/",
      "properties": {
        "mode": "Incremental",
        "template": {
          tenant-resources
        }
      }
    }
  ],
  "outputs": {}
}

Eller så kan du ange omfånget till för vissa resurstyper, till / exempel hanteringsgrupper.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string",
      "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Management/managementGroups",
      "apiVersion": "2021-04-01",
      "name": "[parameters('mgName')]",
      "scope": "/",
      "location": "eastus",
      "properties": {}
    }
  ],
  "outputs": {
    "output": {
      "type": "string",
      "value": "[parameters('mgName')]"
    }
  }
}

Mer information finns i Hanteringsgrupp.

Distribuera till målresursgrupp

Om du vill distribuera resurser i målresursgruppen definierar du dessa resurser i resources avsnittet i mallen. Följande mall skapar ett lagringskonto i resursgruppen som anges i distributionsåtgärden.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

Distribuera till flera resursgrupper

Du kan distribuera till mer än en resursgrupp i en enda ARM-mall. Om du vill rikta in dig på en resursgrupp som skiljer sig från den för den överordnade mallen använder du en kapslad eller länkad mall. I resurstypen distribution anger du värden för prenumerations-ID och resursgrupp som du vill att den kapslade mallen ska distribueras till. Resursgrupperna kan finnas i olika prenumerationer.

Kommentar

Du kan distribuera till 800 resursgrupper i en enda distribution. Den här begränsningen innebär vanligtvis att du kan distribuera till en resursgrupp som angetts för den överordnade mallen och upp till 799 resursgrupper i kapslade eller länkade distributioner. Men om den överordnade mallen endast innehåller kapslade eller länkade mallar och inte själv distribuerar några resurser kan du inkludera upp till 800 resursgrupper i kapslade eller länkade distributioner.

I följande exempel distribueras två lagringskonton. Det första lagringskontot distribueras till den resursgrupp som anges i distributionsåtgärden. Det andra lagringskontot distribueras till resursgruppen som anges i parametrarna secondResourceGroup och secondSubscriptionID :

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "maxLength": 11
    },
    "secondResourceGroup": {
      "type": "string"
    },
    "secondSubscriptionID": {
      "type": "string",
      "defaultValue": ""
    },
    "secondStorageLocation": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "firstStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "secondStorageName": "[concat(parameters('storagePrefix'), uniqueString(parameters('secondSubscriptionID'), parameters('secondResourceGroup')))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('firstStorageName')]",
      "location": "[resourceGroup().location]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "nestedTemplate",
      "resourceGroup": "[parameters('secondResourceGroup')]",
      "subscriptionId": "[parameters('secondSubscriptionID')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "type": "Microsoft.Storage/storageAccounts",
              "apiVersion": "2021-04-01",
              "name": "[variables('secondStorageName')]",
              "location": "[parameters('secondStorageLocation')]",
              "sku": {
                "name": "Standard_LRS"
              },
              "kind": "Storage",
              "properties": {
              }
            }
          ]
        },
        "parameters": {}
      }
    }
  ]
}

Om du anger resourceGroup namnet på en resursgrupp som inte finns misslyckas distributionen.

Om du vill testa föregående mall och se resultaten använder du PowerShell eller Azure CLI.

Om du vill distribuera två lagringskonton till två resursgrupper i samma prenumeration använder du:

firstRG="primarygroup"
secondRG="secondarygroup"

az group create --name $firstRG --location southcentralus
az group create --name $secondRG --location eastus
az deployment group create \
  --name ExampleDeployment \
  --resource-group $firstRG \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
  --parameters storagePrefix=tfstorage secondResourceGroup=$secondRG secondStorageLocation=eastus

Om du vill distribuera två lagringskonton till två prenumerationer använder du:

firstRG="primarygroup"
secondRG="secondarygroup"

firstSub="<first-subscription-id>"
secondSub="<second-subscription-id>"

az account set --subscription $secondSub
az group create --name $secondRG --location eastus

az account set --subscription $firstSub
az group create --name $firstRG --location southcentralus

az deployment group create \
  --name ExampleDeployment \
  --resource-group $firstRG \
  --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/crosssubscription.json \
  --parameters storagePrefix=storage secondResourceGroup=$secondRG secondStorageLocation=eastus secondSubscriptionID=$secondSub

Skapa resursgrupp

Från en resursgruppsdistribution kan du växla till prenumerationsnivån och skapa en resursgrupp. Följande mall distribuerar ett lagringskonto till målresursgruppen och skapar en ny resursgrupp i den angivna prenumerationen.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "maxLength": 11
    },
    "newResourceGroupName": {
      "type": "string"
    },
    "nestedSubscriptionID": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "variables": {
    "storageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2021-04-01",
      "name": "demoSubDeployment",
      "location": "westus",
      "subscriptionId": "[parameters('nestedSubscriptionID')]",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {},
          "variables": {},
          "resources": [
            {
              "type": "Microsoft.Resources/resourceGroups",
              "apiVersion": "2021-04-01",
              "name": "[parameters('newResourceGroupName')]",
              "location": "[parameters('location')]",
              "properties": {}
            }
          ],
          "outputs": {}
        }
      }
    }
  ]
}

Nästa steg