تدريب - إضافة معلمات ومخرجات إلى قالب Azure Resource Manager

مكتمل

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

إنشاء معلمات لقالب ARM

هنا، ستجعل قالب ARM الخاص بك أكثر مرونة عن طريق إضافة معلمات يمكن تعيينها في وقت التشغيل. إنشاء معلمة لقيمة storageName.

  1. في ملف azuredeploy.json في التعليمات البرمجية لـ Visual Studio، ضع المؤشر داخل الأقواس في سمة المعلمات. يبدو كما يلي: "parameters":{},

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

     "parameters": {
        "parameter1": {
        "type": "string",
        "metadata": {
            "description": "description"
        }
      }
    },
    
  3. قم بتغيير المعلمة إلى من parameter1 إلى storageName واترك النوع كسلسلة. إضافة قيمة minLength من 3 وقيمة maxLength من 24. إضافة قيمة وصف لاسم مصدر تخزين Azure.

  4. يجب أن تبدو كتلة المعلمة كما يلي:

    "parameters": {
      "storageName": {
        "type": "string",
        "minLength": 3,
        "maxLength": 24,
        "metadata": {
          "description": "The name of the Azure storage resource"
        }
      }
    },
    
  5. استخدم المعلمة الجديدة في resources الكتلة في القيمتينname وdisplayName. سوف يبدو الملف بأكمله على النحو التالي:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[parameters('storageName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Standard_LRS",
            "tier": "Standard"
          }
        }
      ],
      "outputs": {}
    }
    
  6. احفظ الملف.

نشر قالب ARM المحدد بالمعلمات

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

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

templateFile="azuredeploy.json"
today=$(date +"%d-%b-%Y")
DeploymentName="addnameparameter-"$today

az deployment group create \
  --name $DeploymentName \
  --template-file $templateFile \
  --parameters storageName={your-unique-name}

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

$templateFile="azuredeploy.json"
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="addnameparameter-"+"$today"
New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -TemplateFile $templateFile `
  -storageName {your-unique-name}

تحقق من النشر

  1. عند انتهاء النشر، ارجع إلى مدخل Microsoft Azure في المستعرض الخاص بك. انتقل إلى مجموعة الموارد الخاصة بك، وانظر إلى أن هناك الآن 3 عمليات نشر ناجحة. حدد هذا الارتباط.

    لاحظ أن كافة عمليات النشر الثلاث موجودة في القائمة.

  2. استكشاف نشر addnameparameter كما فعلت سابقًا.

إضافة معلمة أخرى للحد من القيم المسموح بها

هنا، ستستخدم المعلمات للحد من القيم المسموح بها للمعلمة.

  1. ضع المؤشر بعد قوس الإغلاق للمعلمة storageName. إضافة فاصلة، وحدد إدخال.

  2. مرة أخرى، أدخل par وحدد new-parameter.

  3. غير المعلمة العامة الجديدة إلى ما يلي:

    "storageSKU": {
       "type": "string",
       "defaultValue": "Standard_LRS",
       "allowedValues": [
         "Standard_LRS",
         "Standard_GRS",
         "Standard_RAGRS",
         "Standard_ZRS",
         "Premium_LRS",
         "Premium_ZRS",
         "Standard_GZRS",
         "Standard_RAGZRS"
       ]
     }
    

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

  4. إضافة تعليق إلى هذه المعلمة.

    Screenshot of the azuredeploy.json file showing the comment This is the allowed values for an Azure storage account in the line preceding the storageSKU parameter.

    تدعم قوالب ARM تعليقات // و/* */.

  5. تحديث الموارد لاستخدام معلمة storageSKU. الاستفادة من IntelliSense في التعليمات البرمجية Visual Studio لجعل هذه الخطوة أسهل.

    "sku": {
         "name": "[parameters('storageSKU')]"
       }
    

    سوف يبدو الملف بأكمله على النحو التالي:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageName": {
          "type": "string",
          "minLength": 3,
          "maxLength": 24,
          "metadata": {
            "description": "The name of the Azure storage resource"
          }
        },
        "storageSKU": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_RAGRS",
            "Standard_ZRS",
            "Premium_LRS",
            "Premium_ZRS",
            "Standard_GZRS",
            "Standard_RAGZRS"
          ]
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[parameters('storageName')]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "[parameters('storageName')]"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "[parameters('storageSKU')]",
            "tier": "Standard"
          }
        }
      ],
      "outputs": {}
    }
    
  6. احفظ الملف.

نشر قالب ARM

هنا، سوف يتم النشر بنجاح باستخدام storageSKU معلمة موجودة في القائمة المسموح بها. حينها، ستجرب نشر القالب مستخدمًا storageSKU معلمة غير موجودة في القائمة المسموح بها. سيفشل النشر الثاني كما هو متوقع.

  1. تشغيل الأوامر التالية لنشر القالب. تعبئة اسم فريد لمعلمة storageName. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_GRS storageName={your-unique-name}
    

    السماح بإنهاء هذا النشر. تنجح عملية النشر هذه كما هو متوقع. تمنع القيم المسموح بها مستخدمي القالب من تمرير قيم المعلمات التي لا تعمل للمورد. دعونا نر ما يحدث عند توفير SKU غير صالح.

  2. تشغيل الأوامر التالية لنشر القالب مع معلمة غير مسموح بها. هنا قمت بتغيير معلمة storageSKU إلى أساسية. تعبئة اسم فريد لمعلمة storageName. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addSkuParameter-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Basic storageName={your-unique-name}
    

    فشل هذا النشر. لاحظ الخطأ.

    Screenshot of the Terminal window showing the deployment validation error.

  1. تشغيل الأوامر التالية لنشر القالب. تعبئة اسم فريد لمعلمة storageName. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_GRS
    

    السماح بإنهاء هذا النشر. تنجح عملية النشر هذه كما هو متوقع. تمنع القيم المسموح بها مستخدمي القالب من تمرير قيم المعلمات التي لا تعمل للمورد. دعونا نر ما يحدث عند توفير SKU غير صالح.

  2. تشغيل الأوامر التالية لنشر القالب مع معلمة غير مسموح بها. هنا قمت بتغيير معلمة storageSKU إلى أساسية. تعبئة اسم فريد لمعلمة storageName. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addSkuParameter-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Basic
    

    فشل هذا النشر. لاحظ الخطأ.

    Screenshot of the Terminal window showing the deployment validation error.

إضافة مخرج إلى قالب ARM

هنا، ستضيف إلى outputs قسم من قالب ARM لإخراج نقاط النهاية لمورد حساب التخزين.

  1. في ملف azuredeploy.json في التعليمات البرمجية لـ Visual Studio، ضع المؤشر داخل الأقواس في سمة المخرجات "outputs":{},.

  2. اضغط على مفتاح الإدخال Enter، ثم أدخل . ستحصل على قائمة بالمقتطفات ذات الصلة. حدد new-output. فإنه يضيف إخراجًا عامًا إلى القالب. سيبدو هكذا:

    "outputs": {
      "output1": {
        "type": "string",
        "value": "value"
      }
    
  3. قم بتغيير "output1" إلى "storageEndpoint"، ثم قم بتغيير قيمة type إلى "object". غير قيمة value إلى "[reference(parameters('storageName')).primaryEndpoints]". هذا التعبير هو الذي ناقشناه في الوحدة السابقة الذي يحصل على بيانات نقطة النهاية. نظرا لأننا حددنا الكائن كنوع، فسيعيد الكائن بتنسيق JSON.

    "outputs": {
      "storageEndpoint": {
        "type": "object",
        "value": "[reference(parameters('storageName')).primaryEndpoints]"
      }
    
  4. احفظ الملف.

نشر قالب ARM مع إخراج

هنا، ستقوم بنشر القالب ورؤية إخراج نقاط النهاية ك JSON. تعبئة اسم فريد لمعلمة storageName. تذكر، يجب أن يكون هذا الاسم فريدًا عبر كل Azure. يمكنك استخدام الاسم الفريد الذي قمت بإنشائه في القسم الأخير. في هذه الحالة، سيقوم Azure بتحديث المصدر بدلاً من إنشاء مصدر جديد.

  1. تشغيل الأوامر التالية لنشر القالب. تأكد من استبدال {your-unique-name} بسلسلة فريدة لك.

    templateFile="azuredeploy.json"
    today=$(date +"%d-%b-%Y")
    DeploymentName="addoutputs-"$today
    
    az deployment group create \
      --name $DeploymentName \
      --template-file $templateFile \
      --parameters storageSKU=Standard_LRS storageName={your-unique-name}
    

    لاحظ الإخراج.

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

  1. تشغيل الأوامر التالية لنشر القالب. تأكد من استبدال {your-unique-name} بسلسلة فريدة لك.

    $today=Get-Date -Format "MM-dd-yyyy"
    $deploymentName="addOutputs-"+"$today"
    New-AzResourceGroupDeployment `
      -Name $deploymentName `
      -TemplateFile $templateFile `
      -storageName {your-unique-name} `
      -storageSKU Standard_LRS
    

    لاحظ الإخراج.

    Screenshot of the Terminal window showing the primary endpoints output as JSON.

تحقق من نشر الإخراج

في مدخل Azure، انتقل إلى نشر addOutputs. يمكنك العثور على الإخراج الخاص بك هناك أيضًا.

Screenshot of the Azure portal showing the output selection in the left menu.