البرنامج التعليمي: استخدام ملفات المعلمات لنشر قالب ARM.

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

المتطلبات الأساسية

نوصي بإكمال البرنامج التعليمي حول العلامات، لكنه ليس إلزاميًا.

يجب أن يكون لديك Visual Studio Code مع ملحق أدوات إدارة الموارد، وإما Azure PowerShell أو واجهة سطر أوامر Azure (CLI). لمزيد من المعلومات، راجع ⁧⁩أدوات القالب⁧⁩.

معاينة القالب

يحتوي القالب الخاص بك على العديد من المعلمات التي يمكنك توفيرها في أثناء النشر. في نهاية البرنامج التعليمي السابق، كان لقالبك ملف JSON التالي:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "exampleplan"
    },
    "webAppName": {
      "type": "string",
      "metadata": {
        "description": "Base name of the resource such as web app name and app service plan "
      },
      "minLength": 2
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "The Runtime stack of current web app"
      }
    },
    "resourceTags": {
      "type": "object",
      "defaultValue": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2021-03-01",
      "name": "[variables('webAppPortalName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[parameters('appServicePlanName')]"
      ],
      "tags": "[parameters('resourceTags')]",
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

يعمل هذا القالب بشكل جيد، لكنك الآن تريد بسهولة إدارة المعلمات التي تمررها للقالب.

أضف ملفات المعلمات

ملفات المعلمات هي ملفات JSON ذات بنية مشابهة للقالب. في الملف، تقوم بتوفير قيم المعلمات التي تريد تمريرها في أثناء النشر.

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

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

لا يمكنك تحديد اسم معلمة في ملف المعلمة لا يتطابق مع اسم المعلمة في القالب. يظهر لك خطأ عند توفير معلمات غير معروفة.

في Visual Studio Code، قم بإنشاء ملف جديد بالمحتوى التالي. حفظ الملف باسم azuredeploy.parameters.dev.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "devstore"
    },
    "storageSKU": {
      "value": "Standard_LRS"
    },
    "appServicePlanName": {
      "value": "devplan"
    },
    "webAppName": {
      "value": "devapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  }
}

هذا الملف هو ملف المعلمة الخاص بك لبيئة التطوير. لاحظ أنه يستخدم Standard_LRS لحساب التخزين، وأسماء الموارد مع بادئة dev ويعين العلامة Environment على Dev.

مرة أخرى، قم بإنشاء ملف جديد بالمحتوى التالي. حفظ الملف مع الاسم azuredeploy.parameters.dev.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "contosodata"
    },
    "storageSKU": {
      "value": "Standard_GRS"
    },
    "appServicePlanName": {
      "value": "contosoplan"
    },
    "webAppName": {
      "value": "contosowebapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Production",
        "Project": "Tutorial"
      }
    }
  }
}

هذا الملف هو ملف المعلمة لبيئة الإنتاج. لاحظ أنه يستخدم Standard_GRS لحساب التخزين، وأسماء الموارد مع بادئة contoso ويعين العلامة Environment على Production. في بيئة إنتاج حقيقية، قد ترغب أيضًا في استخدام خدمة تطبيق مع SKU غير المجانية، لكننا سنستخدم SKU هذا لهذا البرنامج التعليمي.

نشر القالب

استخدم إما Azure CLI أو Azure PowerShell لنشر القالب.

كاختبار نهائي للقالب، دعنا ننشئ مجموعتي موارد جديدتين. إحداهما لبيئة dev والأخرى لبيئة الإنتاج.

بالنسبة إلى متغيرات القالب والمعلمة، استبدل {path-to-the-template-file} و{path-to-azuredeploy.parameters.dev.json} و{path-to-azuredeploy.parameters.prod.json} والأقواس المتعرجة {} مع القالب ومسارات ملفات المعلمات.

أولاً، سنوزع في بيئة التطوير.

$templateFile = "{path-to-the-template-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
  -Name myResourceGroupDev `
  -Location "East US"
New-AzResourceGroupDeployment `
  -Name devenvironment `
  -ResourceGroupName myResourceGroupDev `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

الآن، نقوم بالتوزيع في بيئة الإنتاج.

$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
  -Name myResourceGroupProd `
  -Location "West US"
New-AzResourceGroupDeployment `
  -Name prodenvironment `
  -ResourceGroupName myResourceGroupProd `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

ملاحظة

إذا فشل التوزيع، فاستخدمverbose رمز التبديل للحصول على معلومات حول الموارد التي تقوم بإنشائها. استخدم مفتاح ⁧debug⁩ للحصول على مزيد من المعلومات لتصحيح الأخطاء.

تحقق من التوزيع

يمكنك التحقق من النشر باستكشاف مجموعات الموارد من مدخل Azure.

  1. تسجيل الدخول إلى ⁧⁩مدخل Azure⁧⁩.
  2. من القائمة اليمنى، حدد مجموعات الموارد.
  3. ترى مجموعتي موارد جديدتين قمت بتوزيعهما في هذا البرنامج التعليمي.
  4. حدد إما مجموعة الموارد واعرض الموارد المنشورة. لاحظ أنها تتطابق مع القيم التي حددتها في ملف المعلمة لتلك البيئة.

تنظيف الموارد

  1. من مدخل Azure، حدد ⁧⁩ResourceGroup⁧⁩ من القائمة اليسرى.

  2. حدد اسم مجموعة الموارد المرتبطة تشعبيًا بجوار خانة الاختيار. إذا كنت قد أكملت هذه السلسلة، فستحذف ثلاث مجموعات من الموارد - myResourceGroup وmyResourceGroupDev وmyResourceGroupProd.

  3. حدد رمز حذف مجموعة الموارد من القائمة العلوية.

    تنبيه

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

  4. اكتب اسم مجموعة الموارد في النافذة المنبثقة التي تعرض وحدد حذف.

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

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

سلسلة البرنامج التعليمي القادم يذهب إلى مزيد من التفاصيل حول نشر القوالب.