توزيع سير عمل Azure Logic Apps باستخدام قالب 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 إلى جعل عمليات التوزيع أسرع وأكثر قابلية للتكرار. على سبيل المثال، لم تعد مضطرًا لإنشاء جهاز ظاهري في المدخل، والانتظار حتى الانتهاء من هذه العملية، ثم إنشاء الجهاز الظاهري التالي، وهكذا. يعتني Resource Manager بالنشر بأكمله بالنسبة لك.

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

  • القوالب تحسن التناسق.

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

  • تعبّر Templates عن عمليات النشر المعقدة.

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

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

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

  • القوالب هي تعليمات برمجية.

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

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

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

  • القوالب قابلة للربط.

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

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

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

إشعار

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

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

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

يمكن أن يحتوي قالب Resource Manager على المقاطع التالية:

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

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

المعلمات

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

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

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

المتغيرات

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

فيما يلي مثال يوضح بعض المتغيرات التي توضح سمات الاتصال بالشبكة بالنسبة إلى جهاز ظاهري ما.

"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،⁩ وهي المعلومات التي لا تعرفها حتى يتم تشغيل التوزيع.

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

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

كيف يمكنني توزيع سير عمل Azure Logic Apps في قالب؟

سير عمل Azure Logic Apps هو مورد في 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).

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

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

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

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

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

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

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

في الدرس التالي، سنستكشف قالب موجود ونقوم بتوزيعه من AZURE CLI.