قم بتشغيل وظيفة Azure استجابةً لحدث معالجة النقطة
لقراءة كائن ثنائي كبير الحجم موجود في طبقة الأرشيف، يجب أولا إعادة ترطيب الكائن الثنائي كبير الحجم إلى الطبقة الساخنة أو الباردة. يمكن أن تستغرق عملية التعويض عدة ساعات حتى تكتمل. بدلا من تحقق حالة عملية التعويض بشكل متكرر، يمكنك تكوين 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.
تثبيت أو استخدام أداة يمكنها إرسال طلبات HTTP لاختبار الحل الخاص بك، على سبيل المثال:
- Visual Studio Code مع ملحق من Visual Studio Marketplace
- استدعاء PowerShell-RestMethod
- Microsoft Edge - أداة وحدة تحكم الشبكة
- برونو
- curl
تنبيه
بالنسبة للسيناريوهات التي يكون لديك فيها بيانات حساسة، مثل بيانات الاعتماد والأسرار ورمز الوصول المميزة ومفاتيح واجهة برمجة التطبيقات ومعلومات أخرى مشابهة، تأكد من استخدام أداة تحمي بياناتك باستخدام ميزات الأمان الضرورية، وتعمل دون اتصال أو محليا، ولا تقوم بمزامنة بياناتك مع السحابة، ولا تتطلب تسجيل الدخول إلى حساب عبر الإنترنت. وبهذه الطريقة، يمكنك تقليل المخاطر المتعلقة بكشف البيانات الحساسة للجمهور.
مطلوب اشتراك Azure. في حال لم يكن لديك حسابًا فقم بإنشاء حساب مجاني قبل البدء.
أساس أمان معرف Microsoft Entra تم توفيره تم تعيينه لدور Storage Blob Data Contributor، تم تحديد نطاقه لحساب التخزين أو مجموعة الموارد الأصلية أو الاشتراك. راجع تعيين أدوار لحساب مستخدم Microsoft Entra الخاص بك.
إنشاء تطبيق وظائف 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 باستخدام DefaultAzureCredential.
إنشاء مشروع 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); // 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 }; TokenCredential credential = new DefaultAzureCredential(); string blobUri = "https://" + accountName + ".blob.core.windows.net/" + logBlobUriBuilder.BlobContainerName + "/" + logBlobName; BlobClient logBlobClient = new BlobClient(new Uri(blobUri), credential); 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 يدوياً يؤدي إلى تشغيل الحدث. يمكنك نشر الطلب باستخدام أداة مثل تلك الموضحة في قسم المتطلبات الأساسية في هذه المقالة.
يوجد في الجزء العلوي من ملف الفئة على Azure Function نقطة نهاية عنوان URL يمكنك استخدامها للاختبار في البيئة المحلية. يؤدي نشر الطلب باستخدام عنوان URL هذا إلى تشغيل الحدث في البيئة المحلية بحيث يمكنك تتبع أخطاء التعليمات البرمجية. عنوان URL بالتنسيق التالي:
http://localhost:7071/runtime/webhooks/EventGrid?functionName={functionname}
الطلب الذي ترسله إلى نقطة النهاية هذه هو طلب محاكاة. لا يرسل أو يستقبل البيانات من حسابك على مساحة تخزين Azure.
أرسل طلبا إلى نقطة النهاية هذه باستخدام أداة طلب HTTP والإرشادات الخاصة بها. تأكد من استبدال {functionname}
العنصر النائب باسم الدالة (على سبيل المثال Get http://localhost:7071/runtime/webhooks/EventGrid?functionName=BlobRehydrateEventHandler
).
- في Visual Studio، ضع أي نقاط توقف مطلوبة في التعليمات البرمجية، ثم اضغط على F5 لتشغيل مصحح الأخطاء.
- في أداة طلب HTTP، أرسل الطلب إلى نقطة النهاية.
عند إرسال الطلب، تعمل 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.