أوضاع توزيع Azure Resource Manager

عند توزيع الموارد الخاصة بك، يمكنك تحديد أن التوزيع هو إما تحديث تزايدي أو تحديث كامل. يتمثل الاختلاف بين هذين الوضعين في كيفية تعامل Azure Resource Manager مع الموارد الموجودة في مجموعة الموارد غير الموجودة في القالب.

لكلا الوضعين، يحاول Resource Manager إنشاء جميع الموارد المحددة في القالب. إذا كان المورد موجوداً بالفعل في مجموعة الموارد ولم تتغير إعداداته، فلن يتم إجراء أي عملية لهذا المورد. إذا قمت بتغيير قيم الخاصية لمورد، يتم تحديث المورد بتلك القيم الجديدة. إذا حاولت تحديث موقع أو نوع مورد موجود، يفشل التوزيع مع وجود خطأ. بدلاً من ذلك، انشر مورداً جديداً بالموقع أو النوع الذي تريده.

الوضع الافتراضي هو تصاعدي.

الوضع الكامل

في الوضع الكامل، يقوم Resource Manager بحذف الموارد الموجودة في مجموعة الموارد ولكن غير محددة في القالب.

ملاحظة

استخدم دائماً عملية ماذا لو قبل توزيع قالب في الوضع الكامل. توضح لك عملية ماذا لو ما الموارد التي سيتم إنشاؤها أو حذفها أو تعديلها. استخدم ماذا لو لتجنب حذف الموارد عن غير قصد.

إذا كان قالبك يتضمن مورداً لم يتم نشره لأن الشرط تم تقييمه على أنه خطأ، فإن النتيجة تعتمد على إصدار REST API الذي تستخدمه لتوزيع القالب. إذا كنت تستخدم إصداراً أقدم من 2019-05-10، فلن يتم حذف المورد. في 2019-05-10 أو أحدث، يتم حذف المورد. تحذف أحدث إصدارات Azure PowerShell وAzure CLI المورد.

كن حذراً عند استخدام الوضع الكامل مع حلقات النسخ. يتم حذف أي موارد لم يتم تحديدها في القالب بعد حل حلقة النسخ.

إذا قمت بالتوزيع إلى أكثر من مجموعة موارد في قالب، فإن الموارد الموجودة في مجموعة الموارد المحددة في عملية التوزيع مؤهلة للحذف. لا يتم حذف الموارد الموجودة في مجموعات الموارد الثانوية.

هناك بعض الاختلافات في كيفية تعامل أنواع الموارد مع عمليات حذف الوضع الكامل. يتم حذف الموارد الأصلية تلقائياً عندما لا تكون في قالب يتم نشره في الوضع الكامل. لا يتم حذف بعض الموارد الفرعية تلقائياً عندما لا تكون موجودة في القالب. ومع ذلك، يتم حذف هذه الموارد التابعة إذا تم حذف المورد الأصل.

على سبيل المثال، إذا كانت مجموعة الموارد الخاصة بك تحتوي على منطقة DNS (نوع موردMicrosoft.Network/dnsZones) وسجل CNAME (نوع موردMicrosoft.Network/dnsZones/CNAME)، فإن منطقة DNS هي المورد الأصلي لسجل CNAME. إذا قمت بالتوزيع في الوضع الكامل ولم تقم بتضمين منطقة DNS في القالب الخاص بك، فسيتم حذف كل من منطقة DNS وسجل CNAME. إذا قمت بتضمين منطقة DNS في القالب الخاص بك ولكنك لم تقم بتضمين سجل CNAME، فلن يتم حذف CNAME.

للحصول على قائمة بكيفية معالجة أنواع الموارد للحذف، راجع حذف موارد Azure لعمليات توزيع الوضع الكامل.

إذا كانت مجموعة الموارد مؤمنة، فإن الوضع الكامل لا يحذف الموارد.

ملاحظة

تدعم القوالب وضع التوزيع الكامل على مستوى الجذر فقط. بالنسبة إلى القوالب المرتبطة أو المتداخلة، يجب استخدام الوضع المتزايد.

لا تدعمعمليات التوزيع على مستوى الاشتراك الوضع الكامل.

في الوقت الحالي، لا تدعم البوابة الوضع الكامل.

الوضع التزايدي

في الوضع التزايدي، يترك Resource Manager الموارد الموجودة في مجموعة الموارد غير محددة في القالب لكن كما هي دون تغيير. تمت إضافة الموارد الموجودة في النموذج إلى مجموعة الموارد.

هام

عند إعادة توزيع مورد موجود في الوضع التزايدي، تتم إعادة تطبيق كل الخصائص. لم تتم إضافة الخصائص بشكل متزايد. سوء الفهم الشائع هو الاعتقاد بأن الخصائص التي لم يتم تحديدها في النموذج لم تتغير. إذا لم تحدد خصائص معينة، فسيفسر Resource Manager التوزيع على أنه كتابة فوق تلك القيم. يتم إعادة تعيين الخصائص غير المضمنة في القالب إلى القيم الافتراضية. حدد كل القيم غير الافتراضية للمورد، وليس فقط القيم التي تقوم بتحديثها. يحتوي تعريف المورد في القالب دائماً على الحالة النهائية للمورد. لا يمكن أن يمثل تحديثاً جزئياً لمورد موجود.

تحذير

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

بالنسبة للشبكات الفرعية، حدد القيم من خلال الخاصية subnets في مورد Microsoft.Network/virtualNetworks. لا تحدد القيم من خلال المورد الفرعي Microsoft.Network/virtualNetworks/subnets. ما دام تم تحديد الشبكات الفرعية على الشبكة الظاهرية، فيمكنك إعادة نشر الشبكة الظاهرية وعدم فقدان الشبكات الفرعية.

بالنسبة لقيم تكوين الموقع، يتم تنفيذ القيم في نوع المورد الفرعي Microsoft.Web/sites/config. إذا قمت بإعادة توزيع تطبيق الويب وحدد كائناً فارغاً لقيم تكوين الموقع، فلن يتم تحديث المورد الفرعي. ومع ذلك، إذا قمت بتوفير قيم تكوين موقع جديد، يتم تحديث نوع المورد الفرعي.

نتيجة المثال

لتوضيح الفرق بين الوضعين التزايدي والكامل، ضع في اعتبارك السيناريو التالي.

تحتوي مجموعة الموارد على:

  • المورد أ
  • المورد ب
  • المورد ج

يحتويالنموذج على:

  • المورد أ
  • المورد ب
  • المورد د

عند التوزيع في الوضع التزايدي، فإن مجموعة الموارد لديها:

  • المورد أ
  • المورد ب
  • المورد ج
  • المورد د

عند التوزيع في الوضع المكتمل، يتم حذف المورد ج. مجموعة الموارد لديها:

  • المورد أ
  • المورد ب
  • المورد د

اضبط وضع النشر

لتعيين وضع التوزيع عند التوزيع باستخدام PowerShell، استخدم المعلمة Mode.

New-AzResourceGroupDeployment `
  -Mode Complete `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json

لتعيين وضع التوزيع عند التوزيع باستخدام Azure CLI، استخدم المعلمة mode.

az deployment group create \
  --mode Complete \
  --name ExampleDeployment \
  --resource-group ExampleResourceGroup \
  --template-file storage.json

يوضح المثال التالي قالب مرتبط تم تعيينه على وضع التوزيع المتزايد:

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2020-10-01",
    "name": "linkedTemplate",
    "properties": {
      "mode": "Incremental",
          <nested-template-or-external-template>
    }
  }
]

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