وزع الموارد باستخدام قوالب ARM وAzure Resource Manager REST API

توضح هذه المقالة كيفية استخدامREST API لإدارة موارد Azure عن طريق قوالب إدارة الموارد Azure بغرض توزيع مواردك إلى Azure.

يمكنك إما إدراج القالب في نص الطلب، أو الربط بملف. عند استخدام ملف، قد يكون ذلك ملف محلي أو ملف خارجي متوفر من خلال معرف موارد منتظم. عندما يُدرج القالب خاصتك في حساب تخزين، يمكنك تقييد الوصول إلى القالب، وتوفير رمز مميز؛ لتوقيع الوصول المشترك أثناء التوزيع.

الأذونات المطلوبة

لنشر ملف Bicep أو قالب ARM، يلزم الوصول إلى الكتابة على الموارد التي تنشرها والوصول إلى جميع العمليات على نوع المورد Microsoft.Resources/deployments. على سبيل المثال، لنشر جهاز ظاهري، تحتاج إلى أذونات Microsoft.Compute/virtualMachines/write وMicrosoft.Resources/deployments/*. عملية "ماذا لو" لها متطلبات الإذن نفسها.

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

نطاق النشر

يمكنك استهداف التوزيع إلى مجموعة موارد، أو اشتراك Azure، أو مجموعة إدارة، أو مستأجر. تستخدم الأوامر المختلفة اعتمادًا على نطاق التوزيع.

تستخدم الأمثلة في هذه المقالة عمليات توزيع مجموعة الموارد.

التوزيع باستخدامREST API

  1. حدد⁧⁩المعلمات والعناوين الشائعة،⁧⁩بما في ذلك رموز المصادقة المميزة.

  2. إذا كنت تقوم بالتوزيع في مجموعة موارد غير موجودة، أنشئ مجموعة الموارد. أدخل معرف الاشتراك، واسم مجموعة الموارد الجديدة، والموقع الذي تحتاجه لتثبيت حلولك. للمزيد من المعلومات، انظر⁧⁩إنشاء مجموعة مورد⁧⁩.

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
    

    من خلال نموذج طلب مثل:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. قبل توزيع القالب، يمكنك معاينة التغييرات التي سيقوم بها القالب على بيئتك. استخدم عملية ماذا لو للتحقق من أن القالب يقوم بالتغييرات التي تتوقعها. تحقق خاصية ماذا لو أيضًا من صحة القالب؛ للكشف عن الأخطاء.

  4. لتوزيع قالب، أدخل معرف الاشتراك الخاص بك، واسم مجموعة الموارد، واسم التوزيع في طلب معرف موارد منتظم

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2020-10-01
    

    في نص الطلب، أدرج ارتباط إلى ملف القالب والمعلمة. لمزيد من المعلومات حول ملف المعلمة، راجع إنشاء ملف معلمة لمدير الموارد.

    تحقق من إعداده على ⁧mode⁩ مُعين إلى ⁧⁩.⁧⁩ لتفعيل التوزيع الكامل، حدد⁧mode⁩ إلى، ثم ⁧⁩كامل⁧⁩. توخَّ الحذر عند استخدام الوضع الكامل؛ حيث يمكنك حذف الموارد غير الموجودة في القالب دون قصد.

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental"
     }
    }
    

    إذا كنت ترغب في تسجيل محتوى الاستجابة، أو محتوى الطلب، أو كليهما، فأدرجه⁧debugSetting⁩ في الطلب.

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental",
       "debugSetting": {
         "detailLevel": "requestContent, responseContent"
       }
     }
    }
    

    يمكنك إعداد حساب التخزين لاستخدام رمز مميز؛ لتوقيع الوصول المشترك وللمزيد من المعلومات، اطلع على ⁧⁩تفويض الوصول باستخدام توقيع وصول مشترك⁧⁩.

    إذا كنت بحاجة إلى توفير قيمة حساسة لأي معلمة (ككلمة مرور)، فأضف هذه القيمة إلى key vault. استعيد key vault أثناء التوزيع حسبما هو موضح في المثال السابق. للمزيد من المعلومات، راجع ⁧⁩استخدام Azure Key Vault لنقل قيمة المعلمة الآمنة أثناء التوزيع.⁧

  5. يمكنك إدراجها في هيكل الطلب بدلاً من الربط بملفات القالب والمعلمات. يظهر المثال التالي نص الطلب مع القالب والمعلمة المضمنة:

    {
       "properties": {
       "mode": "Incremental",
       "template": {
         "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
         "contentVersion": "1.0.0.0",
         "parameters": {
           "storageAccountType": {
             "type": "string",
             "defaultValue": "Standard_LRS",
             "allowedValues": [
               "Standard_LRS",
               "Standard_GRS",
               "Standard_ZRS",
               "Premium_LRS"
             ],
             "metadata": {
               "description": "Storage Account type"
             }
           },
           "location": {
             "type": "string",
             "defaultValue": "[resourceGroup().location]",
             "metadata": {
               "description": "Location for all resources."
             }
           }
         },
         "variables": {
           "storageAccountName": "[format('{0}standardsa', uniquestring(resourceGroup().id))]"
         },
         "resources": [
           {
             "type": "Microsoft.Storage/storageAccounts",
             "apiVersion": "2022-09-01",
             "name": "[variables('storageAccountName')]",
             "location": "[parameters('location')]",
             "sku": {
               "name": "[parameters('storageAccountType')]"
             },
             "kind": "StorageV2",
             "properties": {}
           }
         ],
         "outputs": {
           "storageAccountName": {
             "type": "string",
             "value": "[variables('storageAccountName')]"
           }
         }
       },
       "parameters": {
         "location": {
           "value": "eastus2"
         }
       }
     }
    }
    
  6. للحصول على حالة توزيع القالب، استخدم ⁧⁩عمليات التوزيع؛ للحصول على⁧⁩.

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
    

التوزيع باستخدام ARMClient

ARMClient هو أداة سطر أوامر بسيطة لاستدعاء واجهة برمجة تطبيقات Azure Resource Manager. لتثبيت الأداة، راجع ARMClient.

لسرد الاشتراكات:

armclient GET /subscriptions?api-version=2021-04-01

لسرد مجموعات الموارد:

armclient GET /subscriptions/<subscription-id>/resourceGroups?api-version=2021-04-01

استبدل <subscription-id> بمعرف اشتراك Azure.

لإنشاء مجموعة موارد في منطقة وسط الولايات المتحدة :

armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01  "{location: 'central us', properties: {}}"

بدلاً من ذلك، يمكنك وضع النص في ملف JSON يسمى CreateRg.json:

{
  "location": "Central US",
  "properties": { }
}
armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01 '@CreateRg.json'

لمزيد من المعلومات، راجع ARMClient: أداة سطر أوامر لواجهة سطر الأوامر لـ Azure.

اسم التوزيع

يمكنك استخدام اسم التوزيع الخاص بك مثل ⁧ExampleDeployment⁩.

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

لإنشاء اسماً فريداً، يمكنك تعيين رقم عشوائي. أو إضافة قيمة تاريخ.

إذا قمت بتشغيل عمليات النشر المتزامنة إلى نفس مجموعة الموارد بنفس اسم النشر، فسيتم إكمال النشر الأخير فقط. تُستبدل أي عمليات نشر تحمل نفس الاسم، ولم تكتمل بعد، بعملية النشر الأخيرة. على سبيل المثال، إذا قمت بتشغيل نشر اسمه newStorage ينشر حساب تخزين مسمى storage1، وفي نفس الوقت قمت بتشغيل نشر آخر يسمى newStorage ينشر حساب تخزين مسمى storage2، فإنك تنشر حساب تخزين واحد فقط. يتم تسمية حساب التخزين الناتج بـ storage2.

ومع ذلك، إذا قمت بتشغيل نشر اسمه newStorage ينشر حساب تخزين مسمى storage1، وبمجرد اكتماله قمت بتشغيل نشر آخر يسمى newStorage ينشر حساب تخزين مسمى storage2، فإنك تنشر حسابيّ تخزين. أحدهما يسمى storage1، والآخر يسمى storage2. ولكن لديك إدخال واحد فقط في محفوظات النشر.

عند تحديد اسم فريد لكل نشر، يمكنك تشغيلهم بشكل متزامن دون تعارض. إذا قمت بتشغيل نشر اسمه newStorage1 ينشر حساب تخزين مسمى storage1، وفي نفس الوقت قمت بتشغيل نشر آخر اسمه newStorage2 ينشر حساب تخزين مسمى storage2، فسيكون لديك حسابان للتخزين وإدخالان في محفوظات النشر.

لتجنب تعارض عمليات النشر المتزامنة ولضمان إدخالات فريدة في محفوظات النشر، قم بإعطاء كل نشر اسماً فريداً.

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