تشغيل سريع: تعريف مخطط 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. | |
انتقل إلى https://shell.azure.com، أو حدد زر تشغيل Cloud Shell لفتح Cloud Shell في المتصفح لديك. | |
حدد زر Cloud Shell على شريط القوائم في أعلى اليمين في مدخل Microsoft Azure. |
لاستخدام Azure Cloud Shell:
ابدأ تشغيل Cloud Shell.
حدد الزر نسخ على كتلة التعليمات البرمجية (أو كتلة الأوامر) لنسخ التعليمات البرمجية أو الأمر.
ألصق التعليمة البرمجية أو الأمر في جلسة Cloud Shell بتحديد Ctrl+Shift+Vعلى Windows وLunix، أو بتحديد Cmd+Shift+Vعلى macOS.
حدد Enter لتشغيل التعليمات البرمجية أو الأمر.
إنشاء مخطط
تتمثل الخطوة الأولى في تحديد نمط معياري للتوافق في تكوين مخطط من الموارد المتاحة. دعنا نقوم بإنشاء مخططاً باسم MyBlueprint لتكوين تعيينات النهج والدور للاشتراك. ثم يمكنك إضافة مجموعة موارد، وقالب خدمة ARM، وتعيين دور في مجموعة الموارد.
إشعار
عند استخدام PowerShell، يتم إنشاء العنصر blueprint أولاً. لكل مصطنع تتم إضافته يحتوي على معايير، يجب تحديد المعلمات مسبقاً في blueprint الأولي.
إنشاء كائن المخطط الأول. تأخذ المعلمة
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
.
أضف تعيين دور على الاشتراك. يحدد
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
أضف تعيين نهج على مستوى الاشتراك. يُعرّف
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
أضف تعيين نهج آخر لعلامة التخزين (عن طريق إعادة استخدام
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
إضافة قالب ضمن مجموعة الموارد.
TemplateFile
يتضمن لقالب ARM مكون JSON العادي للقالب. يعيد القالب أيضا استخدام معلماتstorageAccountType
tagName
المخطط و و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
إضافة تعيين دور ضمن مجموعة الموارد. كما الحال في إدخال تعيين الدور السابق، يستخدم المثال أدناه معرّف التعريف الدور لـ
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
.
قم بتشغيل نشر المخطط عن طريق تخصيصه لاشتراك. نظراً لأن المعلمات
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، تابع إلى مقالة دورة حياة المخطط.
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ