تمرين - نشر وتصدير سير عمل Logic App باستخدام قالب ARM

مكتمل

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

تحديث قالبنا لاستخدام معلمات القالب

  1. قم بعمل نسخة من القالب الأساسي الذي استخدمناه في التمرين السابق مع الأمر ⁧cp⁩ التالي.

    cp basic-template.json template-with-params.json
    
  2. لتحرير القالب، افتحه في المحرر المضمن مع الأمر ⁧code⁩ التالي.

    code template-with-params.json
    

    أول شيء سنفعله هو إضافة المعلمات حتى نتمكن من تخصيص اسم التطبيق وموقعه بسهولة.

  3. استبدال القسم ⁧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. الآن بعد أن قمنا بتعريف معلمتين جديدتين، دعونا نستخدمهما في القالب عن طريق استبدال القيم ذات الترميز الثابت مع مراجع إلى المعلمات الجديدة.

  4. استبدل الحقلين ⁧name⁩ و⁧location⁩ في قسم الموارد في القالب لاستخدام المعلمات الجديدة كما هو موضح في القصاصة البرمجية التالية.

    "name": "[parameters('logicAppName')]",
    "location": "[parameters('location')]",
    
  5. استبدال القسم ⁧outputs⁩ الموجود أسفل القالب بالتعليمات البرمجية التالية. نقوم بتحديث قيمة متغير القالب ⁧logicAppUrl⁩ لاستخدام المعلمة ⁧logicAppName⁩ كما هو موضح في القصاصة البرمجية التالية.

    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]"
        }
     }
    
  6. حفظ كافة التغييرات إلى template-with-params.js⁧.

نشر التطبيق المنطقي لدينا باستخدام القالب المحدد بالمعلمات

هناك طريقتان لتوفير معلمات إلى القالب الخاص بنا في أثناء النشر باستخدام العلامة ⁧--parameters⁩ في الأمر ⁧az deployment group create⁩. يمكننا تمرير URI في ملف معلمات بعيد أو اسم ملف محلي. دعنا نستخدم ملفًا محليًا.

إنشاء ملف JSON المعلمات

  1. إنشاء ملف جديد يسمى ⁧params.json⁩ في محرر التعليمات البرمجية المضمنة مع الأمر التالي.

    code params.json
    
  2. الصق JSON التالية في ⁧⁩params.js⁧⁩ ثم احفظ التغييرات.

    { 
        "logicAppName": { 
            "value": "myLogicApp" 
        } 
    }
    

التحقق من صحة القالب

  1. من سحابة 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 بتعبئة معلمات القالب والتحقق مما إذا كان القالب سيعمل بنجاح في الاشتراك.

    إذا فشلت عملية التحقق من الصحة، فستشاهد وصفًا مفصلاً للفشل في الإخراج.

نشر قالب مع معلمات من ملف محلي

  1. قم بتشغيل الأمر التالي في 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⁩.

  2. لمشاهدة التطبيق وهو يعمل، ابحث عن قيمة ⁧⁩logicAppUrl⁧⁩ في نتيجة JSON. حدد عنوان URL وقم بلصقه في نافذة مستعرض جديدة. ستعرض الصفحة رسالة Hello Logic Apps Template!.

نشر قالب مع معلمات من سطر الأوامر

بدلاً من تحرير ملف معلمات في كل مرة نريد النشر من سطر الأوامر، يمكننا توفير المعلمات في سلسلة JSON على سطر الأوامر.

  1. تشغيل الأمر التالي في 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⁩.

  2. لمشاهدة التطبيق وهو يعمل، ابحث عن قيمة ⁧⁩logicAppUrl⁧⁩ في نتيجة JSON. حدد عنوان URL وقم بلصقه في نافذة مستعرض جديدة. ستعرض الصفحة رسالة Hello Logic Apps Template!.

  3. تشغيل الأمر التالي لإدراج كافة عمليات سير عمل 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. ولكن دعونا تمرير في بعض القيم مع الطلب، ويكون التطبيق القيام حساب بالنسبة إلينا. سنقوم بحساب منطقة بسيط. على افتراض المدخلات التي نمر بها هي ارتفاع وعرض مستطيل، سنعود المنطقة. سنقوم بعد ذلك بنشر التطبيق الجديد ونرى أنه يعمل.

  1. فتح ⁧⁩template-with-params.js⁩ في المحرر المضمن بتشغيل الأمر التالي في Shell Cloud.

    code template-with-params.json
    
  2. استبدل الحقل ⁧relativePath⁩ إلى قسم ⁧⁩المدخلات⁧⁩ في مشغّل طلب HTTP كما هو موضح في القصاصة البرمجية التالية.

    "inputs": {
        "method": "GET",
        "relativePath": "{width}/{height}",
        "schema": {}
    }
    

    الإدخال ⁧relativePath⁩يحدد المعلمات التي نريد أن يقبلها عنوان URL لنقطة نهاية HTTP. في هذه الحالة، نحدد المعلمتين، ⁧⁩العرض⁧⁩ ⁧⁩والارتفاع⁧⁩. سنستخدم قيم هذه المعلمات لحساب منطقة ما وإرجاع النتيجة.

  3. تحديث نص الإجراء استجابة مع السطر التالي.

    "body": "Response from @{workflow().name}  Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height'])  , int(triggerOutputs()['relativePathParameters']['width'])  )}",
    

    ردنا المحدث يقوم بما يلي:

    • طباعة اسم التطبيق المنطقي. فإنه يقدم استدعاء للوظيفة ⁧workflow()⁩ لإرجاع معلومات حول سير العمل، ومن ذلك فإننا مرجع الخاصية اسم.
    • تقوم بإرجاع المنتج ⁧(الوظيفة mul()⁩) من مكافئات العدد الصحيح ⁧(وظيفة التحويل int()⁩) لقيم سلسلة الارتفاع والعرض لمعلمات URL.
  4. حفظ كافة التغييرات إلى template-with-params.js⁧.

  5. التحقق من صحة القالب بعد هذه التغييرات مع الأمر ⁧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"}}'
    
  6. قم بتشغيل الأمر التالي لنشر التغييرات لدينا إلى تطبيق منطقي يسمى ⁧⁩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⁩.

  7. لمشاهدة التطبيق وهو يعمل، ابحث عن قيمة ⁧⁩logicAppUrl⁧⁩ في نتيجة JSON. حدد عنوان URL وقم بلصقه في نافذة مستعرض جديدة.

  8. قم بتحديث عنوان URL في المستعرض، ثم قم بتغيير ⁧/triggers/manual/paths/invoke?api⁩ إلى ⁧/triggers/manual/paths/invoke/{width}/{height}?api⁩، حيث يكون ⁧⁩{width}⁧⁩ ⁧⁩و{height}⁧⁩ قيمتي عددين صحيحين لعرض المنطقة التي نريد حسابها وارتفاعها. على سبيل المثال، /triggers/manual/paths/invoke/6/7?api⁩. ستُدرج الاستجابة من التطبيق اسم سير العمل والمنطقة المحسوبة، كما هو موضح في لقطة الشاشة التالية.

    Web browser displaying response from our app called calculate area..

  9. تشغيل الأمر التالي لإدراج كافة عمليات سير عمل 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