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

هام

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

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

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

  • في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
  • إذا لم تكن قد استخدمت أداة Azure Blueprints من قبل، فقم بتسجيل موفر المورد من خلال أداة Azure CLI باستخدام az provider register --namespace Microsoft.Blueprint.

Azure Cloud Shell

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

لبدء Azure Cloud Shell:

خيار مثال/ رابط
انقر فوق ⁧⁩جربه⁧⁩ في الزاوية العلوية اليسرى من التعليمة البرمجية أو كتلة الأمر. تحديد ⁧⁩جربه⁧⁩ لا يقوم بنسخ التعليمة البرمجية أو الأمر تلقائيًا إلى Cloud Shell. لقطة شاشة تعرض مثالاً على Try It for Azure Cloud Shell.
انتقل إلى ⁧⁩⁧ https://shell.azure.com⁩⁧⁩، أو حدد زر ⁩تشغيل Cloud Shell لفتح Cloud Shell في المتصفح لديك. زر لتشغيل Azure Cloud Shell.
حدد زر Cloud Shell على شريط القوائم في أعلى اليمين في مدخل Microsoft Azure. لقطة شاشة تعرض زر Cloud Shell في مدخل Microsoft Azure

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

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

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

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

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

أضف ملحق المخطط

لتمكين أداة Azure CLI من إدارة تعريفات المخطط والتعيينات، يجب إضافة الملحق. يعمل هذا الملحق أينما يمكنك استخدام أداة Azure CLI. يتضمن ذلك bash على Windows 10 أو Cloud Shell (كل من الإصدار المستقل والإصدار الموجود داخل المدخل) أو صورة Azure CLI Docker أو ملحق مثبت محلياً.

  1. تحقق من تثبيت أحدث إصدار من Azure CLI (⁧2.0.76⁧ على الأقل). إذا لم يتم تثبيته بعد، اتبع هذه الإرشادات.

  2. في بيئة أداة Azure CLI التي تختارها، قم باستيرادها باستخدام الأمر التالي:

    # Add the Blueprint extension to the Azure CLI environment
    az extension add --name blueprint
    
  3. تحقق من تثبيت الإضافة وأنها الإصدار المتوقع (على الأقل 0.1.0):

    # Check the extension list (note that you might have other extensions installed)
    az extension list
    
    # Run help for extension options
    az blueprint -h
    

إنشاء مخطط

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

إشعار

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

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

    • ملف JSON - blueprintparms.json

      {
         "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"
             }
         }
      }
      
    • أمر Azure CLI

      # Login first with az login if not using Cloud Shell
      
      # Create the blueprint object
      az blueprint create \
         --name 'MyBlueprint' \
         --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.' \
         --parameters blueprintparms.json
      

      إشعار

      استخدم اسم الملف blueprint.json عند استيراد تعريفات مخططك. يتم استخدام اسم الملف هذا عند استدعاء az blueprint import.

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

  2. أضف resourceGroup للبيانات الاصطناعية في التخزين إلى التعريف.

    az blueprint resource-group add \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'storageRG' \
       --description 'Contains the resource template deployment and a role assignment.'
    
  3. أضف تعيين دور على الاشتراك. في المثال التالي، يتم تكوين الهويات الأساسية الممنوحة للدور المحدد لمعامل تم تعيينه في أثناء تعيين المخطط. يستخدم هذا المثال الدور المضمن Contributor، مع معرف GUID لـ b24988ac-6180-42a0-ab88-20f7382dd24c.

    az blueprint artifact role create \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'roleContributor' \
       --role-definition-id '/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c' \
       --principal-ids "[parameters('contributors')]"
    
  4. أضف تعيين نهج على مستوى الاشتراك. يستخدم هذا المثال النهج المضمن Apply tag and its default value to resource groups، مع مُعرّف GUID لـ 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • ملف JavaScript Object Notation-artifacts\policyTags.json

      {
         "tagName": {
            "value": "[parameters('tagName')]"
         },
         "tagValue": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • أمر Azure CLI

      az blueprint artifact policy create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'policyTags' \
         --policy-definition-id '/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71' \
         --display-name 'Apply tag and its default value to resource groups' \
         --description 'Apply tag and its default value to resource groups' \
         --parameters artifacts\policyTags.json
      

      إشعار

      عند استخدام az blueprint على جهاز Mac، استبدل \ بـ / لقيم المعلمة التي تتضمن المسار. في هذه الحالة، تصبح artifacts/policyTags.jsonقيمة .parameters

  5. أضف تعيين نهج آخر لعلامة التخزين (عن طريق إعادة استخدام storageAccountType_ parameter) في الاشتراك. توضح هذه الأداة الإضافية لتعيين النهج أن المعامل المحدد في المخطط يمكن استخدامه بواسطة أكثر من عنصر واحد. في المثال، يتم استخدام storageAccountType لتعيين علامة على مجموعة الموارد. توفر هذه القيمة معلومات بشأن حساب التخزين الذي تم إنشاؤه في الخطوة التالية. يستخدم هذا المثال النهج المضمن Apply tag and its default value to resource groups، مع مُعرّف GUID لـ 49c88fc8-6fd1-46fd-a676-f12d1d3a4c71.

    • ملف JSON - artifacts\policyStorageTags.json

      {
         "tagName": {
            "value": "StorageType"
         },
         "tagValue": {
            "value": "[parameters('storageAccountType')]"
         }
      }
      
    • أمر Azure CLI

      az blueprint artifact policy create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'policyStorageTags' \
         --policy-definition-id '/providers/Microsoft.Authorization/policyDefinitions/49c88fc8-6fd1-46fd-a676-f12d1d3a4c71' \
         --display-name 'Apply storage tag to resource group' \
         --description 'Apply storage tag and the parameter also used by the template to resource groups' \
         --parameters artifacts\policyStorageTags.json
      

      إشعار

      عند استخدام az blueprint على جهاز Mac، استبدل \ بـ / لقيم المعلمة التي تتضمن المسار. في هذه الحالة، تصبح artifacts/policyStorageTags.jsonقيمة .parameters

  6. أضف قالباً ضمن مجموعات الموارد. template تتضمن المعلمة لقالب ARM مكونات JSON العادية للقالب. يعيد القالب أيضا استخدام معلمات storageAccountTypetagNameالمخطط و و tagValue عن طريق تمرير كل منها إلى القالب. تتوفر معلمات المخطط للقالب باستخدام المعلمة parameters، وداخل القالب 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

      {
         "storageAccountTypeFromBP": {
            "value": "[parameters('storageAccountType')]"
         },
         "tagNameFromBP": {
            "value": "[parameters('tagName')]"
         },
         "tagValueFromBP": {
            "value": "[parameters('tagValue')]"
         }
      }
      
    • أمر Azure CLI

      az blueprint artifact template create \
         --blueprint-name 'MyBlueprint' \
         --artifact-name 'templateStorage' \
         --template artifacts\templateStorage.json \
         --parameters artifacts\templateStorageParams.json \
         --resource-group-art 'storageRG'
      

      إشعار

      عند استخدام az blueprint على جهاز Mac، استبدل \ بـ / لقيم المعلمة التي تتضمن المسار. في هذه الحالة، تتحول القيمة لـ template إلى artifacts/templateStorage.json، وتتحول parameters إلى artifacts/templateStorageParams.json.

  7. إضافة تعيين دور ضمن مجموعة الموارد. كما الحال في إدخال تعيين الدور السابق، يستخدم المثال أدناه معرّف التعريف الدور لـ Owner، ويوفر له معلمة مختلفة عن المخطط. يستخدم هذا المثال الدور المضمن Owner، مع معرف GUID لـ 8e3af657-a8ff-443c-a75c-2fe8c4bcb635.

    az blueprint artifact role create \
       --blueprint-name 'MyBlueprint' \
       --artifact-name 'roleOwner' \
       --role-definition-id '/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635' \
       --principal-ids "[parameters('owners')]" \
       --resource-group-art 'storageRG'
    

انشر مخططًا

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

az blueprint publish --blueprint-name 'MyBlueprint' --version '{BlueprintVersion}'

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

تعيين مخطط

بمجرد نشر مخطط باستخدام Azure CLI، فإنه يمكن تخصيصه للاشتراك. تعيين المخطط المُنشأ لأحد الاشتراكات ضمن التسلسل الهرمي لمجموعة الإدارة. إذا تم حفظ المخطط في اشتراك، فيمكن تعيينه لهذا الاشتراك فقط. blueprint-name تحدد المعلمة المخطط المراد تعيينه. لتوفير المعلمات name، وlocation، وidentity، وlock وblueprint، استخدم معلمات Azure CLI المطابقة في الأمر az blueprint assignment create، أو قم بتوفيرها في ملف JSON الخاص بـ المعلمات.

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

    • JSON file - blueprintAssignment.json

      {
         "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"
             ]
         }
      }
      
    • أمر Azure CLI

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      
    • الهوية المُدارة التي يعيّنها المُستخدم

      يمكن أن يستخدم تعيين المخطط أيضًا هوية مُدارة يعينها المستخدم. في هذه الحالة، يتم تعيين المعلمة identity-type إلى UserAssigned، والمعلمة user-assigned-identities تحدد الهوية. استبدل {userIdentity} باسم الهوية التي يديرها المستخدم.

      az blueprint assignment create \
         --name 'assignMyBlueprint' \
         --location 'westus' \
         --identity-type UserAssigned \
         --user-assigned-identities {userIdentity} \
         --resource-group-value artifact_name=storageRG name=StorageAccount location=eastus \
         --parameters blueprintAssignment.json
      

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

      هام

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

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

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

az blueprint assignment delete --name 'assignMyBlueprint'

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

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