تمرين - نشر وتصدير سير عمل Logic App باستخدام قالب ARM
في التمرين السابق، قمنا بنشر تطبيق باستخدام قالب Azure Resource Manager أساسي. كان القالب غير مرن من حيث إن كل شيء كان من الصعب ترميزه. على وجه الخصوص، لتغيير اسم سير العمل أو الموقع الذي تم نشر التطبيق إليه، يجب عليك تحرير القالب نفسه. في وحدات السيناريو حيث تقوم عمليات نشر متعددة في بيئة مكتوبة، يصبح تحرير القالب باليد cumbersome. نهج أفضل هو توفير قيم كمعلمات لتخصيص توزيع الموارد.
تحديث قالبنا لاستخدام معلمات القالب
قم بعمل نسخة من القالب الأساسي الذي استخدمناه في التمرين السابق مع الأمر
cp التالي.cp basic-template.json template-with-params.jsonلتحرير القالب، افتحه في المحرر المضمن مع الأمر
code التالي.code template-with-params.jsonأول شيء سنفعله هو إضافة المعلمات حتى نتمكن من تخصيص اسم التطبيق وموقعه بسهولة.
استبدال القسم
parameters من القالب مع التعليمات البرمجية التالية لإضافة معلمتين جديدتين، logicAppName وlocationكما هو موضح في القصاصة البرمجية التالية."parameters": { "logicAppName": { "type": "string", "metadata": { "description": "The name of the logic app to create." } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } },كلتا المعلمتين هي سلاسل. لا نقم بتوفير قيمة افتراضية للمعلمة
logicAppName، ما يعني توفير قيمة واحدة في وقت النشر. في المقابل، location يعد اختياريًا منذ أن وفرنا قيمة افتراضية.القيمة الافتراضية للمعلمة
location هي موقع مجموعة الموارد التي يتم نشر التطبيق فيها. نحصل على تلك القيمة عن طريق الرجوع إلى خاصية الموقع من مجموعة الموارد التي تم إرجاعها بواسطة وظيفة القالب resourceGroup(). تبدأ التعبيرات وتنتهي بأقواس: [ و]، على التوالي. يتم تقييم قيمة التعبير عند نشر القالب. يمكن أن يرجع التعبير سلسلة أو عددًا صحيحًا أو منطقيًا أو صفيفًا أو كائنًا. الحد الأقصى لعدد المعلمات التي يمكنك تعريفها في قالب هو 256. الآن بعد أن قمنا بتعريف معلمتين جديدتين، دعونا نستخدمهما في القالب عن طريق استبدال القيم ذات الترميز الثابت مع مراجع إلى المعلمات الجديدة.استبدل الحقلين
name وlocation في قسم الموارد في القالب لاستخدام المعلمات الجديدة كما هو موضح في القصاصة البرمجية التالية."name": "[parameters('logicAppName')]", "location": "[parameters('location')]",استبدال القسم
outputs الموجود أسفل القالب بالتعليمات البرمجية التالية. نقوم بتحديث قيمة متغير القالب logicAppUrl لاستخدام المعلمة logicAppName كما هو موضح في القصاصة البرمجية التالية."outputs": { "logicAppUrl": { "type": "string", "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]" } }حفظ كافة التغييرات إلى template-with-params.js.
نشر التطبيق المنطقي لدينا باستخدام القالب المحدد بالمعلمات
هناك طريقتان لتوفير معلمات إلى القالب الخاص بنا في أثناء النشر باستخدام العلامة --parameters في الأمر az deployment group create. يمكننا تمرير URI في ملف معلمات بعيد أو اسم ملف محلي. دعنا نستخدم ملفًا محليًا.
إنشاء ملف JSON المعلمات
إنشاء ملف جديد يسمى
params.json في محرر التعليمات البرمجية المضمنة مع الأمر التالي.code params.jsonالصق JSON التالية في params.js ثم احفظ التغييرات.
{ "logicAppName": { "value": "myLogicApp" } }
التحقق من صحة القالب
من سحابة Shell، تشغيل
az deployment group validate للتحقق من صحة القالب.az deployment group validate \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --template-file template-with-params.json \ --parameters @params.jsonتشير الوسيطة
--template-fileإلى القالب المحلي. اسم ملف القالب template-with-params.js.ترى كتلة JSON كبيرة كمخرج، التي تخبرك أن القالب قد اجتاز التحقق من الصحة.
تقوم Azure Resource Manager بتعبئة معلمات القالب والتحقق مما إذا كان القالب سيعمل بنجاح في الاشتراك.
إذا فشلت عملية التحقق من الصحة، فستشاهد وصفًا مفصلاً للفشل في الإخراج.
نشر قالب مع معلمات من ملف محلي
قم بتشغيل الأمر التالي في Cloud Shell لنشر التطبيق المنطقي الذي يحمل اسم التطبيق المأخوذ من الملف params.js.
locationلم يتم تعيين المعلمة في params.jsعلى الملف، لذلك يتم استخدام الافتراضي.az deployment group create \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --template-file template-with-params.json \ --parameters @params.jsonسيستغرق النشر بضع ثوانٍ ويمكنك مشاهدة التقدم في سطر الأوامر Cloud Shell. عند الانتهاء من التوزيع، يجب أن تشاهد
provisioningState في النتيجة JSON مع القيمة Succeeded.لمشاهدة التطبيق وهو يعمل، ابحث عن قيمة logicAppUrl في نتيجة JSON. حدد عنوان URL وقم بلصقه في نافذة مستعرض جديدة. ستعرض الصفحة رسالة Hello Logic Apps Template!.
نشر قالب مع معلمات من سطر الأوامر
بدلاً من تحرير ملف معلمات في كل مرة نريد النشر من سطر الأوامر، يمكننا توفير المعلمات في سلسلة JSON على سطر الأوامر.
تشغيل الأمر التالي في Shell Cloud لنشر التطبيق المنطقي مع اسم التطبيق وموقعه تغذية كسلسلة JSON على سطر الأوامر.
az deployment group create \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"MyLogicApp2"}, "location": {"value":"East US"}}'سيستغرق النشر بضع ثوانٍ ويمكنك مشاهدة التقدم في سطر الأوامر Cloud Shell. عند الانتهاء من التوزيع، يجب أن تشاهد
provisioningState في النتيجة JSON مع القيمة Succeeded.لمشاهدة التطبيق وهو يعمل، ابحث عن قيمة logicAppUrl في نتيجة JSON. حدد عنوان URL وقم بلصقه في نافذة مستعرض جديدة. ستعرض الصفحة رسالة Hello Logic Apps Template!.
تشغيل الأمر التالي لإدراج كافة عمليات سير عمل Logic App التي قمنا بنشرها حتى الآن.
az resource list \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsvهذا الأمر سوف يدرج ثلاثة من عمليات سير عمل Logic App قمنا بنشرها حتى الآن، وكلها من قالب.
تحديث إجراء التطبيق في قالب Azure Resource Manager
دعونا الآن نحول اهتمامنا إلى جعل التطبيق لدينا يفعل أكثر قليلاً من مجرد إرسال رسالة ثابتة لنا. سنحتفظ بالتطبيق كسير عمل تم تشغيله من خلال HTTP وسيظل ذلك يعود إلى استجابة HTTP. ولكن دعونا تمرير في بعض القيم مع الطلب، ويكون التطبيق القيام حساب بالنسبة إلينا. سنقوم بحساب منطقة بسيط. على افتراض المدخلات التي نمر بها هي ارتفاع وعرض مستطيل، سنعود المنطقة. سنقوم بعد ذلك بنشر التطبيق الجديد ونرى أنه يعمل.
فتح template-with-params.js في المحرر المضمن بتشغيل الأمر التالي في Shell Cloud.
code template-with-params.jsonاستبدل الحقل
relativePath إلى قسم المدخلات في مشغّل طلب HTTP كما هو موضح في القصاصة البرمجية التالية."inputs": { "method": "GET", "relativePath": "{width}/{height}", "schema": {} }الإدخال
relativePathيحدد المعلمات التي نريد أن يقبلها عنوان URL لنقطة نهاية HTTP. في هذه الحالة، نحدد المعلمتين، العرض والارتفاع. سنستخدم قيم هذه المعلمات لحساب منطقة ما وإرجاع النتيجة.تحديث نص الإجراء استجابة مع السطر التالي.
"body": "Response from @{workflow().name} Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height']) , int(triggerOutputs()['relativePathParameters']['width']) )}",ردنا المحدث يقوم بما يلي:
- طباعة اسم التطبيق المنطقي. فإنه يقدم استدعاء للوظيفة
workflow() لإرجاع معلومات حول سير العمل، ومن ذلك فإننا مرجع الخاصية اسم. - تقوم بإرجاع المنتج (الوظيفة
mul()) من مكافئات العدد الصحيح (وظيفة التحويلint()) لقيم سلسلة الارتفاع والعرض لمعلمات URL.
- طباعة اسم التطبيق المنطقي. فإنه يقدم استدعاء للوظيفة
حفظ كافة التغييرات إلى template-with-params.js.
التحقق من صحة القالب بعد هذه التغييرات مع الأمر
az deployment group validate في Cloud Shell. نحن نقوم بتعيين اسم التطبيق في هذا المثيل على CalculateArea باستخدام معلمة مضمنة.az deployment group validate \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"CalculateArea"}}'قم بتشغيل الأمر التالي لنشر التغييرات لدينا إلى تطبيق منطقي يسمى CalculateArea. سوف نحذف قيمة المعلمة
location واستخدام القيمة الافتراضية فقط.az deployment group create \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --template-file template-with-params.json \ --parameters '{ "logicAppName": {"value":"CalculateArea"}}'سيستغرق النشر بضع ثوانٍ ويمكنك مشاهدة التقدم في سطر الأوامر Cloud Shell. عند الانتهاء من التوزيع، يجب أن تشاهد
provisioningState في النتيجة JSON مع القيمة Succeeded.لمشاهدة التطبيق وهو يعمل، ابحث عن قيمة logicAppUrl في نتيجة JSON. حدد عنوان URL وقم بلصقه في نافذة مستعرض جديدة.
قم بتحديث عنوان URL في المستعرض، ثم قم بتغيير
/triggers/manual/paths/invoke?api إلى /triggers/manual/paths/invoke/{width}/{height}?api، حيث يكون {width} و{height} قيمتي عددين صحيحين لعرض المنطقة التي نريد حسابها وارتفاعها. على سبيل المثال،/triggers/manual/paths/invoke/6/7?api. ستُدرج الاستجابة من التطبيق اسم سير العمل والمنطقة المحسوبة، كما هو موضح في لقطة الشاشة التالية.
.تشغيل الأمر التالي لإدراج كافة عمليات سير عمل Logic App التي قمنا بنشرها حتى الآن.
az resource list \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --resource-type Microsoft.Logic/workflows \ --query [*].[name,location] --output tsv
في هذا التمرين، قدمنا المزيد من المرونة إلى نموذجنا مع المعلمات. نحن زودنا تلك المعلمات على سطر الأوامر واستخدام ملف محلي. كما قمنا بتحديث الإجراء الذي ينفذه سير العمل البسيط، من خلال تغيير body من الاستجابة التي نعيد إرسالها.
يمكنك تنزيل المعلمات وملفات القوالب من GitHub مع أوامر curl التالية في Cloud Shell.
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/params.json > params-final.json
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/template.json > template-with-params-final.json
هل تحتاج إلى مساعدة؟ راجع دليل استكشاف الأخطاء وإصلاحها الذي نقدمه أو يمكنك توفير ملاحظات معينة عبر الإبلاغ عن مشكلة.