Distributioner av resursgrupper med ARM-mallar

I den här artikeln beskrivs hur du kan begränsa distributionen till en resursgrupp. Du använder en Azure Resource Manager mall (ARM-mall) för distributionen. Artikeln visar också hur du utökar omfånget utöver resursgruppen i distributionsåtgärden.

Resurser som stöds

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

Schema

För mallar använder du följande schema:

{
  "$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 resursgruppens distributionskommandon.

För Azure CLI använder du az deployment group create. I följande exempel distribueras en mall för att skapa en resursgrupp:

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 att distribuera 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

En tilläggsresurs kan vara begränsad till ett mål som skiljer sig från distributionsmålet.

Den användare 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 resurserna i avsnittet resurser 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ålresursgruppen.

Omfång till 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:t eller resursgruppen används prenumerationen och resursgruppen från den överordnade mallen. Alla resursgrupper måste finnas innan du kör distributionen.

I följande exempel är den kapslade distributionen inriktad på 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 till 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 resourceGroup egenskaperna och . I följande exempel är den kapslade distributionen inriktad på 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 till 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 till klientorganisation

Om du vill skapa resurser i klientorganisationen anger du scope till / . Den användare som distribuerar mallen måste ha nödvändig åtkomst för att distribuera på 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 resurserna resources i 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-04-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 fler än en resursgrupp i en enda ARM-mall. Om du vill rikta en resursgrupp som skiljer sig från den överordnade mallen använder du en kapslad eller länkad mall. I distributionsresurstypen anger du värden för prenumerations-ID:t och resursgruppen som du vill att den kapslade mallen ska distribueras till. Resursgrupperna kan finnas i olika prenumerationer.

Anteckning

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 anges 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 resursgruppen som anges i distributionsåtgärden. Det andra lagringskontot distribueras till resursgruppen som anges i secondResourceGroup secondSubscriptionID parametrarna och :

{
  "$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 resourceGroup anger namnet på en resursgrupp som inte finns misslyckas distributionen.

Om du vill testa föregående mall och se resultatet 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 nivån för en prenumeration 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