تشغيل Azure Function استجابةً لحدث تعويض كائن ثنائي كبير الحجم
لقراءة كائن ثنائي كبير الحجم موجود في طبقة الأرشيف، يجب عليك أولاً إعادة تعويض الكائن الثنائي كبير الحجم إلى الطبقة الفرعية أو الفعّالة. يمكن أن تستغرق عملية التعويض عدة ساعات حتى تكتمل. بدلا من تحقق حالة عملية التعويض بشكل متكرر، يمكنك تكوين Azure Event Grid لإطلاق حدث عند اكتمال عملية إلغاء تسلسل الكائن الثنائي كبير الحجم ومعالجة هذا الحدث في التطبيق الخاص بك.
عند وقوع حدث، ترسل Event Grid الحدث إلى معالج الأحداث عبر نقطة نهاية. يمكن أن يعمل عدد من خدمات Azure كمعالجات للأحداث، بما في ذلك Azure Functions. إن Azure Function هي كتلة من التعليمات البرمجية يمكن تنفيذها استجابةً لحدث ما. توجهك هذه الإرشادات خلال عملية تطوير Azure Function ثم تكوين Event Grid لتشغيل الدالة استجابةً لحدث يحدث عند إلغاء تسلسل كائن ثنائي كبير الحجم.
توضح لك هذه المقالة كيفية إنشاء Azure Function واختبارها باستخدام .NET من Visual Studio. يمكنك إنشاء Azure Function من مجموعة متنوعة من بيئات التطوير المحلية واستخدام مجموعة متنوعة من لغات الكمبيوتر. لمزيد من المعلومات حول اللغات المدعومة على Azure Functions، اطّلع على اللغات المدعومة في Azure Functions. لمزيد من المعلومات حول خيارات التطوير على Azure Functions، اطّلع على التعليمات البرمجية واختبار Azure Functions محلياً.
لمزيد من المعلومات حول إلغاء تسلسل الكائنات الثنائية كبيرة الحجم من طبقة الأرشيف، اطّلع على نظرة عامة على تعويض كائن ثنائي كبير الحجم من طبقة الأرشيف.
المتطلبات الأساسية
توضح لك هذه المقالة كيفية استخدام Visual Studio 2019 أو إصدار أحدث لتطوير Azure Function باستخدام .NET. يمكنك تثبيت Visual Studio Community مجاناً. تأكد من تكوين Visual Studio على Azure Development باستخدام .NET.
لتتبع أخطاء Azure Function محلياً، عليك استخدام أداة يمكنها إرسال طلب HTTP، مثل Postman.
مطلوب اشتراك Azure. في حال لم يكن لديك حسابًا فقم بإنشاء حساب مجاني قبل البدء.
إنشاء تطبيق وظائف Azure
تطبيق الوظائف هو مورد Azure يعمل كحاوية على Azure Functions الخاصة بك. يمكنك استخدام تطبيق وظائف جديد أو موجود لإكمال الخطوات الموضحة في هذه المقالة.
لإنشاء تطبيق وظيفة جديد في مدخل Microsoft Azure، اتبع الخطوات التالية:
في مدخل Microsoft Azure، ابحث عن Function App. حدد أيقونة تطبيق الوظائف للانتقال إلى قائمة تطبيقات الوظائف في اشتراكك.
حدد الزر Create لإنشاء تطبيق وظائف جديد.
في علامة التبويب Basics، حدد مجموعة موارد، وقم بتوفير اسم فريد لتطبيق الوظائف الجديد.
تأكد من تعيين خيار Publish على Code.
من القائمة Runtime stack، حدد .NET. يتم ملء حقل Version تلقائياً لاستخدام أحدث إصدار من .NET core.
حدد المنطقة لتطبيق الوظائف الجديد.
بعد الانتهاء من علامة التبويب Basics، انتقل إلى علامة التبويب Hosting.
في علامة التبويب Hosting، حدد حساب التخزين حيث سيتم تخزين Azure Function الخاصة بك. يمكنك اختيار حساب تخزين موجود أو إنشاء حساب تخزين جديد.
تأكد من تعيين حقل Operating system على Windows.
في الحقل Plan type، حددConsumption (Serverless). لمزيد من المعلومات حول هذه الخطة، اطّلع على استضافة خطة استهلاك Azure Functions.
حدد Review + Create لإنشاء تطبيق الوظائف الجديد.
لمعرفة المزيد حول تكوين تطبيق الوظائف، اطّلع على إدارة تطبيق الوظائف الخاص بك في وثائق Azure Functions.
إنشاء Azure Function كمشغل Event Grid
بعد ذلك، قم بإنشاء Azure Function التي سيتم تشغيلها عند إلغاء تسلسل كائن ثنائي كبير الحجم في حساب تخزين معين. اتبع الخطوات التالية لإنشاء Azure Function في Visual Studio باستخدام C# و.NET Core:
قم بتشغيل Visual Studio 2019، وقم بإنشاء مشروع Azure Functions جديد. للحصول على التفاصيل، اتبع الإرشادات الموضحة في إنشاء مشروع تطبيق وظائف.
في الخطوة Create a new Azure Functions application، حدد القيم التالية:
- بشكل افتراضي، يتم تعيين وقت تشغيل Azure Functions على Azure Functions v3 (.NET Core). توصي Microsoft باستخدام هذا الإصدار لوقت تشغيل Azure Functions.
- من قائمة المشغلات المحتملة، حدد Event Grid Trigger. لمزيد من المعلومات حول سبب كون مشغل Event Grid هو النوع الموصى به من المشغل لمعالجة حدث مخزن الكائنات الثنائية كبيرة الحجم باستخدام Azure Function، اطّلع على استخدام وظيفة كمعالج أحداث لأحداث Event Grid.
- يشير إعداد حساب التخزين إلى مكان تخزين Azure Function الخاصة بك. ويمكنك تحديد حساب تخزين موجود أو إنشاء حساب جديد.
حدد Create لإنشاء المشروع الجديد في Visual Studio.
بعد ذلك، قم بإعادة تسمية الفئة وAzure Function، كما هو موضح في إعادة تسمية الوظيفة. اختر اسماً مناسباً للسيناريو الخاص بك.
في Visual Studio، حدد Tools | NuGet Package Manager | Package Manager Console، ثم قم بتثبيت الحزم التالية من وحدة التحكم:
Install-Package Azure.Storage.Blobs Install-Package Microsoft.ApplicationInsights.WorkerService Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsightsفي ملف الفئة لـ Azure Function، الصق ما يلي باستخدام العبارات:
using System; using System.IO; using System.Text; using Microsoft.Azure.WebJobs; using Microsoft.Azure.EventGrid.Models; using Microsoft.Azure.WebJobs.Extensions.EventGrid; using Microsoft.Extensions.Logging; using Azure; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models;حدد موقع الأسلوب Run في ملف الفئة. هذا هو الأسلوب الذي يتم تشغيله عند وقوع حدث. الصق التعليمة البرمجية التالية في النص الأساسي للأسلوب Run. تذكر استبدال قيم العناصر النائبة بين أقواس الزاوية بالقيم الخاصة بك:
// When either Microsoft.Storage.BlobCreated or Microsoft.Storage.BlobTierChanged // event occurs, write the event details to a log blob in the same container // as the event subject (the blob for which the event occurred). // Create a unique name for the log blob. string logBlobName = string.Format("function-log-{0}.txt", DateTime.UtcNow.Ticks); // Populate connection string with your Shared Key credentials. const string ConnectionString = "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net"; // Get data from the event. dynamic data = eventGridEvent.Data; string eventBlobUrl = Convert.ToString(data.url); string eventApi = Convert.ToString(data.api); // Build string containing log information. StringBuilder eventInfo = new StringBuilder(); eventInfo.AppendLine(string.Format("{0} operation occurred.", eventApi)); eventInfo.AppendLine(string.Format("Blob URL: {0}", eventBlobUrl)); eventInfo.AppendLine($@"Additional event details: Id=[{eventGridEvent.Id}] EventType=[{eventGridEvent.EventType}] EventTime=[{eventGridEvent.EventTime}] Subject=[{eventGridEvent.Subject}] Topic=[{eventGridEvent.Topic}]"); // If event was BlobCreated and API call was CopyBlob, respond to the event. bool copyBlobEventOccurred = (eventGridEvent.EventType == "Microsoft.Storage.BlobCreated") && (eventApi == "CopyBlob"); // If event was BlobTierChanged and API call was SetBlobTier, respond to the event. bool setTierEventOccurred = (eventGridEvent.EventType == "Microsoft.Storage.BlobTierChanged") && (eventApi == "SetBlobTier"); // If one of these two events occurred, write event info to a log blob. if (copyBlobEventOccurred | setTierEventOccurred) { // Create log blob in same account and container. BlobUriBuilder logBlobUriBuilder = new BlobUriBuilder(new Uri(eventBlobUrl)) { BlobName = logBlobName }; BlobClient logBlobClient = new BlobClient(ConnectionString, logBlobUriBuilder.BlobContainerName, logBlobName); byte[] byteArray = Encoding.ASCII.GetBytes(eventInfo.ToString()); try { // Write the log info to the blob. // Overwrite if the blob already exists. using (MemoryStream memoryStream = new MemoryStream(byteArray)) { BlobContentInfo blobContentInfo = logBlobClient.Upload(memoryStream, overwrite: true); } } catch (RequestFailedException e) { Console.WriteLine(e.Message); throw; } }
لمزيد من المعلومات حول تطوير Azure Functions، اطّلع على إرشادات تطوير Azure Functions.
لمعرفة المزيد حول المعلومات التي يتم تضمينها عند نشر حدث مخزن الكائنات الثنائية كبيرة الحجم إلى معالج أحداث، اطّلع على مخزن الكائنات الثنائية كبيرة في Azure كمصدر Event Grid.
تشغيل Azure Function محلياً في مصحح الأخطاء
لاختبار التعليمات البرمجية على Azure Function محلياً، عليك إرسال طلب HTTP يدوياً يؤدي إلى تشغيل الحدث. يمكنك نشر الطلب باستخدام أداة مثل Postman.
يوجد في الجزء العلوي من ملف الفئة على Azure Function نقطة نهاية عنوان URL يمكنك استخدامها للاختبار في البيئة المحلية. يؤدي نشر الطلب باستخدام عنوان URL هذا إلى تشغيل الحدث في البيئة المحلية بحيث يمكنك تتبع أخطاء التعليمات البرمجية. عنوان URL بالتنسيق التالي:
http://localhost:7071/runtime/webhooks/EventGrid?functionName={functionname}
الطلب الذي ترسله إلى نقطة النهاية هذه هو طلب محاكاة. لا يرسل أو يستقبل البيانات من حسابك على مساحة تخزين Azure.
اتبع هذه الخطوات لإنشاء طلب وإرساله إلى نقطة النهاية هذه. يوضح هذا المثال كيفية إرسال الطلب باستخدام Postman.
في Postman، إنشاء طلب جديد.
الصق عنوان URL الموضح أعلاه في الحقل الخاص بعنوان URL للطلب، باستبدل اسم وظيفتك لـ
{functionname}وإزالة الأقواس المتعرجة. تأكد من تعيين فعل الطلب على GET.
أضف عنوان Content-Type وأرسله إلى application/json.
أضف عنوان aeg-event-type وقم بتعيينه على Notification.
في Postman، حدد النص الأساسي للطلب، مع تعيين نوع النص الأساسي على JSON والتنسيق على raw. يحاكي المثال التالي طلب نسخ كائن ثنائي كبير الحجم. استبدل قيم العنصر النائب في أقواس معقوفة بالقيم الخاصة بك. لاحظ أنه ليس من الضروري تغيير قيم التاريخ/الوقت أو المعرف، لأن هذا طلب محاكاة:
[{ "topic": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>", "subject": "/blobServices/default/containers/<container-name>/blobs/<blob-name>", "eventType": "Microsoft.Storage.BlobCreated", "id": "2bfb587b-501e-0094-2746-8b2884065d32", "data": { "api": "CopyBlob", "clientRequestId": "3d4dedc7-6c27-4816-9405-fdbfa806b00c", "requestId": "2bfb587b-501e-0094-2746-8b2884000000", "eTag": "0x8D9595DCA505BDF", "contentType": "text/plain", "contentLength": 48, "blobType": "BlockBlob", "url": "https://<storage-account>.blob.core.windows.net/<container-name>/<blob-name>", "sequencer": "0000000000000000000000000000201B00000000004092a5", "storageDiagnostics": { "batchId": "8a92736a-6006-0026-0046-8bd7f5000000" } }, "dataVersion": "", "metadataVersion": "1", "eventTime": "2021-08-07T04:42:41.0730463Z" }]في Visual Studio، ضع أي نقاط توقف مطلوبة في التعليمات البرمجية، ثم اضغط على F5 لتشغيل مصحح الأخطاء.
في Postman، حدد الزر Send لإرسال الطلب إلى نقطة النهاية.
عند إرسال الطلب، تعمل Event Grid على استدعاء Azure Function الخاص بك، ويمكنك تتبع أخطائه بشكل طبيعي. للحصول على معلومات وأمثلة إضافية، اطّلع على نشر الطلب يدوياً في وثائق Azure Functions.
تتم محاكاة الطلب الذي يؤدي إلى تشغيل الحدث، ولكن تعمل Azure Function التي يتم تشغيلها عند إطلاق الحدث على كتابة معلومات السجل في كائن ثنائي جديد كبير الحجم في حساب التخزين الخاص بك. يمكنك التحقق من محتويات الكائن الثنائي كبير الحجم وعرض آخر وقت تم تعديله في مدخل Microsoft Azure، كما هو موضح في الصورة التالية:
نشر Azure Function
بعد اختبار Azure Function محلياً، تتمثل الخطوة التالية في نشر Azure Function على تطبيق وظائف Azure Function التي قمت بإنشائها مسبقاً. يجب نشر الوظيفة بحيث يمكنك تكوين Event Grid لإرسال الأحداث التي تحدث على حساب التخزين إلى نقطة نهاية الوظيفة.
اتبع الخطوات التالية لنشر الوظيفة:
في مستكشف الحلول، حدد مع الضغط باستمرار (أو انقر بزر الماوس الأيمن) فوق مشروع Azure Functions الخاص بك واختر Publish.
في نافذة Publish، حدد Azure كهدف، ثم اختر Next.
حدد Azure Function App (Windows) كهدف محدد، ثم اختر Next.
في علامة التبويب Functions instance، حدد اشتراكك من القائمة المنسدلة، ثم حدد موقع تطبيق وظائف Azure Function في قائمة تطبيقات الوظائف المتوفرة.
تأكد من تحديد مربع الاختيار Run from package file.
حدد Finish من أجل الإعداد لنشر الوظيفة.
في الصفحة Publish، تحقق من صحة التكوين. إذا رأيت تحذيراً بعدم تكوين تبعية الخدمة على Application Insights، فيمكنك تكوينها من هذه الصفحة.
حدد الزر Publish لبدء نشر Azure Function على تطبيق وظائف Azure Function التي قمت بإنشائها مسبقاً.
كلما قمت بإجراء تغييرات على التعليمات البرمجية في Azure Function الخاص بك، يجب عليك نشر الوظيفة المحدثة إلى Azure.
الاشتراك في أحداث إعادة تسلسل الكائن الثنائي كبير الحجم من حساب التخزين
لديك الآن تطبيق وظائف يحتوي على Azure Function يمكن تشغيله استجابةً لحدث. الخطوة التالية هي إنشاء اشتراك حدث من حساب التخزين الخاص بك. يقوم اشتراك الحدث بتكوين حساب التخزين لنشر حدث من خلال Event Grid استجابةً لعملية على كائن ثنائي كبير الحجم في حساب التخزين الخاص بك. ثم ترسل Event Grid الحدث إلى نقطة نهاية معالج الأحداث التي قمت بتحديدها. في هذه الحالة، يكون معالج الأحداث هو Azure Function الذي قمت بإنشائه في القسم السابق.
عند إنشاء اشتراك الحدث، يمكنك تصفية الأحداث التي يتم إرسالها إلى معالج الأحداث. الأحداث التي يجب تسجيلها عند إلغاء تسلسل كائن ثنائي كبير الحجم من طبقة الأرشيف هي Microsoft.Storage.BlobTierChanged، المقابلة لعملية Set Blob Tier، وأحداث Microsoft.Storage.BlobCreated، المقابلة لعملية Copy Blob. استناداً إلى السيناريو الخاص بك، قد تحتاج إلى التعامل مع واحد فقط من هذه الأحداث.
لإنشاء اشتراك الحدث، اتبع الخطوات التالية:
في مدخل Microsoft Azure، انتقل إلى حساب التخزين الذي يحتوي على كائنات ثنائية كبيرة الحجم يجب إعادة تسلسلها من طبقة الأرشيف.
حدد إعداد Events في جزء التنقّل الأيسر.
في صفحة Events، حدد More options.
حدد Create Event Subscription.
في الصفحة Create Event Subscription، في القسم Event subscription details، أدخل اسما لاشتراك الحدث.
في Topic details، أدخل اسماً لموضوع النظام. يمثل موضوع النظام حدثاً واحداً أو أكثر يتم نشره بواسطة مساحة تخزين Azure. لمزيد من المعلومات حول موضوعات النظام، اطّلع على موضوعات النظام في Azure Event Grid.
في القسم Event Types، حدد الأحداث Blob Created وBlob Tier Changed. استناداً إلى الطريقة التي تختار بها إلغاء تسلسل كائن ثنائي كبير الحجم من طبقة الأرشيف، سيتم إطلاق أحد هذين الحدثين.
في قسم Endpoint details، حدد Azure Function من القائمة المنسدلة.
اختر Select an endpoint لتحديد الوظيفة التي قمت بإنشائها في القسم السابق. في مربع الحوار Select Azure Function، اختر الاشتراك ومجموعة الموارد وتطبيق الوظائف على Azure Function الخاصة بك. وأخيرا، حدد اسم الوظيفة من القائمة المنسدلة واختر Confirm selection.
حدد الزر Create لإنشاء اشتراك الحدث والبدء في إرسال الأحداث إلى معالج أحداث Azure Function.
لمعرفة المزيد حول اشتراكات الأحداث، اطّلع على مفاهيم Azure Event Grid.
اختبار معالج أحداث Azure Function
لاختبار Azure Function، يمكنك تشغيل حدث في حساب التخزين الذي يحتوي على اشتراك الحدث. يتم تصفية اشتراك الحدث الذي قمت بإنشائه مسبقاً على حدثين، Microsoft.Storage.BlobCreated وMicrosoft.Storage.BlobTierChanged. عند إطلاق أي من هذين الحدثين، سيؤدي ذلك إلى تشغيل Azure Function الخاصة بك.
تكتب Azure Function الموضحة في هذه المقالة إلى كائن ثنائي كبير الحجم للسجل في سيناريوهين:
- عندما يكون الحدث هو Microsoft.Storage.BlobCreated وعملية واجهة برمجة التطبيقات هي Copy Blob.
- عندما يكون الحدث هو Microsoft.Storage.BlobTierChanged ويتم تعيين عملية واجهة برمجة التطبيقات Set Blob Tier.
لمعرفة كيفية اختبار الوظيفة عن طريق إلغاء تسلسل كائن ثنائي كبير الحجم، راجع أحد هذين الإجراءين:
- إلغاء تسلسل كائن ثنائي كبير الحجم باستخدام عملية نسخ
- إلغاء تسلسل كائن ثنائي كبير الحجم عن طريق تغيير طبقتها
بعد اكتمال إلغاء التسلسل، تتم كتابة الكائن الثنائي كبير الحجم للسجل على نفس الحاوية مثل الكائن الثنائي كبير الحجم الذي قمت بإلغاء تسلسله. على سبيل المثال، بعد إلغاء تسلسل كائن ثنائي كبير الحجم باستخدام عملية نسخ، يمكنك أن ترى في مدخل Microsoft Azure أن الكائن الثنائي كبير الحجم للمصدر الأصلي يظل في طبقة الأرشيف، ويظهر الكائن الثنائي كبير الحجم للوجهة الذي تم إلغاء تسلسله بالكامل في طبقة الإنترنت المستهدفة، ويظهر الكائن الثنائي كبير الحجم للسجل الذي تم إنشاؤه بواسطة Azure Function أيضاً في القائمة.
ضع في اعتبارك أن إلغاء تسلسل كائن ثنائي كبير الحجم قد يستغرق ما يصل إلى 15 ساعة، حسب إعداد أولوية إلغاء التسلسل. إذا قمت بتعيين أولوية إلغاء التسلسل على High، فقد يكتمل إلغاء التسلسل في أقل من ساعة واحدة للكائنات الثنائية كبيرة الحجم التي يقل حجمها عن 10 GB. ومع ذلك، فإن إلغاء التسلسل ذي الأولوية العالية ينطوي على تكلفة أكبر. لمزيد من المعلومات، اطّلع على نظرة عامة على إلغاء تسلسل كائن ثنائي كبير الحجم من طبقة الأرشيف.
تلميح
على الرغم من أن الهدف من هذه الإرشادات هو التعامل مع هذه الأحداث في سياق إلغاء تسلسل كائن ثنائي كبير الحجم، لأغراض الاختبار، قد يكون من المفيد أيضاً مراقبة هذه الأحداث استجابةً لتحميل كائن ثنائي كبير الحجم أو تغيير طبقة كائن ثنائي كبير الحجم عبر الإنترنت (أي من طبقة فرعية إلى طبقة فعالة)، لأن الحدث ينطلق على الفور.
لمزيد من المعلومات حول كيفية تصفية الأحداث في Event Grid، اطّلع على كيفية تصفية الأحداث على Azure Event Grid.