Wdrożenia grup zasobów z szablonami usługi ARM

W tym artykule opisano sposób rozmieszczenia wdrożenia w grupie zasobów. Do wdrożenia jest używany szablon usługi Azure Resource Manager (szablon usługi ARM). W artykule pokazano również, jak rozszerzyć zakres poza grupę zasobów w operacji wdrażania.

Porada

Zalecamy Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza w użyciu. Aby dowiedzieć się więcej, zobacz wdrożenia grup zasobów.

Obsługiwane zasoby

Większość zasobów można wdrożyć w grupie zasobów. Aby uzyskać listę dostępnych zasobów, zobacz Dokumentacja szablonu usługi ARM.

Schemat

W przypadku szablonów użyj następującego schematu:

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

W przypadku plików parametrów użyj:

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

Polecenia wdrażania

Aby wdrożyć w grupie zasobów, użyj poleceń wdrażania grupy zasobów.

W przypadku interfejsu wiersza polecenia platformy Azure użyj polecenia az deployment group create. Poniższy przykład wdraża szablon w celu utworzenia grupy zasobów. Grupa zasobów określona w parametrze --resource-group jest docelową grupą zasobów.

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

Aby uzyskać bardziej szczegółowe informacje na temat poleceń wdrażania i opcji wdrażania szablonów usługi ARM, zobacz:

Zakresy wdrażania

Podczas wdrażania w grupie zasobów można wdrożyć zasoby w programie :

  • docelowa grupa zasobów z operacji
  • inne grupy zasobów w tej samej subskrypcji lub innych subskrypcjach
  • dowolna subskrypcja w dzierżawie
  • dzierżawa grupy zasobów

Zasób rozszerzenia można ograniczyć do obiektu docelowego, który różni się od docelowego wdrożenia.

Użytkownik wdrażający szablon musi mieć dostęp do określonego zakresu.

W tej sekcji przedstawiono sposób określania różnych zakresów. Możesz połączyć te różne zakresy w jednym szablonie.

Zakres do docelowej grupy zasobów

Aby wdrożyć zasoby w zasobie docelowym, dodaj te zasoby do sekcji zasobów szablonu.

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

Przykładowy szablon można znaleźć w temacie Deploy to target resource group (Wdrażanie w docelowej grupie zasobów).

Zakres do grupy zasobów w tej samej subskrypcji

Aby wdrożyć zasoby w innej grupie zasobów w tej samej subskrypcji, dodaj wdrożenie zagnieżdżone i dołącz resourceGroup właściwość . Jeśli nie określisz identyfikatora subskrypcji lub grupy zasobów, zostanie użyta subskrypcja i grupa zasobów z szablonu nadrzędnego. Wszystkie grupy zasobów muszą istnieć przed uruchomieniem wdrożenia.

W poniższym przykładzie zagnieżdżone wdrożenie jest przeznaczone dla grupy zasobów o nazwie 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": {}
}

Przykładowy szablon można znaleźć w temacie Deploy to multiple resource groups (Wdrażanie w wielu grupach zasobów).

Zakres do grupy zasobów w innej subskrypcji

Aby wdrożyć zasoby w grupie zasobów w innej subskrypcji, dodaj wdrożenie zagnieżdżone i dołącz subscriptionId właściwości i resourceGroup . W poniższym przykładzie zagnieżdżone wdrożenie jest przeznaczone dla grupy zasobów o nazwie 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": {}
}

Przykładowy szablon można znaleźć w temacie Deploy to multiple resource groups (Wdrażanie w wielu grupach zasobów).

Zakres do subskrypcji

Aby wdrożyć zasoby w subskrypcji, dodaj wdrożenie zagnieżdżone i dołącz subscriptionId właściwość . Subskrypcja może być subskrypcją docelowej grupy zasobów lub innej subskrypcji w dzierżawie. location Ustaw również właściwość wdrożenia zagnieżdżonego.

{
  "$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": {}
}

Aby uzyskać przykładowy szablon, zobacz Tworzenie grupy zasobów.

Zakres do dzierżawy

Aby utworzyć zasoby w dzierżawie, ustaw wartość scope/. Użytkownik wdrażający szablon musi mieć wymagany dostęp do wdrożenia w dzierżawie.

Aby użyć wdrożenia zagnieżdżonego, ustaw scope i 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": {}
}

Możesz też ustawić / zakres dla niektórych typów zasobów, takich jak grupy zarządzania.

{
  "$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')]"
    }
  }
}

Aby uzyskać więcej informacji, zobacz Grupa zarządzania.

Wdrażanie w docelowej grupie zasobów

Aby wdrożyć zasoby w docelowej grupie zasobów, zdefiniuj te zasoby w resources sekcji szablonu. Poniższy szablon tworzy konto magazynu w grupie zasobów określonej w operacji wdrażania.

{
  "$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]"
    }
  }
}

Wdrażanie w wielu grupach zasobów

Można wdrożyć w więcej niż jednej grupie zasobów w jednym szablonie usługi ARM. Aby zastosować grupę zasobów inną niż dla szablonu nadrzędnego, użyj szablonu zagnieżdżonego lub połączonego. W ramach typu zasobu wdrożenia określ wartości identyfikatora subskrypcji i grupy zasobów, do której ma zostać wdrożony szablon zagnieżdżony. Grupy zasobów mogą istnieć w różnych subskrypcjach.

Uwaga

Można wdrożyć w 800 grupach zasobów w jednym wdrożeniu. Zazwyczaj to ograniczenie oznacza, że można wdrożyć w jednej grupie zasobów określonej dla szablonu nadrzędnego i maksymalnie 799 grup zasobów w wdrożeniach zagnieżdżonych lub połączonych. Jeśli jednak szablon nadrzędny zawiera tylko zagnieżdżone lub połączone szablony i nie wdraża żadnych zasobów, możesz uwzględnić maksymalnie 800 grup zasobów w zagnieżdżonych lub połączonych wdrożeniach.

W poniższym przykładzie wdrożono dwa konta magazynu. Pierwsze konto magazynu jest wdrażane w grupie zasobów określonej w operacji wdrażania. Drugie konto magazynu jest wdrażane w grupie zasobów określonej w secondResourceGroup parametrach i 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": {}
      }
    }
  ]
}

Jeśli ustawisz resourceGroup nazwę grupy zasobów, która nie istnieje, wdrożenie zakończy się niepowodzeniem.

Aby przetestować poprzedni szablon i wyświetlić wyniki, użyj programu PowerShell lub interfejsu wiersza polecenia platformy Azure.

Aby wdrożyć dwa konta magazynu w dwóch grupach zasobów w tej samej subskrypcji, użyj:

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

Aby wdrożyć dwa konta magazynu w dwóch subskrypcjach, użyj:

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

Tworzenie grupy zasobów

W ramach wdrożenia grupy zasobów można przełączyć się na poziom subskrypcji i utworzyć grupę zasobów. Poniższy szablon wdraża konto magazynu w docelowej grupie zasobów i tworzy nową grupę zasobów w określonej subskrypcji.

{
  "$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": {}
        }
      }
    }
  ]
}

Następne kroki