عمليات توزيع مجموعة الموارد مع قوالب ARM

توضح هذه المقالة كيفية نطاق التوزيع الخاص بك إلى مجموعة موارد. يمكنك استخدام قالب إدارة موارد Azure (قالب ARM) للنشر. توضح المقالة أيضا كيفية توسيع النطاق خارج مجموعة الموارد في عملية النشر.

تلميح

نوصي باستخدام Bicep لأنها تقدم نفس الإمكانات التي توفرها قوالب ARM ولأن بناء الجملة أسهل في الاستخدام. لمعرفة المزيد، راجع عمليات توزيع مجموعة الموارد.

الموارد المدعومة

يمكن نشر معظم الموارد إلى مجموعة موارد. للحصول على قائمة بالموارد المتوفرة، راجع مرجع قالب مدير ARM.

المخطط

بالنسبة للقوالب، استخدم المخطط التالي:

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

بالنسبة لملفات المعلمات، استخدم:

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

أوامر التوزيع

لنشر إلى مجموعة موارد، استخدم أوامر توزيع مجموعة الموارد.

بالنسبة لـنظام Azure CLI، استخدم الأمر إنشاء مجموعة نشر في az. ينشر المثال التالي قالب لإنشاء مجموعة موارد. مجموعة الموارد التي تحددها في --resource-groupالمعلمة هي مجموعة الموارد المستهدفة.

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

للحصول على مزيد من المعلومات التفصيلية حول أوامر النشر وخيارات نشر قوالب ARM، راجع:

نطاقات التوزيع

عند النشر إلى مجموعة موارد، يمكنك نشر الموارد إلى:

  • مجموعة الموارد المستهدفة من العملية
  • مجموعات موارد أخرى في نفس الاشتراك أو الاشتراكات الأخرى
  • أي اشتراك في المستأجر
  • المستأجر لمجموعة الموارد

يمكن تحديد نطاق مورد ملحق لهدف مختلف عن هدف النشر.

يجب أن يكون لدى المستخدم الذي يقوم بتوزيع القالب حق الوصول إلى النطاق المحدد.

يوضح هذا القسم كيفية تحديد النطاقات المختلفة. يمكنك دمج هذه النطاقات المختلفة في قالب واحد.

نطاق لاستهداف مجموعة الموارد

لنشر الموارد إلى المورد الهدف، أضف هذه الموارد إلى قسم الموارد في القالب.

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

للحصول على قالب توضيحي، راجع التوزيع لمجموعة موارد الهدف.

نطاق إلى مجموعة موارد في نفس الاشتراك

لنشر الموارد إلى مجموعة موارد مختلفة في نفس الاشتراك، قم بإضافة نشر متداخلة وتضمين resourceGroup الخاصية. إذا لم تحدد معرف الاشتراك أو مجموعة الموارد، يتم استخدام مجموعة الموارد والاشتراك من القالب الأصل. يجب أن توجد كافة مجموعات الموارد قبل تشغيل النشر.

في المثال التالي، يستهدف النشر المتداخل مجموعة موارد تسمى 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": {}
}

للحصول على قالب توضيحي، راجع التوزيع لمجموعة موارد الهدف.

نطاق إلى مجموعة موارد في اشتراك مختلف

لنشر الموارد إلى مجموعة موارد في اشتراك مختلف، قم بإضافة نشر متداخلة وتضمين subscriptionIdوresourceGroup الخصائص. في المثال التالي، يستهدف النشر المتداخل مجموعة موارد تسمى 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": {}
}

للحصول على قالب توضيحي، راجع التوزيع لمجموعة موارد الهدف.

نطاق الاشتراك

لنشر الموارد إلى مجموعة موارد مختلفة في نفس الاشتراك، قم بإضافة نشر متداخلة وتضمين subscriptionId الخاصية. يمكن أن يكون الاشتراك هو الاشتراك لمجموعة الموارد المستهدفة، أو أي اشتراك آخر في المستأجر. أيضا، تعيين 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",
      "subscriptionId": "0000000-0000-0000-0000-000000000000",
      "properties": {
        "mode": "Incremental",
        "template": {
          subscription-resources
        }
      }
    }
  ],
  "outputs": {}
}

للحصول على قالب توضيحي، راجع إنشاء مجموعة الموارد.

نطاق للمستأجر

لإنشاء موارد في المستأجر، قم بتعيين scope إلى /. يجب أن يكون لدى المستخدم الذي يقوم بنشر القالب حق الوصول المطلوب للنشر لدى المستأجر.

لاستخدام نشر متداخل، قم بتعيين scope و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": {}
}

بدلاً من استخدام وحدة نمطية، يمكنك تعيين النطاق / لبعض أنواع الموارد.

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

للمزيد من المعلومات، راجع مجموعة الإدارة.

النشر إلى مجموعة الموارد المستهدفة

لتوزيع الموارد في مجموعة الموارد الهدف، حدد هذه الموارد في قسمresources القالب. يقوم القالب التالي بإنشاء حساب تخزين في مجموعة الموارد المحددة في عملية النشر.

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

النشر إلى مجموعات موارد متعددة

يمكنك النشر إلى أكثر من مجموعة موارد في قالب ARM واحد. لاستهداف مجموعة موارد مختلفة عن مجموعة القالب الأصل، استخدم قالبا متداخلا أو مرتبطا. ضمن نوع مورد التوزيع، حدد قيم معرف الاشتراك ومجموعة الموارد التي تريد نشر القالب المتداخل لها. يمكن أن توجد مجموعات الموارد في اشتراكات مختلفة.

ملاحظة

يمكنك التوزيع إلى 800 مجموعة من مجموعات الموارد في توزيع واحد. عادة، يعني هذا القيد يمكنك نشر إلى مجموعة موارد واحدة محددة للقالب الأصل، وما يصل إلى 799 مجموعات الموارد في النشرات المتداخلة أو المرتبطة. ومع ذلك، إذا كان القالب الأصل يحتوي على قوالب متداخلة أو مرتبطة فقط ولم ينشر أي موارد، فيمكنك تضمين ما يصل إلى 800 مجموعة موارد في عمليات النشر المتداخلة أو المرتبطة.

المثال التالي بنشر حسابات التخزين اثنين. يتم نشر حساب التخزين الأول إلى مجموعة الموارد المحددة في عملية النشر. يوزع حساب التخزين الثاني إلى مجموعة الموارد المحددة فيsecondResourceGroupو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": {}
      }
    }
  ]
}

إذا قمت بتعيين resourceGroup إلى اسم مجموعة موارد غير موجودة، يفشل النشر.

لاختبار القالب السابق ورؤية النتائج، استخدم PowerShell أو Azure CLI.

لنشر حسابين تخزين إلى مجموعتي موارد في نفس الاشتراك، استخدم:

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

لنشر حسابين تخزين إلى اشتراكين، استخدم:

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

إنشاء مجموعة الموارد

من توزيع مجموعة موارد، يمكنك التبديل إلى مستوى الاشتراك وإنشاء مجموعة موارد. يقوم القالب التالي بنشر حساب تخزين إلى مجموعة الموارد الهدف، كما ينشئ مجموعة موارد جديدة في الاشتراك المحدد.

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

الخطوات التالية