كتابة قوالب ARM
أنشئ قالب ARM مَعْلَمًا في JSON لنشر حساب تخزين وجهاز افتراضي، واستخدم دوال القالب والمتغيرات لجعل القوالب قابلة لإعادة الاستخدام.
كتابة قوالب ARM درس مجاني في Cloud & IT Cert Prep على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cloud & IT Cert Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.
لماذا نستخدم قوالب ARM؟
تتيح لكم قوالب ARM تعريف البنية الأساسية لـ Azure كتعليمة برمجية بتنسيق JSON. وهذا يتيح عمليات نشر متكررة ومتسقة يمكن التحكم في إصداراتها إلى جانب تعليمة تطبيقكم البرمجية. تتميز القوالب بخاصية idempotency، أي إن تشغيل القالب نفسه عدة مرات ينتج النتيجة نفسها، مما يجعل إعادة تطبيقه بعد إجراء تغييرات آمنة.
هيكل القالب والمخطط
يبدأ كل قالب ARM بخاصية $schema تشير إلى عنوان URL لمخطط القالب، تليها سلسلة contentVersion. ويخبر المخطط مدخل Azure وامتدادات المحرر بكيفية التحقق من صحة القالب وتوفير IntelliSense له. والأقسام الخمسة الرئيسية التالية هي parameters وvariables وfunctions وresources وoutputs.
{
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#',
'contentVersion': '1.0.0.0',
'parameters': {},
'variables': {},
'functions': [],
'resources': [],
'outputs': {}
}تعريف المعلمات
تجعل المعلمات القوالب قابلة لإعادة الاستخدام من خلال قبول المدخلات وقت النشر. لكل معلمة type (مثل string وint وbool وobject وarray وsecureString)، وdefaultValue اختياري، وallowedValues اختيارية للتحقق من الصحة. يضمن استخدام secureString لكلمات المرور عدم تسجيل القيمة مطلقًا في سجل النشر.
"parameters": {
"storageAccountName": {
"type": "string",
"minLength": 3,
"maxLength": 24,
"metadata": { "description": "Globally unique storage account name" }
},
"sku": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": ["Standard_LRS", "Standard_GRS", "Premium_LRS"]
}
}استخدام المتغيرات للقيم المحسوبة
تخزّن المتغيرات قيمًا محسوبة من المعلمات أو دوال القالب، مما يقلل التكرار ويجعل صيانة القوالب أسهل. تُقيَّم المتغيرات مرة واحدة ويُشار إليها في جميع أجزاء قسم الموارد باستخدام التعبير [variables('name')]. ومن الأنماط الشائعة إنشاء اسم مورد عن طريق دمج معلمة مع لاحقة فريدة.
"variables": {
"uniqueStorageName": "[concat(parameters('storageAccountName'), uniqueString(resourceGroup().id))]",
"location": "[resourceGroup().location]"
}تعريف الموارد
تُعد مصفوفة resources جوهر قالب ARM. يصف كل عنصر موردًا واحدًا من موارد Azure، ويتضمن الحقول الإلزامية: type وapiVersion وname وlocation. يثبّت apiVersion إصدار مخطط موفر الموارد؛ لذا استخدموا دائمًا إصدارًا مستقرًا حديثًا للوصول إلى أحدث الميزات وتجنب الخصائص التي أُهملت.
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[variables('uniqueStorageName')]",
"location": "[variables('location')]",
"sku": { "name": "[parameters('sku')]" },
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true,
"minimumTlsVersion": "TLS1_2"
}
}
]دوال القوالب والتعبيرات
تُحاط تعبيرات قوالب ARM بأقواس مربعة [...]، وتدعم دوال مضمّنة للسلاسل والمصفوفات والكائنات ومعرّفات الموارد. تشمل الدوال الشائعة concat() وresourceGroup() وresourceId() وuniqueString() وparameters(). يقيّم ARM هذه الدوال على جانب الخادم وقت النشر، وليس محليًا.
// Reference a resource ID inside a template
"subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'myVNet', 'mySubnet')]"
// Build a unique, deterministic name
"name": "[concat('storage', uniqueString(resourceGroup().id))]"
// Conditionally include a resource
"condition": "[equals(parameters('deployStorage'), true)]"المخرجات: إرجاع القيم
يحدّد قسم outputs القيم التي يعيدها ARM بعد نجاح عملية النشر. وتُعد المخرجات ضرورية لربط القوالب؛ إذ يمكنكم نشر قالب شبكة وإخراج معرّف مورد الشبكة الفرعية، ثم تمريره كمعلمة إلى قالب جهاز ظاهري. ويمكن للمخرجات الإشارة إلى أي تعبير، بما في ذلك خصائص الموارد الناتجة عن عملية النشر.
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('uniqueStorageName')]"
},
"blobEndpoint": {
"type": "string",
"value": "[reference(variables('uniqueStorageName')).primaryEndpoints.blob]"
}
}القوالب المرتبطة والمتداخلة
بالنسبة إلى البنى المعقدة، يدعم ARM القوالب المرتبطة (التي تشير إلى عناوين URL لقوالب خارجية) والقوالب المتداخلة (التي تضمّن قالبًا داخل مصفوفة الموارد باستخدام النوع Microsoft.Resources/deployments). يتيح لكم ذلك تقسيم عملية نشر بنية أساسية كبيرة إلى أجزاء معيارية قابلة لإعادة الاستخدام، مع الإبقاء على قالب تنسيق واحد كنقطة دخول.
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"name": "networkDeploy",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "https://raw.githubusercontent.com/contoso/templates/main/network.json",
"contentVersion": "1.0.0.0"
},
"parameters": {
"vnetName": { "value": "[parameters('vnetName')]" }
}
}
}ملفات المعلمات
بدلًا من تمرير المعلمات في سطر الأوامر، خزّنوها في ملف معلمات منفصل — وهو ملف JSON يحتوي على كائن parameters يضم أزواج الاسم والقيمة. ويمكن أن تكون ملفات المعلمات خاصة بكل بيئة (مثل dev.parameters.json وprod.parameters.json) وأن تُحفظ في نظام التحكم بالمصادر، مع إبقاء القيم الحساسة في مراجع Azure Key Vault بدلًا من تخزينها كنص عادي.
// dev.parameters.json
{
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#',
'contentVersion': '1.0.0.0',
'parameters': {
'storageAccountName': { 'value': 'devstorageacct' },
'sku': { 'value': 'Standard_LRS' }
}
}
// Deploy with parameters file
// az deployment group create -g MyRG -f azuredeploy.json -p dev.parameters.jsonنشر القوالب والتحقق من صحتها
استخدموا أمر Azure CLI az deployment group create لنشر قالب إلى مجموعة موارد. وقبل النشر في بيئة الإنتاج، شغّلوا az deployment group validate لاكتشاف أخطاء المخطط والمنطق، وaz deployment group what-if لمعاينة تغييرات الموارد. تشكّل هذه الأوامر الثلاثة مسار نشر آمنًا: التحقق، ثم المعاينة، ثم النشر.
# Step 1: Validate the template syntax
az deployment group validate \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.json
# Step 2: Preview changes
az deployment group what-if \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.json
# Step 3: Deploy
az deployment group create \
--resource-group MyRG \
--template-file azuredeploy.json \
--parameters @dev.parameters.jsonأفضل ممارسات قوالب ARM
اتبعوا أفضل الممارسات التالية لقوالب ARM: استخدموا المعلمات للقيم الخاصة بكل بيئة، واستخدموا المتغيرات لتجنب التكرار، وثبّتوا إصدارات API على إصدارات مستقرة، واستخدموا secureString لكلمات المرور، وأضيفوا أوصافًا في البيانات الوصفية للمعلمات، وقسّموا القوالب الكبيرة إلى وحدات مرتبطة. خزّنوا القوالب في مستودع Git وانشروها عبر مسار CI/CD لضمان إمكانية التدقيق.
تحقق سريع
اختبروا مدى فهمكم لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.
مراجعة الدرس
تعلّمتم في هذا الدرس أن قوالب ARM هي مستندات JSON تعرّف بنية Azure الأساسية بطريقة تصريحية، وأن المعلمات والمتغيرات تجعل القوالب قابلة لإعادة الاستخدام والصيانة، وأن سير العمل validate، what-if، deploy يتيح عمليات نشر آمنة وقابلة للتكرار. بعد ذلك، سنستكشف Bicep، وهو طبقة تجريد حديثة فوق ARM JSON.
الأسئلة الشائعة
هل درس «كتابة قوالب ARM» مجاني؟
نعم — نص درس «كتابة قوالب ARM» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cloud & IT Cert Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.
ماذا ستتعلم في «كتابة قوالب ARM»؟
أنشئ قالب ARM مَعْلَمًا في JSON لنشر حساب تخزين وجهاز افتراضي، واستخدم دوال القالب والمتغيرات لجعل القوالب قابلة لإعادة الاستخدام. تتمرن على Cloud & IT Cert Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cloud & IT Cert Prep؟
لا تُشترط خبرة سابقة. Cloud & IT Cert Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «كتابة قوالب ARM»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cloud & IT Cert Prep هذا؟
نعم. كل درس في Cloud & IT Cert Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.