تشغيل سريع: تعريف مخطط Azure وتعيينه باستخدام PowerShell

هام

في 11 يوليو 2026، سيتم إهمال المخططات (معاينة). قم بترحيل تعريفات المخططات والتعيينات الموجودة إلى مواصفات القالب وتكديسات التوزيع. سيتم تحويل البيانات الاصطناعية للمخطط إلى قوالب ARM JSON أو ملفات Bicep المستخدمة لتعريف مكدسات التوزيع. لمعرفة كيفية تأليف أداة كمورد ARM، راجع:

في هذا البرنامج التعليمي، تتعلم استخدام Azure Blueprints للقيام ببعض المهام الشائعة المتعلقة بإنشاء مخطط ونشره وتعيينه داخل مؤسستك. تساعدك هذه المهارة في تعريف الأنماط الشائعة لتطوير تكوينات قابلة لإعادة الاستخدام والتوزيع السريع، استناداً إلى الأمان والنُهج والقوالب الخاصة بـ Azure Resource Manager (ARM).

المتطلبات الأساسية

  • في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
  • إذا لم يكن مثبتاً بالفعل، فاتبع الإرشادات الموجودة في إضافة الوحدة النمطية Az.Blueprint لتثبيت الوحدة النمطية Az.Blueprint والتحقق من صحتها من معرض PowerShell.
  • إذا لم تكن قد استخدمت Azure Blueprints من قبل، فسجل موفر الموارد من خلال Azure PowerShell باستخدام Register-AzResourceProvider -ProviderNamespace Microsoft.Blueprint.

Azure Cloud Shell

Azure يستضيف Azure Cloud Shell، بيئة تفاعلية يمكن استخدامها من خلال المستعرض. يمكنك استخدام Bash أو PowerShell مع Cloud Shell للعمل مع خدمات Azure. يمكنك استخدام أوامر Cloud Shell المثبتة مسبقًا لتشغيل التعليمات البرمجية في هذه المقالة دون الحاجة إلى تثبيت أي شيء على البيئة المحلية.

لبدء Azure Cloud Shell:

خيار مثال/ رابط
انقر فوق ⁧⁩جربه⁧⁩ في الزاوية العلوية اليسرى من التعليمة البرمجية أو كتلة الأمر. تحديد ⁧⁩جربه⁧⁩ لا يقوم بنسخ التعليمة البرمجية أو الأمر تلقائيًا إلى Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
انتقل إلى ⁧⁩⁧ https://shell.azure.com⁩⁧⁩، أو حدد زر ⁩تشغيل Cloud Shell لفتح Cloud Shell في المتصفح لديك. Button to launch Azure Cloud Shell.
حدد زر Cloud Shell على شريط القوائم في أعلى اليمين في مدخل Microsoft Azure. Screenshot that shows the Cloud Shell button in the Azure portal

لاستخدام Azure Cloud Shell:

  1. ابدأ تشغيل Cloud Shell.

  2. حدد الزر نسخ على كتلة التعليمات البرمجية (أو كتلة الأوامر) لنسخ التعليمات البرمجية أو الأمر.

  3. ألصق التعليمة البرمجية أو الأمر في جلسة Cloud Shell بتحديد Ctrl+Shift+Vعلى Windows وLunix، أو بتحديد Cmd+Shift+Vعلى macOS.

  4. حدد Enter لتشغيل التعليمات البرمجية أو الأمر.

إنشاء مخطط

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

إشعار

عند استخدام PowerShell، يتم إنشاء العنصر blueprint أولاً. لكل مصطنع تتم إضافته يحتوي على معايير، يجب تحديد المعلمات مسبقاً في blueprint الأولي.

  1. إنشاء كائن المخطط الأول. تأخذ المعلمة BlueprintFile ملف JSON الذي يتضمن خصائص حول المخطط، وأي مجموعات موارد مُنشأة، وجميع معلمات مستوى المخطط. يمكنك تحديد المعايير خلال التعيين، ويتم استخدامها من قبل البيانات الاصطناعية التي تضيفها في الخطوات اللاحقة.

    • ملف JSON - blueprint.json

      {
          "properties": {
              "description": "This blueprint sets tag policy and role assignment on the subscription, creates a ResourceGroup, and deploys a resource template and role assignment to that ResourceGroup.",
              "targetScope": "subscription",
              "parameters": {
                  "storageAccountType": {
                      "type": "string",
                      "defaultValue": "Standard_LRS",
                      "allowedValues": [
                          "Standard_LRS",
                          "Standard_GRS",
                          "Standard_ZRS",
                          "Premium_LRS"
                      ],
                      "metadata": {
                          "displayName": "storage account type.",
                          "description": null
                      }
                  },
                  "tagName": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The name of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "tagValue": {
                      "type": "string",
                      "metadata": {
                          "displayName": "The value of the tag to provide the policy assignment.",
                          "description": null
                      }
                  },
                  "contributors": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Contributor role at the subscription",
                          "strongType": "PrincipalId"
                      }
                  },
                  "owners": {
                      "type": "array",
                      "metadata": {
                          "description": "List of AAD object IDs that is assigned Owner role at the resource group",
                          "strongType": "PrincipalId"
                      }
                  }
              },
              "resourceGroups": {
                  "storageRG": {
                      "description": "Contains the resource template deployment and a role assignment."
                  }
              }
          }
      }
      
    • أوامر PowerShell

      # Login first with Connect-AzAccount if not using Cloud Shell
      
      # Get a reference to the new blueprint object, we'll use it in subsequent steps
      $blueprint = New-AzBlueprint -Name 'MyBlueprint' -BlueprintFile .\blueprint.json
      

      إشعار

      استخدم اسم الملف blueprint.json عند إنشاء تعريفات المخطط برمجياً. يُستخدم اسم الملف عند استدعاء Import-AzBlueprintWithArtifact.

      يتم تكوين كائن المخطط في الاشتراك الافتراضي افتراضيًا. لتحديد مجموعة الإدارة، استخدم المعلمة ManagementGroupId. لتحديد الاشتراك، استخدم المعلمة SubscriptionId.

  2. أضف تعيين دور على الاشتراك. يحدد ArtifactFile نوع البيانات الاصطناعية، وتصبح الخصائص محاذية لمُعرّف تعريف الدور، ويتم تمرير الهويات الأساسية كمصفوفة من القيم. في المثال التالي، يتم تكوين الهويات الأساسية الممنوحة للدور المحدد لمعامل تم تعيينه في أثناء تعيين المخطط. يستخدم هذا المثال الدور المضمن Contributor، مع معرف GUID لـ b24988ac-6180-42a0-ab88-20f7382dd24c.

    • JSON file - \artifacts\roleContributor.json

      {
          "kind": "roleAssignment",
          "properties": {
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
              "principalIds": "[parameters('contributors')]"
          }
      }
      
    • أوامر PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'roleContributor' -ArtifactFile .\artifacts\roleContributor.json
      
  3. أضف تعيين نهج على مستوى الاشتراك. يُعرّف ArtifactFile نوع البيانات الاصطناعية، وتصبح الخصائص محاذية لتعريف نهج أو مبادرة، ويتم تكوين تعيين النهج لاستخدام معلمات المخطط المحددة خلال تعيين المخطط. يستخدم هذا المثال النهج المضمن Apply tag and its default value to resource groups، مع مُعرّف GUID لـ 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • JSON file - \artifacts\policyTags.json

      {
          "kind": "policyAssignment",
          "properties": {
              "displayName": "Apply tag and its default value to resource groups",
              "description": "Apply tag and its default value to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "[parameters('tagName')]"
                  },
                  "tagValue": {
                      "value": "[parameters('tagValue')]"
                  }
              }
          }
      }
      
    • أوامر PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'policyTags' -ArtifactFile .\artifacts\policyTags.json
      
  4. أضف تعيين نهج آخر لعلامة التخزين (عن طريق إعادة استخدام storageAccountType_ parameter) في الاشتراك. توضح هذه الأداة الإضافية لتعيين النهج أن المعامل المحدد في المخطط يمكن استخدامه بواسطة أكثر من عنصر واحد. في المثال، يتم استخدام storageAccountType لتعيين علامة على مجموعة الموارد. توفر هذه القيمة معلومات بشأن حساب التخزين الذي تم إنشاؤه في الخطوة التالية. يستخدم هذا المثال النهج المضمن Apply tag and its default value to resource groups، مع مُعرّف GUID لـ 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • JSON file - \artifacts\policyStorageTags.json

      {
          "kind": "policyAssignment",
          "properties": {
              "displayName": "Apply storage tag to resource group",
              "description": "Apply storage tag and the parameter also used by the template to resource groups",
              "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71",
              "parameters": {
                  "tagName": {
                      "value": "StorageType"
                  },
                  "tagValue": {
                      "value": "[parameters('storageAccountType')]"
                  }
              }
          }
      }
      
    • أوامر PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'policyStorageTags' -ArtifactFile .\artifacts\policyStorageTags.json
      
  5. إضافة قالب ضمن مجموعة الموارد. TemplateFile يتضمن لقالب ARM مكون JSON العادي للقالب. يعيد القالب أيضا استخدام معلمات storageAccountTypetagNameالمخطط و و tagValue عن طريق تمرير كل منها إلى القالب. تتوفر معلمات المخطط للقالب باستخدام المعلمة TemplateParameterFile، وداخل القالب JSON يتم استخدام قيم الزوج key-value لإدخال القيمة. يمكن أن تكون أسماء معايير المخطط والقالب متطابقة.

    • ملف قالب JSON ARM - \artifacts\templateStorage.json

      {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
              "storageAccountTypeFromBP": {
                  "type": "string",
                  "metadata": {
                      "description": "Storage Account type"
                  }
              },
              "tagNameFromBP": {
                  "type": "string",
                  "defaultValue": "NotSet",
                  "metadata": {
                      "description": "Tag name from blueprint"
                  }
              },
              "tagValueFromBP": {
                  "type": "string",
                  "defaultValue": "NotSet",
                  "metadata": {
                      "description": "Tag value from blueprint"
                  }
              }
          },
          "variables": {
              "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
          },
          "resources": [{
              "type": "Microsoft.Storage/storageAccounts",
              "name": "[variables('storageAccountName')]",
              "apiVersion": "2016-01-01",
              "tags": {
                  "[parameters('tagNameFromBP')]": "[parameters('tagValueFromBP')]"
              },
              "location": "[resourceGroup().location]",
              "sku": {
                  "name": "[parameters('storageAccountTypeFromBP')]"
              },
              "kind": "Storage",
              "properties": {}
          }],
          "outputs": {
              "storageAccountSku": {
                  "type": "string",
                  "value": "[variables('storageAccountName')]"
              }
          }
      }
      
    • ملف معلمة قالب JSON ARM - \artifacts\templateStorageParams.json

      {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
              "storageAccountTypeFromBP": {
                  "value": "[parameters('storageAccountType')]"
              },
              "tagNameFromBP": {
                  "value": "[parameters('tagName')]"
              },
              "tagValueFromBP": {
                  "value": "[parameters('tagValue')]"
              }
          }
      }
      
    • أوامر PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Type TemplateArtifact -Name 'templateStorage' -TemplateFile .\artifacts\templateStorage.json -TemplateParameterFile .\artifacts\templateStorageParams.json -ResourceGroupName storageRG
      
  6. إضافة تعيين دور ضمن مجموعة الموارد. كما الحال في إدخال تعيين الدور السابق، يستخدم المثال أدناه معرّف التعريف الدور لـ Owner، ويوفر له معلمة مختلفة عن المخطط. يستخدم هذا المثال الدور المضمن Owner، مع معرف GUID لـ 8e3af657-a8ff-443c-a75c-2fe8c4bcb635.

    • JSON file - \artifacts\roleOwner.json

      {
          "kind": "roleAssignment",
          "properties": {
              "resourceGroup": "storageRG",
              "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635",
              "principalIds": "[parameters('owners')]"
          }
      }
      
    • أوامر PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintArtifact -Blueprint $blueprint -Name 'roleOwner' -ArtifactFile .\artifacts\roleOwner.json
      

انشر مخططًا

الآن وقد تمت إضافة البيانات الاصطناعية إلى المخطط، فقد حان الوقت لنشرها. النشر يجعل المخطط متاحاً ليُعين للاشتراك.

# Use the reference to the new blueprint object from the previous steps
Publish-AzBlueprint -Blueprint $blueprint -Version '{BlueprintVersion}'

القيمة لـ {BlueprintVersion} هي عبارة عن سلسلة من الأحرف، والأرقام، والواصلات (دون مسافات أو أحرف خاصة أخرى). الحد الأقصى لعدد الحروف هو 20 حرفًا. استخدم شيئاً فريداً ومعلوماتيا، مثل v20180622-135541.

تعيين مخطط

بعد أن قمت بنشر مخطط باستخدام PowerShell، يمكن تعيينه إلى اشتراك. تعيين المخطط المُنشأ لأحد الاشتراكات ضمن التسلسل الهرمي لمجموعة الإدارة. إذا تم حفظ المخطط في اشتراك، فيمكن تعيينه لهذا الاشتراك فقط. Blueprint تحدد المعلمة المخطط المراد تعيينه. لتوفير المعلمات name، و location، و identity، و lock و blueprint، استخدم معلمات PowerShell المطابقة في cmdlet New-AzBlueprintAssignment، أو قم بتوفيرها في ملف JSON الخاص بالمعلمة AssignmentFile.

  1. قم بتشغيل نشر المخطط عن طريق تخصيصه لاشتراك. نظراً لأن المعلمات contributors وowners تتطلب مصفوفة من objectIds خاصة بالأساسيات ليتم منحها تعيين الدور، استخدم واجهة برمجة تطبيقات Microsoft Azure Active Directory Graph لتجميع objectIds للاستخدام في AssignmentFile للمستخدمين أو المجموعات أو كيانات الخدمة.

    • JSON file - blueprintAssignment.json

      {
          "properties": {
              "blueprintId": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/MyBlueprint",
              "resourceGroups": {
                  "storageRG": {
                      "name": "StorageAccount",
                      "location": "eastus2"
                  }
              },
              "parameters": {
                  "storageAccountType": {
                      "value": "Standard_GRS"
                  },
                  "tagName": {
                      "value": "CostCenter"
                  },
                  "tagValue": {
                      "value": "ContosoIT"
                  },
                  "contributors": {
                      "value": [
                          "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
                          "38833b56-194d-420b-90ce-cff578296714"
                      ]
                  },
                  "owners": {
                      "value": [
                          "44254d2b-a0c7-405f-959c-f829ee31c2e7",
                          "316deb5f-7187-4512-9dd4-21e7798b0ef9"
                      ]
                  }
              }
          },
          "identity": {
              "type": "systemAssigned"
          },
          "location": "westus"
      }
      
    • أوامر PowerShell

      # Use the reference to the new blueprint object from the previous steps
      New-AzBlueprintAssignment -Blueprint $blueprint -Name 'assignMyBlueprint' -AssignmentFile .\blueprintAssignment.json
      
    • الهوية المُدارة التي يعيّنها المُستخدم

      يمكن أن يستخدم تعيين المخطط أيضًا هوية مُدارة يعينها المستخدم. في هذه الحالة، identity يتغير جزء ملف تعيين JSON كما يلي. استبدل {tenantId}، و{subscriptionId}، و{yourRG} و{userIdentity} بمُعرف المستأجر، ومُعرّف الاشتراك، واسم مجموعة الموارد، واسم الهوية المُدارة المُعينة من قِبل المستخدم الخاص بك، على التوالي.

      "identity": {
          "type": "userAssigned",
          "tenantId": "{tenantId}",
          "userAssignedIdentities": {
              "/subscriptions/{subscriptionId}/resourceGroups/{yourRG}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userIdentity}": {}
          }
      },
      

      يمكن للهوية المُدارة المعينة من قِبل المستخدم أن تكون في أي اشتراك ومجموعة موارد يمتلك المستخدم الذي يقوم بتعيين المخطط أذونات لها.

      هام

      لا تدير Azure Blueprints الهوية المدارة المعينة من قِبل المستخدم. يتحمل المستخدمون مسؤولية تعيين الأدوار والأذونات الكافية، وإلا سيفشل تعيين المخطط.

تنظيف الموارد

يمكنك إزالة مخطط من الاشتراك. تتم الإزالة غالبًا عندما لا تعود هناك حاجة إلى موارد الأداة. عند إزالة مخطط، يتم ترك المصطنعات (بيانات اصطناعية) التي تم تعيينها كجزء من ذلك المخطط وراءها. لإزالة تعيين مخطط، استخدم Remove-AzBlueprintAssignment cmdlet:

assignMyBlueprint

Remove-AzBlueprintAssignment -Name 'assignMyBlueprint'

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

في هذا التشغيل السريع، قمت بإنشاء مخططاً، وتعيينه، وإزالته باستخدام PowerShell. لمعرفة المزيد حول Azure Blueprints، تابع إلى مقالة دورة حياة المخطط.