نشر الموارد باستخدام قوالب Azure Resource Manager و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. للحصول على حالة نشر القالب، استخدم Deployments - Get.

    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، فسيكون لديك حسابان للتخزين وإدخالان في محفوظات النشر.

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

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