البرنامج التعليمي: تشغيل Azure Functions على حاويات الكائن الثنائي كبير الحجم باستخدام اشتراك حدث

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

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

  • أنشئ حساب تخزين عام v2 في Azure Storage.
  • أنشئ حاوية في blob storage.
  • أنشئ دالة تشغيل Blob Storage المستندة إلى الحدث.
  • أنشئ اشتراك حدث في حاوية كائن ثنائي كبير الحجم.
  • تتبع الأخطاء محليًا باستخدام ngrok عن طريق تحميل الملفات.
  • وزّع إلى Azure وأنشئ اشتراك حدث تمت تصفيته.

هام

تستخدم هذه المقالة علامات التبويب لدعم إصدارات متعددة من نموذج البرمجة Node.js. يتوفر نموذج v4 بشكل عام وتم تصميمه للحصول على تجربة أكثر مرونة وبديهية لمطوري JavaScript وTypeScript. لمزيد من التفاصيل حول كيفية عمل نموذج v4، راجع دليل مطور Azure Functions Node.js. لمعرفة المزيد حول الاختلافات بين v3 وv4، راجع دليل الترحيل.

المتطلبات الأساسية

  • الأداة المساعدة ngrok، التي توفر طريقة لـ Azure لاستدعاء دالة قيد التشغيل محليًا.

  • ملحق تخزين Azure ل Visual Studio Code، الإصدار 5.x بحد أدنى.

إشعار

ملحق Azure Storage ل Visual Studio Code قيد المعاينة حاليا.

إنشاء حساب تخزين

لاستخدام اشتراك حدث مع Azure Storage، ستحتاج إلى حساب تخزين v2 للأغراض العامة. بشكل افتراضي، يمكنك إنشاء حساب التخزين هذا من مشروع Visual Studio Code عندما يكون لديك ملحق Azure Storage مثبتا.

  1. في Visual Studio Code، افتح لوحة الأوامر (اضغط F1)، وأدخل Azure Storage: Create Storage Account.... في المطالبات، قم بتوفير المعلومات التالية:

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

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

  2. بعد إنشاء حساب التخزين، افتح لوحة الأوامر (اضغط F1)، وأدخل Azure Storage: Create Blob Container.... في المطالبات، قم بتوفير المعلومات التالية:

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

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

إنشاء دالة Blob التي تم تشغيلها

عند إنشاء دالة Blob Storage المشغلة باستخدام Visual Studio Code، يمكنك أيضا إنشاء مشروع جديد. ستحتاج إلى تحرير الدالة لاستهلاك اشتراك حدث كمصدر، بدلا من استخدام الحاوية العادية التي تم استقصاءها.

  1. في Visual Studio Code، افتح تطبيق الوظائف.

  2. افتح لوحة الأوامر (اضغط على F1)، وأدخل Azure Functions: Create Function...، وحدد إنشاء مشروع جديد.

  3. بالنسبة إلى مساحة عمل المشروع، حدد موقع الدليل. تأكد من إنشاء مجلد جديد أو اختيار مجلد فارغ لمساحة عمل المشروع.

    لا تختار مجلد مشروع يشكل بالفعل جزءا من مساحة عمل.

  4. في المطالبات، قم بتوفير المعلومات التالية:

    المطالبة الإجراء
    تحديد لغة حدد C#‎.
    حدد وقت تشغيل .NET حدد .NET 6.0 Isolated LTS للتشغيل في عملية عامل معزولة أو .NET 6.0 LTS قيد المعالجة.
    تحديد قالب للدالة الأولى لمشروعك حدد Azure Blob Storage trigger.
    توفير اسم دالة أدخل BlobTriggerEventGrid.
    توفير مساحة اسم أدخل My.Functions.
    حدد الإعداد من "local.settings.json" حدد Create new local app setting.
    تحديد حساب تخزين حدد حساب التخزين الذي أنشأته من القائمة.
    هذا هو المسار داخل حساب التخزين الذي سيراقبه المشغل اقبل القيمة الافتراضية samples-workitems.
    تحديد الطريقة التي تريد فتح مشروعك بها حدد Open in current window.
    المطالبة الإجراء
    تحديد لغة حدد Python.
    حدد مترجم Python لإنشاء بيئة افتراضية حدد مترجم Python المفضل لديك. إذا لم يظهر خيار، أدخل المسار الكامل إلى ثنائي Python.
    تحديد قالب للدالة الأولى لمشروعك حدد Azure Blob Storage trigger.
    توفير اسم دالة أدخل BlobTriggerEventGrid.
    حدد الإعداد من "local.settings.json" حدد Create new local app setting.
    تحديد حساب تخزين حدد حساب التخزين الذي أنشأته من القائمة.
    هذا هو المسار داخل حساب التخزين الذي سيراقبه المشغل اقبل القيمة الافتراضية samples-workitems.
    تحديد الطريقة التي تريد فتح مشروعك بها حدد Open in current window.
    المطالبة الإجراء
    تحديد لغة حدد Java.
    تحديد إصدار من Java حدد Java 11 أو Java 8، إصدار Java الذي تعمل عليه وظائفك في Azure والتي تحققت منها محليا.
    إدخال معرف مجموعة حدد com.function.
    إدخال معرف بيانات اصطناعية حدد BlobTriggerEventGrid.
    إدخال إصدار حدد 1.0-SNAPSHOT.
    إدخال اسم حزمة حدد com.function.
    إدخال اسم تطبيق اقبل الاسم الذي تم إنشاؤه الذي يبدأ بـ BlobTriggerEventGrid.
    تحديد أداة الإنشاء لمشروع Java حدد Maven.
    تحديد الطريقة التي تريد فتح مشروعك بها حدد Open in current window.
    المطالبة الإجراء
    حدد اللغة الخاصة بمشروع الدالة حدد TypeScript.
    تحديد نموذج برمجة TypeScript حدد Model V4.
    تحديد قالب للدالة الأولى لمشروعك حدد Azure Blob Storage trigger.
    توفير اسم دالة أدخل BlobTriggerEventGrid.
    حدد الإعداد من "local.settings.json" حدد Create new local app setting.
    تحديد حساب تخزين حساب التخزين الذي أنشأته.
    هذا هو المسار داخل حساب التخزين الذي سيراقبه المشغل اقبل القيمة الافتراضية samples-workitems.
    تحديد الطريقة التي تريد فتح مشروعك بها حدد Open in current window.
    المطالبة الإجراء
    حدد اللغة الخاصة بمشروع الدالة حدد JavaScript.
    تحديد نموذج برمجة JavaScript حدد Model V4.
    تحديد قالب للدالة الأولى لمشروعك حدد Azure Blob Storage trigger.
    توفير اسم دالة أدخل BlobTriggerEventGrid.
    حدد الإعداد من "local.settings.json" حدد Create new local app setting.
    تحديد حساب تخزين حساب التخزين الذي أنشأته.
    هذا هو المسار داخل حساب التخزين الذي سيراقبه المشغل اقبل القيمة الافتراضية samples-workitems.
    تحديد الطريقة التي تريد فتح مشروعك بها حدد Open in current window.
    المطالبة الإجراء
    حدد اللغة الخاصة بمشروع الدالة حدد PowerShell.
    تحديد قالب للدالة الأولى لمشروعك حدد Azure Blob Storage trigger.
    توفير اسم دالة أدخل BlobTriggerEventGrid.
    حدد الإعداد من "local.settings.json" حدد Create new local app setting.
    تحديد حساب تخزين حساب التخزين الذي أنشأته.
    هذا هو المسار داخل حساب التخزين الذي سيراقبه المشغل اقبل القيمة الافتراضية samples-workitems.
    تحديد الطريقة التي تريد فتح مشروعك بها حدد Open in current window.
  5. بعد ظهور المطالبة، حدد Select storage account>Add to workspace.

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

ترقية ملحق التخزين

لاستخدام مشغل تخزين Blob المستند إلى شبكة الأحداث، تتطلب الدالة الإصدار 5.x على الأقل لملحق التخزين.

لترقية المشروع الخاص بك مع إصدار الملحق المطلوب، في نافذة Terminal، قم بتشغيل الأمر التالي: dotnet add package

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs --version 6.1.0
  1. افتح ملف مشروع host.json، وافحص extensionBundle العنصر.

  2. إذا extensionBundle.version لم يكن على الأقل 3.3.0 ، فاستبدل extensionBundle بأحدث:

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
    

تحديث الدالة لاستخدام الأحداث

في ملف BlobTriggerEventGrid.cs، أضف Source = BlobTriggerSource.EventGrid إلى معلمات سمة مشغل Blob، على سبيل المثال:

[Function("BlobTriggerCSharp")]
public async Task Run([BlobTrigger("samples-workitems/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")] Stream myBlob, string name, FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("BlobTriggerCSharp");
    logger.LogInformation($"C# Blob trigger function Processed blob\n Name: {name} \n Size: {myBlob.Length} Bytes");
}

بعد إنشاء الدالة، في ملف تكوين function.json، أضف "source": "EventGrid" إلى myBlob الربط، على سبيل المثال:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "samples-workitems/{name}",
      "source": "EventGrid",
      "connection": "<NAMED_STORAGE_CONNECTION>"
    }
  ]
}
  1. في الملف الذي تم Function.java إنشاؤه، استبدل المحتويات بالتعليمات البرمجية التالية، وأعد تسمية الملف إلى BlobTriggerEventGrid.java:

    package com.function;
    
    import com.microsoft.azure.functions.annotation.*;
    import com.microsoft.azure.functions.*;
    
    /**
    * Azure Functions with Azure Blob trigger.
    */
    public class BlobTriggerEventGrid {
        /**
        * This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
        */
        @FunctionName("BlobTriggerEventGrid")
        @StorageAccount("glengatesteventgridblob_STORAGE")
        public void run(
            @BlobTrigger(name = "content", path = "samples-workitems/{name}", dataType = "binary", source = "EventGrid" ) byte[] content,
            @BindingName("name") String name,
            final ExecutionContext context
        ) {
              context.getLogger().info("Java Blob trigger function processed a blob. Name: " + name + "\n  Size: " + content.length + " Bytes");
          }
    }
    
  2. قم بإزالة ملف اختبار الوحدة المقترن، والذي لم يعد ينطبق على نوع المشغل الجديد.

بعد إنشاء الدالة، أضف source: "EventGrid" إلى options العنصر في ملف TypeScript، على سبيل المثال:

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: storageBlobTrigger1,
});

بعد إنشاء الدالة، أضف source: "EventGrid" إلى options العنصر في ملف JavaScript، على سبيل المثال:

const { app } = require('@azure/functions');

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

بعد إنشاء الدالة، في ملف تكوين function.json، أضف "source": "EventGrid" إلى myBlob الربط، على سبيل المثال:

{
    "bindings": [
        {
            "name": "myblob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "source": "EventGrid",
            "connection": "<NAMED_STORAGE_CONNECTION>"
        }
    ]
}

بدء تصحيح الأخطاء المحلي

تتحقق Event Grid من صحة عنوان URL لنقطة النهاية عند إنشاء اشتراك حدث في مدخل Microsoft Azure. يعني التحقق من الصحة هذا أنه قبل أن تتمكن من إنشاء اشتراك حدث لتصحيح الأخطاء المحلي، يجب تشغيل الدالة محليًا مع تمكين الوصول عن بعد بواسطة الأداة المساعدة ngrok. إذا لم تكن التعليمات البرمجية للدالة المحلية قيد التشغيل ويمكن الوصول إليها من Azure، فلن تتمكن من إنشاء اشتراك الحدث.

تحديد نقطة نهاية مشغل كائن ثنائي كبير الحجم

عند تشغيل الدالة محليًا، تبدو نقطة النهاية الافتراضية المستخدمة لمشغل blob storage المستند إلى الحدث مثل عنوان URL التالي:

http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid
http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid

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

إشعار

نظرًا لأن نقطة النهاية تعالج الأحداث لمشغل Blob Storage، يتضمن مسار نقطة النهاية blobs. بدلاً من ذلك، سيحتوي عنوان URL لنقطة النهاية لمشغل Event Grid على eventgrid في المسار.

تشغيل ngrok

لمقاطعة دالة يتم تصحيحها على جهازك، يجب أن توفر طريقة لـ Azure Event Grid للتواصل مع الدالات التي تعمل على جهاز الكمبيوتر المحلي الخاص بك.

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

  1. ابدأ تشغيل ngrok باستخدام الأمر التالي:

    ngrok.exe http http://localhost:7071
    

    عند بدء الأداة المساعدة، يُفترض أن تبدو نافذة الأوامر مشابهة للقطة الشاشة التالية:

    Screenshot that shows the Command Prompt after starting the

  2. انسخ عنوان URL لـ HTTPS المُنشأ عند تشغيل ngrok. يتم استخدام هذه القيمة لتحديد نقطة نهاية إخطار على الويب على جهاز الكمبيوتر الخاص بك المكشوف باستخدام ngrok.

هام

في هذه المرحلة، لا توقف ngrok. في كل مرة تبدأ فيها تشغيل ngrok، يُعاد إنشاء عنوان URL لـ HTTPS بقيمة مختلفة. نظرًا لأنه لا يمكن تعديل نقطة نهاية اشتراك حدث، يجب عليك إنشاء اشتراك حدث جديد في كل مرة تقوم فيها بتشغيل ngrok.

ما لم تنشئ حساب ngrok، فإن الحد الأقصى لوقت جلسة ngrok يقتصر على ساعتين.

إنشاء عنوان URL لنقطة النهاية

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

جزء URL ‏‏الوصف
البادئة واسم الخادم عند تشغيل الدالة محليًا، يأتي اسم الخادم مع بادئة https:// من عنوان URL لإعادة التوجيه الذي تم إنشاؤه بواسطة ngrok. في عنوان URL لـ localhost، عنوان URL ngrok يستبدل http://localhost:7071. عند التشغيل في Azure، ستستخدم بدلاً من ذلك خادم تطبيق الوظائف المنشور، والذي يكون عادة في النموذج https://<FUNCTION_APP_NAME>.azurewebsites.net.
المسار يأتي جزء المسار من عنوان URL لنقطة النهاية من عنوان URL لـ localhost الذي تم نسخه سابقًا، ويبدو وكأنه /runtime/webhooks/blobs لمشغل Blob Storage. سيكون مسار مشغل Event Grid /runtime/webhooks/EventGrid
سلسلة الاستعلام بالنسبة لجميع اللغات بما في ذلك .NET معزولة functionName=Host.Functions.BlobTriggerEventGrid المعلمة، باستثناء .NET قيد المعالجة والتي يجب أن تكون functionName=BlobTriggerEventGrid في سلسلة الاستعلام تعين اسم الدالة التي تعالج الحدث. إذا استخدمت اسمًا مختلفًا لدالتك، فستحتاج إلى تغيير هذه القيمة. مفتاح الوصول غير مطلوب عند التشغيل محليًا. عند التشغيل في Azure، ستحتاج أيضًا إلى تضمين معلمة code= في عنوان URL، والتي تحتوي على مفتاح يمكنك الحصول عليه من المدخل.

تستعرض لقطة الشاشة التالية مثالاً على الشكل الذي يُفترض أن يكون عليه عنوان URL النهائي عند استخدام مشغل Blob Storage باسم BlobTriggerEventGrid:

Endpoint selection

ابدأ بتصحيح الأخطاء

مع تشغيل ngrok بالفعل، ابدأ مشروعك المحلي كما يلي:

  1. عيّن نقطة توقف في وظيفتك على السطر الذي يتعامل مع التسجيل.

  2. بدء جلسة عمل تصحيح الأخطاء.

    افتح وحدة طرفية جديدة وقم بتشغيل الأمر mvn التالي لبدء جلسة تصحيح الأخطاء.

    mvn azure-functions:run -DenableDebug
    

    اضغط على F5 لبدء جلسة تصحيح الأخطاء.

مع تشغيل التعليمات البرمجية وطلبات إعادة توجيه ngrok، حان الوقت لإنشاء اشتراك حدث في حاوية الكائن الثنائي كبير الحجم.

إنشاء اشتراك الحدث

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

  1. في Visual Studio Code، اختار رمز Azure من شريط النشاط. في الموارد، قم بتوسيع اشتراكك، وتوسيع حسابات التخزين، وانقر بزر الماوس الأيمن فوق حساب التخزين الذي أنشأته سابقًا، وحدد فتح في المدخل.

  2. سجل الدخول إلى مدخل Microsoft Azure وقم بتدوين مجموعة الموارد لحساب التخزين الخاص بك. ستقوم بإنشاء مواردك الأخرى في نفس المجموعة لتسهيل تنظيف الموارد عند الانتهاء.

  3. حدد خيار الأحداث من القائمة اليسرى.

    Add storage account event

  4. في نافذة الأحداث، حدد الزر + اشتراك حدث، وقم بتوفير القيم من الجدول التالي في علامة التبويب أساسيات:

    الإعدادات القيمة المقترحة ‏‏الوصف‬
    الاسم myBlobLocalNgrokEventSub الاسم الذي يحدد اشتراك الحدث. يمكنك استخدام الاسم للعثور بسرعة على اشتراك الحدث.
    مخطط الحدث مخطط Event Grid استخدم المخطط الافتراضي للأحداث.
    اسم موضوع النظام samples-workitems-blobs اسم الموضوع، الذي يمثل الحاوية. يتم إنشاء الموضوع مع الاشتراك الأول، وستستخدمه لاشتراكات الأحداث المستقبلية.
    تصفية إلى أنواع الأحداث كائن ثنائي كبير الحجم تم إنشاؤه
    نوع نقطة النهاية إخطار على الويب يستخدم مشغل blob storage نقطة نهاية إخطار على الويب. يمكنك استخدام Azure Functions لمشغل Event Grid.
    نقطه النهايه نقطة نهاية URL المستندة إلى ngrok استخدم نقطة نهاية URL المستندة إلى ngrok التي حددتها سابقًا.
  5. حدد تأكيد التحديد للتحقق من صحة عنوان URL لنقطة النهاية.

  6. ثم حدد إنشاء لإنشاء اشتراك الحدث.

تحميل ملف إلى الحاوية

مع وجود اشتراك الحدث في مكانه ولا يزال مشروع التعليمات البرمجية الخاص بك وngrok قيد التشغيل، يمكنك الآن تحميل ملف إلى حاوية التخزين الخاصة بك لتشغيل دالتك. يمكنك تحميل ملف من الكمبيوتر إلى حاوية blob storage باستخدام Visual Studio Code.

  1. في Visual Studio Code، افتح لوحة الأوامر (اضغط على F1) واكتب Azure Storage: Upload Files....

  2. في مربع الحوار فتح، اختر ملفًا، ويفضل أن يكون ملف صورة ثنائيًا غير كبير جدًا، حدد تحميل .

  3. قدِّم المعلومات التالية في المطالبات:

    الإعدادات القيمة المقترحة ‏‏الوصف
    حدد موردًا Storage account name اختر اسم حساب التخزين الذي أنشأته في خطوة سابقة.
    حدد نوع مورد حاويات كائن ثنائي كبير الحجم أنت تقوم بالتحميل إلى حاوية كائن ثنائي كبير الحجم.
    حدد حاوية كائن ثنائي كبير الحجم samples-workitems هذه القيمة هي اسم الحاوية التي قمت بإنشائها في خطوة سابقة.
    أدخل الدليل الوجهة لهذا التحميل افتراضي ما عليك سوى قبول القيمة الافتراضية لـ /، وهي جذر الحاوية.

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

كيفية نشر المشروع إلى Azure

الآن بعد أن نجحت في التحقق من صحة التعليمات البرمجية للدالة محليًا، حان الوقت لنشر المشروع إلى تطبيق وظائف جديد في Azure.

إنشاء تطبيق الدالة

توزع الخطوات التالية الموارد التي تحتاجها في Azure وتوزع ملفات المشروع.

  1. في لوحة الأوامر، أدخل Azure Functions: إنشاء تطبيق وظيفي في Azure... (متقدم).

  2. بعد المطالبات، قم بتوفير هذه المعلومات:

    المطالبة التحديد
    أدخل اسما فريدا عالميا لتطبيق الوظائف الجديد. اكتب اسماً فريداً عالمياً يحدد Function App الجديد الخاص بك، ثم حدد إدخال. الأحرف الصالحة لاسم تطبيق الوظائف هي a-z و0-9 و-. اكتب هذا الاسم؛ ستحتاج إليه لاحقا عند إنشاء عنوان URL الجديد لنقطة النهاية.
    حدد مكدس وقت التشغيل. اختر إصدار اللغة الذي كنت تعمل عليه محلياً.
    حدد نظام تشغيل. اختر إما Linux أو Windows. يجب أن تعمل تطبيقات Python على نظام Linux.
    حدد مجموعة موارد للموارد الجديدة. اختر اسم مجموعة الموارد التي قمت بإنشائها باستخدام حساب التخزين الخاص بك، والذي كتبته كملاحظه سابقًا في المدخل.
    حدد موقعا للموارد الجديدة. حدد موقعًا في منطقة قريبة منك أو بالقرب من الخدمات الأخرى التي تصل الدوال إليها.
    حدد خطة استضافة. اختر الاستهلاك لاستضافة خطة الاستهلاك بلا خادم، حيث يتم تحصيل رسوم منك فقط عند تشغيل وظائفك.
    حدد حساب تخزين. اختر اسم حساب التخزين الموجود الذي كنت تستخدمه.
    حدد مورد Application Insights لتطبيقك. اختر إنشاء مورد Application Insights جديد وعند المطالبة، اكتب اسماً للمثيل المستخدم لتخزين بيانات وقت التشغيل من وظائفك.

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

نشر كود الدالة

هام

يستبدل التوزيع إلى تطبيق وظائف موجود دائمًا محتويات هذا التطبيق في Azure.

  1. في منطقة الموارد لنشاط Azure، حدد موقع مورد تطبيق الدالة الذي أنشأته للتو، وانقر بزر الماوس الأيمن فوق المورد، وحدد Deploy to function app....

  2. عند مطالبتك بالكتابة فوق عمليات التوزيع السابقة، حدد Deploy لنشر التعليمات البرمجية للدالة إلى مورد تطبيق الوظائف الجديد.

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

    Screenshot of the View Output window.

نشر إعدادات التطبيق

نظرًا لعدم نشر الإعدادات المحلية من local.settings.json تلقائيًا، يجب عليك تحميلها الآن بحيث تعمل الدالة بشكل صحيح في Azure.

في منصة الأوامر، أدخل Azure Functions: تحميل الإعدادات المحلية...، وفي حدد مورد. اختر اسم تطبيق الوظائف.

إعادة إنشاء اشتراك الحدث

الآن بعد تشغيل تطبيق الوظائف في Azure، تحتاج إلى إنشاء اشتراك حدث جديد. يستخدم اشتراك الحدث الجديد هذا نقطة نهاية دالتك في Azure. ستقوم أيضًا بإضافة عامل تصفية إلى اشتراك الحدث بحيث يتم تشغيل الدالة فقط عند إضافة ملفات JPEG (.jpg) إلى الحاوية. في Azure، يحتوي عنوان URL لنقطة النهاية أيضًا على مفتاح وصول، مما يساعد على منع المستخدمين بخلاف Event Grid من الوصول إلى نقطة النهاية.

الحصول على مفتاح ملحق الكائن الثنائي كبير الحجم

  1. في Visual Studio Code، اختار رمز Azure من شريط النشاط. في الموارد، قم بتوسيع اشتراكك، وقم بتوسيع Function App، وانقر بزر الماوس الأيمن فوق تطبيق الوظائف الذي أنشأته، وحدد فتح في المدخل.

  2. ضمن Functions في القائمة اليسرى، حدد مفاتيح التطبيق.

  3. ضمن مفاتيح النظام، حدد المفتاح المسمى blobs_extension، وانسخ المفتاح القيمة.

ستقوم بتضمين هذه القيمة في سلسلة الاستعلام الخاصة بعنوان URL الجديد لنقطة النهاية.

إنشاء عنوان URL لنقطة النهاية

أنشئ عنوان URL جديد لنقطة النهاية لمشغل Blob Storage استنادًا إلى المثال التالي:

https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>
https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>

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

إنشاء اشتراك حدث تمت تصفيته

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

هذه المرة، ستقوم بتضمين عامل التصفية على اشتراك الحدث بحيث تقوم ملفات JPEG فقط (*.jpg) بتشغيل الدالة.

  1. في Visual Studio Code، اختار رمز Azure من شريط النشاط. في الموارد، قم بتوسيع اشتراكك، وتوسيع حسابات التخزين، وانقر بزر الماوس الأيمن فوق حساب التخزين الذي أنشأته سابقًا، وحدد فتح في المدخل.

  2. في مدخل Microsoft Azure، حدد خيار الأحداث من القائمة اليسرى.

  3. في نافذة الأحداث، حدد اشتراك الحدث القديم المستند إلى ngrok، وحدد حذف>حفظ. يزيل هذا الإجراء اشتراك الحدث القديم.

  4. حدد الزر + اشتراك حدث، وقم بتوفير القيم من الجدول التالي في علامة تبويب أساسيات:

    الإعدادات القيمة المقترحة ‏‏الوصف‬
    الاسم myBlobAzureEventSub الاسم الذي يحدد اشتراك الحدث. يمكنك استخدام الاسم للعثور بسرعة على اشتراك الحدث.
    مخطط الحدث مخطط Event Grid استخدم المخطط الافتراضي للأحداث.
    تصفية إلى أنواع الأحداث كائن ثنائي كبير الحجم تم إنشاؤه
    نوع نقطة النهاية إخطار على الويب يستخدم مشغل blob storage نقطة نهاية إخطار على الويب. يمكنك استخدام Azure Functions لمشغل Event Grid.
    نقطه النهايه نقطة نهاية URL الجديدة المستندة إلى Azure استخدم نقطة نهاية URL التي قمت ببنائها، والتي تتضمن قيمة المفتاح.
  5. حدد تأكيد التحديد للتحقق من صحة عنوان URL لنقطة النهاية.

  6. حدد علامة التبويب عوامل التصفية، ضمن عوامل تصفية الموضوع، حدد تمكين تصفية الموضوع، واكتب .jpg في الموضوع ينتهي به. يؤدي هذا إلى تصفية الأحداث إلى ملفات JPEG فقط.

    Add filter

  7. ثم حدد إنشاء لإنشاء اشتراك الحدث.

التحقق من الدالة في Azure

مع تشغيل الطوبولوجيا بأكملها الآن Azure، حان الوقت للتحقق من أن كل شيء يعمل بشكل صحيح. نظرًا لأنك بالفعل في المدخل، فمن الأسهل فقط تحميل ملف من هناك.

  1. في صفحة حساب التخزين في المدخل، حدد الحاويات وحدد الحاوية الخاصة بك samples-workitems.

  2. حدد الزر تحميل لفتح صفحة التحميل على اليمين، واستعرض نظام الملفات المحلي للعثور على ملف .jpg لتحميله، ثم حدد الزر تحميل لتحميل الكائن الثنائي كبير الحجم. الآن، يمكنك التحقق من تشغيل دالتك استنادًا إلى حدث تحميل الحاوية.

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

  4. مرة أخرى في صفحة تطبيق الوظائف في المدخل، ضمن Functions حدد الدالات، واختر الدالة الخاصة بك ويجب أن ترى إجمالي عدد التنفيذ واحد على الأقل.

  5. ضمن المطور، حدد مراقبة، ويجب أن تشاهد تتبعات مكتوبة من عمليات تنفيذ الدالات الناجحة. قد يكون هناك تأخير لمدة خمس دقائق حيث تتم معالجة الأحداث بواسطة Application Insights.

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

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

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

  1. لفتح لوحة الأوامر في تعليمة Visual Studio البرمجية، اضغط على F1. في لوحة الأوامر، ابحث عن Azure: Open in portal واختره.

  2. اختر التطبيق الخاص بالوظائف، واضغط زر Enter. تفتح صفحة تطبيق الوظيفة في مدخل Microsoft Azure.

  3. في علامة التبويب نظرة عامة حدد الارتباط المسمى بجوار Resource group.

    Screenshot of select the resource group to delete from the function app page.

  4. في صفحة مجموعة الموارد، راجع قائمة الموارد المدرجة وتحقق من أنها هي التي تريد حذفها.

  5. حدد حذف مجموعة الموارد، واتبع الإرشادات.

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

لمعرفة المزيد حول تكاليف الوظائف، يرجى الاطلاع على تقدير تكاليف خطة الاستهلاك.

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