نشر سير عمل Logic App باستخدام قالب Azure Resource Manager

مكتمل

إذا كنت تستخدم Azure لفترة من الوقت، فمن المحتمل أنك سمعت عن Azure Resource Manager. دعونا نراجع Resource Manager الموارد ونحدد ما الذي يشكل قالب Resource Manager.

ما هو Azure Resource Manager؟

Azure Resource Manager هي واجهة لإدارة وتنظيم موارد السحابة. فكر في Resource Manager كطريقة لنشر موارد مجموعة النظراء.

إذا كنت على دراية بمجموعات موارد Azure، فأنت تعلم أنها تتيح لك التعامل مع مجموعات الموارد ذات الصلة كوحدة واحدة. Resource Manager هو ما ينظم مجموعات الموارد التي تتيح لك نشر وإدارة وحذف كافة الموارد معًا في إجراء واحد.

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

ما هي قوالب Resource Manager؟

⁩قالب⁧⁩ Resource Manager يحدد بدقة جميع موارد Resource Manager الموجودة في عملية نشر ما. يمكنك نشر قالب Resource Manager في مجموعة موارد كعملية واحدة.

قالب Resource Manager هو عبارة عن ملف JSON، ما يجعله شكلاً من أشكال ⁧⁩أتمتة البرمجة الوظيفية⁧⁩. تعني أتمتة البرمجة الوظيفية أن تقوم بتحديد ⁧⁩الموارد⁧⁩ التي تحتاجها ولكن ليس ⁧⁩كيفية⁧⁩ إنشائها. وضع طريقة أخرى، يمكنك تعريف ما تحتاج إليه، وهي مسؤولية Resource Manager للتأكد من أن يتم نشر الموارد بشكل صحيح.

يمكنك التفكير في التنفيذ التلقائي التصريحي المشابه لكيفية عرض متصفحات الويب ملفات HTML. ⁧يصف⁧ ملف HTML العناصر التي تظهر على الصفحة، ولكنه لا يصف ⁧⁩كيفية⁧⁩ عرضها. "كيف" هي مسؤولية متصفح الويب.

ملاحظة

قد تسمع قوالب Resource Manager المشار إليها باسم «القوالب ARM». نحن نفضل الأسماء الكاملة «قوالب Azure Resource Manager» أو «قوالب Resource Manager».

لماذا تستخدم قوالب Resource Manager؟

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

فيما يلي بعض الفوائد الأخرى التي يجب أخذها في الاعتبار:

  • ⁩القوالب تحسن التناسق⁧

    توفر قوالب Resource Manager لغة مشتركة لك وللآخرين لوصف عمليات النشر الخاصة بك. بغض النظر عن الأداة أو SDK المستخدمة في نشر القالب، البنية والتنسيق والتعبيرات داخل القالب تبقى كما هي.

  • ⁩تساعد القوالب في التعبير عن عمليات النشر المعقدة⁧

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

  • ⁩القوالب تقلل المهام اليدوية المعرضة للخطأ⁧

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

  • ⁩القوالب هي رمز⁧

    القوالب تعبر عن متطلباتك من خلال التعليمات البرمجية. فكر في القالب كنوع من ⁧⁩البنية الأساسية كرمز⁧⁩ يمكن مشاركته واختباره وإصداره مثل أي برنامج آخر. أيضًا، لأن القوالب هي رمز، يمكنك إنشاء "درب الورق" التي يمكنك اتباعها. يوثق رمز القالب النشر. يحتفظ معظم المستخدمين بقوالبهم تحت نوع من عناصر التحكم في المراجعة، مثل Git. عند تغيير القالب، يوثق محفوظات المراجعة الخاصة به أيضًا كيفية تطور القالب (ونشرك) بمرور الوقت.

  • ⁩القوالب تعزز إعادة الاستخدام⁧

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

  • ⁩القوالب قابلة للربط⁧

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

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

ما هو في قالب Resource Manager؟

ملاحظة

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

ربما استخدمت JavaScript Object Notation (JSON) لإرسال البيانات بين الخوادم وتطبيقات الويب. JSON هو أيضًا وسيلة شعبية لوصف كيفية تكوين التطبيقات والبنية الأساسية.

JSON يسمح لنا للتعبير عن البيانات المخزنة ككائن (مثل جهاز ظاهري) في النص. مستند JSON هو أساسًا مجموعة من أزواج مفتاح القيمة. كل مفتاح عبارة عن سلسلة، يمكن أن تكون قيمته سلسلة أو رقمًا أو تعبيرًا منطقيًا أو قائمة قيم أو كائنًا (وهو مجموعة من أزواج قيم المفاتيح الأخرى).

يمكن أن يحتوي قالب Resource Manager على الأقسام التالية. يتم التعبير عن هذه الأقسام باستخدام JSON، ولكنها لا ترتبط بلغة JSON نفسها.

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  },
    "variables": {  },
    "functions": [  ],
    "resources": [  ],
    "outputs": {  }
}

دعونا ننظر في كل من هذه الأقسام في مزيد من التفاصيل قليلاً.

المعلمات

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

فيما يلي مثال يوضح معلمتين – واحدة لاسم مستخدم الجهاز الظاهري والأخرى لكلمة المرور الخاصة به.

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "Username for the Virtual Machine."
    }
  },
  "adminPassword": {
    "type": "securestring",
    "metadata": {
      "description": "Password for the Virtual Machine."
    }
  }
}

المتغيرات

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

فيما يلي مثال يوضح بعض المتغيرات التي تصف ميزات الشبكات لـ VM.

"variables": {
  "nicName": "myVMNic",
  "addressPrefix": "10.0.0.0/16",
  "subnetName": "Subnet",
  "subnetPrefix": "10.0.0.0/24",
  "publicIPAddressName": "myPublicIP",
  "virtualNetworkName": "MyVNET"
}

الوظائف

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

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

الموارد

هذا القسم هو المكان الذي تقوم بتعريف موارد Azure التي تشكل النشر الخاص بك.

إليك مثالاً يقوم بإنشاء مورد عنوان IP عام.

{
  "type": "Microsoft.Network/publicIPAddresses",
  "name": "[variables('publicIPAddressName')]",
  "location": "[parameters('location')]",
  "apiVersion": "2018-08-01",
  "properties": {
    "publicIPAllocationMethod": "Dynamic",
    "dnsSettings": {
      "domainNameLabel": "[parameters('dnsLabelPrefix')]"
    }
  }
}

هنا، نوع المورد هو ⁧Microsoft.Network/publicIPAddresses⁩. تتم قراءة اسمه من قسم المتغيرات وموقعه أو منطقة Azure، أو قراءة من قسم المعلمات.

لأن أنواع الموارد يمكن أن تتغير بمرور الوقت، ⁧apiVersion⁩ يشير إلى إصدار نوع المورد الذي تريد استخدامه. مع تطور أنواع الموارد وتغييرها، يمكنك تعديل القوالب للعمل مع أحدث الميزات عندما تكون مستعدًا.

المخرجات

هذا هو المكان الذي تقوم فيه بتحديد أي معلومات ترغب في تلقيها عند تشغيل القالب. على سبيل المثال، قد ترغب في تلقي عنوان IP الخاص بالجهاز الظاهري أو معلومات FQDN – التي لا تعرفها حتى يتم تشغيل التوزيع.

هنا مثال يوضح إخراجًا يسمى "اسم المضيف". تتم قراءة قيمة FQDN من إعدادات عنوان IP العام VM.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
  }
}

كيف يمكنني نشر سير عمل Logic App في قالب؟

سير عمل Logic App هو مورد في Azure. لذلك، يمكن نشرها في قالب بإضافته إلى قائمة الموارد للنشر في القسم ⁧resourcesمن⁩ قالب Resource Manager. ما الذي نضيفه بالضبط إلى قسم الموارد حتى يتم تعريف سير العمل؟ نضيف تعريف سير عمل JSON لسير العمل المعني إلى قسم الموارد. في الواقع، يظهر القصاصة البرمجية JSON التالي قالب Resource Manager لنشر سير العمل الأساسي الذي قمنا بوصفه في الوحدة السابقة. كما ترون من التمييز، يحتوي قسم الموارد على تعريف العمل الكامل.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Logic/workflows",
            "apiVersion": "2017-07-01",
            "name": "HelloLogicAppsTemplate",
            "location": "westus2",
            "properties": {
                "state": "Enabled",
                "definition": {
                    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "triggers": {
                        "manual": {
                            "type": "Request",
                            "kind": "Http",
                            "inputs": {
                                "method": "GET",
                                "schema": {}
                            }
                        }
                    },
                    "actions": {
                        "Response": {
                            "runAfter": {},
                            "type": "Response",
                            "kind": "Http",
                            "inputs": {
                                "body": "Hello Logic Apps Template!",
                                "statusCode": 200
                            }
                        }
                    },
                    "outputs": {}
                },
                "parameters": {}
            }
        }
    ],
    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', 'HelloLogicAppsTemplate'), '/triggers/manual'), '2017-07-01').value]"
        }
     }
}

يمكننا نشر هذا القالب باستخدام إحدى الطرق التالية:

  • النشر باستخدام مدخل Microsoft Azure
  • نشر باستخدام وحدة PowerShell Az
  • نشر من واجهة سطر الأوامر Azure (CLI).

في هذه الوحدة النمطية، سنقوم بنشر قوالب باستخدام CLI Azure والأوامر ⁧az deployment group⁩.

كيف يمكنني كتابة قالب Resource Manager؟

هناك العديد من الطرق لكتابة قوالب Resource Manager. على الرغم من أنه يمكنك كتابة قالب من البداية، فمن الشائع البدء بقالب موجود وتعديله ليناسب احتياجاتك.

فيما يلي بعض الطرق التي يمكنك من خلالها الحصول على قالب بداية:

  • استخدم مدخل Microsoft Azure لإنشاء قالب يستند إلى الموارد الموجودة في مجموعة موارد موجودة.
  • ابدأ بقالب قمت أنت أو فريقك ببنائه والذي يخدم غرضًا مشابهًا.
  • ابدأ بقالب Azure QuickStart. سترى كيف في الجزء التالي.

أيًا كان النهج الخاص بك، وكتابة قالب ينطوي على العمل مع محرر النصوص. يمكنك إحضار محرر المفضلة لديك ولكن ⁧⁩ملحق أدوات ⁩Azure Resource Manager⁧⁩ الخاص بـ Visual Studio Code مصمم خصيصًا لمهمة إنشاء قوالب. هذا الملحق يجعل من السهل التنقل في التعليمات البرمجية للقالب، ويوفر الإكمال التلقائي للعديد من المهام الشائعة.

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

في الوحدة التالية، سنقوم بفحص القالب الموجود والمزيد من التفاصيل ثم نشرها من AZURE CLI.