بدء تشغيل دفتر تشغيل من الإخطارات على الويب

يسمح إخطار على الويب لخدمة خارجية ببدء تشغيل دفتر تشغيل معين في تلقائية Azure من خلال طلب HTTP واحد. وتشمل الخدمات الخارجية خدمات Azure DevOps GitHub وسجلات Azure Monitor والتطبيقات المخصصة. يمكن لمثل هذه الخدمة أن تستخدم إخطار على الويب لبدء تشغيل دفتر التشغيل دون تنفيذ API أتمتة Azure الكامل. يمكنك مقارنة إخطار على الويب إلى أساليب أخرى لبدء تشغيل دفتر تشغيل في بدء تشغيل دفتر تشغيل في أتمتة Azure.

WebhooksOverview

لفهم متطلبات العميل ل TLS 1.2 أو أعلى مع خطافات الويب، راجع TLS ل Azure Automation.

خصائص إخطار على الويب

يصف الجدول التالي الخصائص التي يجب تكوينها لإخطار على الويب

الخاصية الوصف
الاسم اسم إخطار على الويب. يمكنك تقديم أي اسم تريده، مادام أنه لا يتعرض للعميل. يتم استخدامه فقط لتحديد دفتر التشغيل في أتمتة Azure. كأفضل ممارسة، يجب إعطاء إخطار على الويب اسم متعلق بالعميل الذي يستخدمه.
عنوان URL عنوان URL الخاص بإخطار على الويب. هذا هو العنوان الفريد الذي يستدعيه عميل باستخدام HTTP POST لبدء تشغيل دفتر التشغيل المرتبط بإ.خطار على الويب. يتم إنشاؤه تلقائيا عند إنشاء إخطار على الويب. لا يمكنك تحديد عنوان URL مخصص.

يحتوي عنوان URL على رمز أمان يسمح لنظام جهة خارجية باستدعاء دفتر التشغيل بدون مصادقة إضافية. لهذا السبب، يجب أن تتعامل مع عنوان URL ككلمة مرور. لأسباب أمنية، يمكنك فقط عرض عنوان URL في مدخل Azure عند إنشاء إخطار على الويب. لاحظ عنوان URL في موقع آمن للاستخدام في المستقبل.
تاريخ انتهاء الصلاحية تاريخ انتهاء صلاحية إخطار على الويب، وبعد ذلك لم يعد من الممكن استخدامه. يمكنك تعديل تاريخ انتهاء الصلاحية بعد إنشاء إخطار على الويب طالما لم تنته صلاحية هذا الإخطار.
مُمَكّن إعداد يشير إلى ما إذا كان الإخطار على الويب ممكنًا بشكل افتراضي عند إنشائه. إذا قمت بتعيين هذه الخاصية إلى معطَل، لا يمكن لأي عميل استخدام إخطار على الويب. يمكنك تعيين هذه الخاصية عند إنشاء إخطار على الويب أو أي وقت آخر بعد إنشائه.

المعلمات المستخدمة عند بدء إخطار على الويب تشغل دفتر تشغيل

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

لتلقي البيانات من العميل، يدعم دفتر التشغيل معلمة واحدة تسمى WebhookData. تُعرّف هذه المعلمة عنصر يحتوي على بيانات يتضمنها العميل في طلب POST.

خصائص WebhookData

تحظى ⁧WebhookData⁩ المعلمة بالخصائص التالية:

الخاصية ‏‏الوصف
WebhookName اسم إخطار على الويب.
عنوان الطلب PSCustomObject يحتوي على رؤوس طلب POST الوارد.
RequestBody نص طلب POST الوارد. يحتفظ هذا النص الأساسي بأي تنسيق بيانات، مثل السلسلة أو JSON أو XML أو ترميز النموذج. يجب كتابة دفتر التشغيل للعمل مع تنسيق البيانات المتوقع.

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

إشعار

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

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

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

على سبيل المثال، إذا كنت تقوم بتشغيل دفتر التشغيل التالي من مدخل Azure وتريد تمرير بعض عينات بيانات إخطار على الويب للاختبار، يجب تمرير البيانات في JSON في واجهة المستخدم.

معلمة WebhookData من واجهة المستخدم

للحصول على مثال دفتر التشغيل التالي، دعنا نعرّف الخصائص التالية WebhookData لـ:

  • WebhookName: MyWebhook
  • RequestBody: *[{'ResourceGroup': 'myResourceGroup','Name': 'vm01'},{'ResourceGroup': 'myResourceGroup','Name': 'vm02'}]*

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

{"WebhookName":"mywebhook","RequestBody":"[\r\n {\r\n \"ResourceGroup\": \"vm01\",\r\n \"Name\": \"vm01\"\r\n },\r\n {\r\n \"ResourceGroup\": \"vm02\",\r\n \"Name\": \"vm02\"\r\n }\r\n]"}

بدء تشغيل المعلمة WebhookData من واجهة المستخدم

إشعار

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

أمان إخطار على الويب

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

ضع في الاعتبار الإستراتيجيات التالية:

  • يمكنك تضمين منطق داخل دفتر تشغيل لتحديد ما إذا قد تم استدعاؤه من خلال إخطار على الويب. لديك دفتر التشغيل-تحقق من WebhookName خاصية WebhookData المعلمة. يمكن لدفتر التشغيل إجراء مزيد من التحقق من الصحة من خلال البحث عن معلومات معينة في RequestHeaderRequestBody وخصائص.

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

  • يدعم Azure Automation علامات خدمة الشبكة الظاهرية Azure، وتحديدًا GuestAndHybridManagement. يمكنك استخدام علامات الخدمة لتعريف عناصر التحكم في الوصول إلى الشبكة على مجموعات أمان الشبكة أو Azure Firewall. يمكن استخدام علامات الخدمة بدلا من عناوين IP معينة عند إنشاء قواعد الأمان. من خلال تحديد اسم علامة الخدمة GuestAndHybridManagement في المصدر المناسب أو حقل الوجهة لقاعدة ما، يمكنك السماح أو رفض حركة المرور لخدمة Automation. لا تدعم علامة الخدمة هذه السماح بمزيد من التحكم الدقيق عن طريق تقييد نطاقات IP بمنطقة معينة.

إنشاء إخطار على الويب

إشعار

عند استخدام خطاف الويب مع دفتر تشغيل PowerShell 7، فإنه يحول معلمة إدخال خطاف الويب تلقائيا إلى JSON غير صالح. لمزيد من المعلومات، راجع المشكلات المعروفة - PowerShell 7.1 (معاينة). نوصي باستخدام خطاف الويب مع دفتر تشغيل PowerShell 5.

  1. إنشاء دفتر تشغيل PowerShell باستخدام التعليمات البرمجية التالية:

    param
    (
        [Parameter(Mandatory=$false)]
        [object] $WebhookData
    )
    
    write-output "start"
    write-output ("object type: {0}" -f $WebhookData.gettype())
    write-output $WebhookData
    write-output "`n`n"
    write-output $WebhookData.WebhookName
    write-output $WebhookData.RequestBody
    write-output $WebhookData.RequestHeader
    write-output "end"
    
    if ($WebhookData.RequestBody) { 
        $names = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)
    
            foreach ($x in $names)
            {
                $name = $x.Name
                Write-Output "Hello $name"
            }
    }
    else {
        Write-Output "Hello World!"
    }
    
  2. إنشاء إخطار على الويب باستخدام مدخل Microsoft Azure أو PowerShell أو واجهة برمجة تطبيقات REST. يتطلب الإخطار على الويب كتاب تشغيل منشور. يُستخدم هذا التحرك خلال إصدار معدل من دفتر التشغيل الذي تم إنشاؤه من إنشاء دفتر تشغيل أتمتة Azure.

    1. قم بتسجيل الدخول إلى بوابة Azure.

    2. في مدخل Azure، انتقل إلى حساب Automation خاصتك.

    3. حدد "Runbooks" في "Process Automation" لفتح قائمة دفاتر التشغيل.

    4. حدد دفتر التشغيل من القائمة لفتح صفحة نظرة عامة على دفتر التشغيل.

    5. حدد قم بإضافة إخطار على الويب لفتح صفحة إضافة إخطار على الويب

      صفحة نظرة عامة على دفتر التشغيل مع تمييز أضف إخطار على الويب

    6. في الصفحة أضف إخطار على الويب، حدد إنشاء إخطار ويب جديد.

      قم بإضافة صفحة إخطار على الويب مع إنشاء تمييز.

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

    8. انقر فوق رمز النسخ أو اضغط Ctrl + C نسخ URL من إخطار على الويب. ثم احفظ عنوان URL إلى موقع آمن.

      صفحة إخطار Creaye مع عنوان URL بشكل بارز.

      هام

      بمجرد إنشاء إخطار على الويب لا يمكنك استرداد عنوان URL مرة أخرى. تأكد من نسخه وتسجيله كما هو بالأعلى.

    9. حدد موافق للعودة إلى صفحة أضف إخطار على الويب.

    10. من الصفحة إضافة Webhook حدد تكوين المعلمات وتشغيل الإعدادات لفتح صفحة المعلمات.

      إضافة صفحة إخطار ويب مع المعلمات المميزة

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

    12. في الصفحة أضف إخطار على الويب، حدد إنشاء إخطار ويب جديد. يتم إنشاء إخطار ويب ويتم إرجاعك إلى صفحة نظرة عامة على Runbook.


استخدم إخطار ويب

يستخدم هذا المثال أمر PowerShell cmdlet Invoke-RestMethod لإرسال طلب POST إلى إخطار الويب الجديد الخاص بك

  1. إعداد القيم للتمرير إلى دفتر التشغيل كإطار لاستدعاء إخطار الويب. بالنسبة للقيم البسيطة نسبيا، يمكنك كتابة القيم كما يلي:

    $Names  = @(
                @{ Name="Hawaii"},
                @{ Name="Seattle"},
                @{ Name="Florida"}
            )
    
    $body = ConvertTo-Json -InputObject $Names
    
  2. بالنسبة إلى مجموعات أكبر، قد ترغب في استخدام ملف. قم بإنشاء ملف يسمى names.json والصق التعليمة البرمجية التالية فيه.

    [
        { "Name": "Hawaii" },
        { "Name": "Florida" },
        { "Name": "Seattle" }
    ]
    

    تغيير قيمة المتغير$file مع المسار الفعلي إلى ملف json قبل تشغيل أوامر PowerShell التالية.

    # Revise file path with actual path
    $file = "path\names.json"
    $bodyFile = Get-Content -Path $file 
    
  3. تشغيل أوامر PowerShell التالية لاستدعاء إخطار ويب باستخدام API REST.

    $response = Invoke-WebRequest -Method Post -Uri $webhookURI -Body $body -UseBasicParsing
    $response
    
    $responseFile = Invoke-WebRequest -Method Post -Uri $webhookURI -Body $bodyFile -UseBasicParsing
    $responseFile
    

    لأغراض توضيحية، تم إجراء استدعاءين للأسلوبين المختلفتين لإنتاج الجسم. للإنتاج، استخدم أسلوب واحد فقط. يجب أن الناتج مشابها كما يلي (يظهر ناتج واحد فقط):

    الناتج من استدعاء إخطار ويب.

    يتلقى العميل أحد تعلمات الإرجاع البرمجية التالية من POST الطلب.

    رمز النص ‏‏الوصف
    202 مقبول تم قبول الطلب، وتم وضع دفتر التشغيل في قائمة الانتظار بنجاح.
    400 طلب غير صالح لم يتم قبول الطلب لأحد الأسباب التالية:
    • انتهت صلاحية إخطار الويب.
    • تم تعطيل إخطار الويب.
    • الرمز المميز في محدد موقع المعلومات غير صالح.
    404 غير موجود لم يتم قبول الطلب لأحد الأسباب التالية:
    • لم يتم العثور على إخطار الويب.
    • لم يتم العثور على دفتر التشغيل.
    • لم يتم العثور على الحساب.
    500 خطأ خادم داخلي كان محدد موقع الويب (URL) صالحًا، ولكن حدث خطأ. قم بإعادة إرسال الطلب.

    على افتراض نجاح الطلب، تحتوي استجابة إخطار الويب على معرف المهمة بتنسيق JSON كما هو موضح أدناه. يحتوي على معرف مهمة واحد، ولكن تنسيق JSON يسمح بالتحسينات المستقبلية المحتملة.

    {"JobIds":["<JobId>"]}
    
  4. سيتم استخدام PowerShell cmdlet الحصول على AzAutomationJobOutput للحصول على الناتج. يمكن أيضا استخدام API أتمتة Azure.

    #isolate job ID
    $jobid = (ConvertFrom-Json ($response.Content)).jobids[0]
    
    # Get output
    Get-AzAutomationJobOutput `
        -AutomationAccountName $automationAccount `
        -Id $jobid `
        -ResourceGroupName $resourceGroup `
        -Stream Output
    

    عند تشغيل دفتر تشغيل تم إنشاؤه في الخطوة السابقة، فإنه سيتم إنشاء وظيفة ويجب أن يبدو الإخراج مشابها لما يلي:

    الناتج من استدعاء إخطار ويب.

تحديث إخطار على الويب

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

  1. انتقل إلى دفتر التشغيل الذي يحتوي على إخطار ويب
  2. ضمن الموارد، حدد إخطار على الويب، ثم إخطارات الويب التي تريد تمديدها.
  3. من صفحة إخطار الويب، اختر تاريخ انتهاء صلاحية جديد ووقت جديد ثم حدد حفظ.

مراجعة استدعاء API Webhook - Update و PowerShell cmdlet Set-AzAutomationWebhook للتعديلات المحتملة الأخرى.

تنظيف الموارد

فيما يلي أمثلة لإزالة إخطار ويب من كتاب التشغيل التلقائي.

  • باستخدام PowerShell، يمكن استخدام cmdlet إزالة AzAutomationWebhook كما هو موضح أدناه. لم يتم إرجاع أي ناتج.

    Remove-AzAutomationWebhook `
        -ResourceGroup $resourceGroup `
        -AutomationAccountName $automationAccount `
        -Name $psWebhook
    
  • باستخدام REST، يمكن استخدام REST Webhook - حذف API كما هو موضح أدناه.

    Invoke-WebRequest -Method Delete -Uri $restURI -Headers $authHeader
    

    ناتج StatusCode : 200 يعني حذف ناجح.

إنشاء دفتر التشغيل وإخطار ويب مع قالب ARM

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

  1. قم بإنشاء ملف يسمى webhook_deploy.json والصق التعليمة البرمجية التالية فيه.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "automationAccountName": {
                "type": "String",
                "metadata": {
                    "description": "Automation account name"
                }
            },
            "webhookName": {
                "type": "String",
                "metadata": {
                    "description": "Webhook Name"
                }
            },
            "runbookName": {
                "type": "String",
                "metadata": {
                    "description": "Runbook Name for which webhook will be created"
                }
            },
            "WebhookExpiryTime": {
                "type": "String",
                "metadata": {
                    "description": "Webhook Expiry time"
                }
            },
            "_artifactsLocation": {
                "defaultValue": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.automation/101-automation/",
                "type": "String",
                "metadata": {
                    "description": "URI to artifacts location"
                }
            }
        },
        "resources": [
            {
                "type": "Microsoft.Automation/automationAccounts",
                "apiVersion": "2020-01-13-preview",
                "name": "[parameters('automationAccountName')]",
                "location": "[resourceGroup().location]",
                "properties": {
                    "sku": {
                        "name": "Free"
                    }
                },
                "resources": [
                    {
                        "type": "runbooks",
                        "apiVersion": "2018-06-30",
                        "name": "[parameters('runbookName')]",
                        "location": "[resourceGroup().location]",
                        "dependsOn": [
                            "[parameters('automationAccountName')]"
                        ],
                        "properties": {
                            "runbookType": "Python2",
                            "logProgress": "false",
                            "logVerbose": "false",
                            "description": "Sample Runbook",
                            "publishContentLink": {
                                "uri": "[uri(parameters('_artifactsLocation'), 'scripts/AzureAutomationTutorialPython2.py')]",
                                "version": "1.0.0.0"
                            }
                        }
                    },
                    {
                        "type": "webhooks",
                        "apiVersion": "2018-06-30",
                        "name": "[parameters('webhookName')]",
                        "dependsOn": [
                            "[parameters('automationAccountName')]",
                            "[parameters('runbookName')]"
                        ],
                        "properties": {
                            "isEnabled": true,
                            "expiryTime": "[parameters('WebhookExpiryTime')]",
                            "runbook": {
                                "name": "[parameters('runbookName')]"
                            }
                        }
                    }
                ]
            }
        ],
        "outputs": {
            "webhookUri": {
                "type": "String",
                "value": "[reference(parameters('webhookName')).uri]"
            }
        }
    }
    
  2. يقوم نموذج التعليمات البرمجية PowerShell التالي بتوزيع القالب من الجهاز. قم بتوفير قيمة مناسبة للمتغيرات، ثم قم بتنفيذ البرنامج النصي.

    $resourceGroup = "resourceGroup"
    $templateFile = "path\webhook_deploy.json"
    $armAutomationAccount = "automationAccount"
    $armRunbook = "ARMrunbookName"
    $armWebhook = "webhookName"
    $webhookExpiryTime = "12-31-2022"
    
    New-AzResourceGroupDeployment `
        -Name "testDeployment" `
        -ResourceGroupName $resourceGroup `
        -TemplateFile $templateFile `
        -automationAccountName $armAutomationAccount `
        -runbookName $armRunbook `
        -webhookName $armWebhook `
        -WebhookExpiryTime $webhookExpiryTime
    

    إشعار

    لأسباب أمنية، يتم إرجاع عنوان URI فقط في المرة الأولى التي يتم فيها نشر قالب.

الخطوات التالية