مشغل تخزين Azure Blob لـ Azure Functions
يبدأ مشغل تخزين Blob في تشغيل الوظيفة عند اكتشاف كائن ثنائي كبير الحجم جديد أو محدث. يتم توفير محتويات كائن ثنائي كبير الحجم كمدخل إلى الوظيفة.
يتطلب مشغل تخزين Azure Blob حساب تخزين للأغراض العامة. حسابات التخزين الإصدار 2 مع مساحات الأسماء الهرمية مدعومة أيضاً. لاستخدام حساب كائن ثنائي كبير الحجم فقط أو إذا كان تطبيقك لديه احتياجات متخصصة، راجع البدائل لاستخدام هذا المشغل.
للحصول على معلومات حول تفاصيل الإعداد والتكوين، راجع نظرة عامة.
مثال
يمكن إنشاء الدالة C # باستخدام أحد أوضاع C # التالية:
- مكتبة الفئة أثناء العملية: الدالة C# المترجمة التي يتم تشغيلها في نفس العملية مثل وقت تشغيل الوظائف.
- مكتبة فئة العملية المعزولة: الدالة C # المترجمة التي يتم تشغيلها في عملية معزولة عن وقت التشغيل. مطلوب عملية معزولة لدعم وظائف C # التي تعمل على .NET 5.0.
- البرنامج النصي C#: يستخدم بشكل أساسي عند إنشاء وظائف C# في مدخل Azure.
يظهر المثال التالي الوظيفة C# الذي يكتب سجل عند إضافة كائن ثنائي كبير الحجم أو تحديثه في الحاوية samples-workitems.
[FunctionName("BlobTriggerCSharp")]
public static void Run([BlobTrigger("samples-workitems/{name}")] Stream myBlob, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}
تنشئ السلسلة {name} في مسار مشغل كائن ثنائي كبير الحجمsamples-workitems/{name}تعبير ربط الذي يمكنك استخدامه في التعليمات البرمجية للوظيفة للوصول إلى اسم الملف لتشغيل الكائن الثنائي كبير الحجم. لمزيد من المعلومات، راجع أنماط أسماء الكائن الثنائي كبير الحجم لاحقاً في هذه المقالة.
لمزيد من المعلومات حول BlobTrigger السمة، راجع السمات.
تقوم الوظيفة بكتابة سجل عند إضافة كائن ثنائي كبير الحجم أو تحديثه في الحاويةmyblob.
@FunctionName("blobprocessor")
public void run(
@BlobTrigger(name = "file",
dataType = "binary",
path = "myblob/{name}",
connection = "MyStorageAccountAppSetting") byte[] content,
@BindingName("name") String filename,
final ExecutionContext context
) {
context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}
يُظهر المثال التالي ربط مشغل كائن ثنائي كبير الحجم في الملفfunction.json وتعليمة JavaScript البرمجية التي تستخدم عملية ربط البيانات. تقوم الوظيفة بكتابة سجل عند إضافة كائن ثنائي كبير الحجم أو تحديثه في الحاوية samples-workitems.
إليك ملف function.json:
{
"disabled": false,
"bindings": [
{
"name": "myBlob",
"type": "blobTrigger",
"direction": "in",
"path": "samples-workitems/{name}",
"connection":"MyStorageAccountAppSetting"
}
]
}
تنشئ السلسلة {name} في مسار مشغل كائن ثنائي كبير الحجمsamples-workitems/{name}تعبير ربط الذي يمكنك استخدامه في التعليمات البرمجية للوظيفة للوصول إلى اسم الملف لتشغيل الكائن الثنائي كبير الحجم. لمزيد من المعلومات، راجع أنماط أسماء الكائن الثنائي كبير الحجم لاحقاً في هذه المقالة.
لمزيد من المعلومات حول خصائص الملف function.js، راجع قسم التكوين الذي يشرح هذه الخصائص.
فيما يلي التعليمة البرمجية لـ JavaScript:
module.exports = async function(context) {
context.log('Node.js Blob trigger function processed', context.bindings.myBlob);
};
يوضح المثال التالي كيفية إنشاء وظيفة تعمل عند إضافة ملف إلى حاوية تخزين كائن ثنائي كبير الحجمsource.
يتضمن ملف تكوين الوظيفة (function.json) عملية ربط مع تعيين type لـ blobTrigger وdirection إلى in.
{
"bindings": [
{
"name": "InputBlob",
"type": "blobTrigger",
"direction": "in",
"path": "source/{name}",
"connection": "MyStorageAccountConnectionString"
}
]
}
فيما يلي التعليمة البرمجية المرتبطة بملف run.ps1.
param([byte[]] $InputBlob, $TriggerMetadata)
Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"
يُظهر المثال التالي ربط مشغل كائن ثنائي كبير الحجم في الملف function.json وتعليمة Python البرمجية التي تستخدم عملية ربط البيانات. تكتب الدالة سجلا عند إضافة نقطة أو تحديثها في الحاويةsamples-workitems.
إليك ملف function.json:
{
"scriptFile": "__init__.py",
"disabled": false,
"bindings": [
{
"name": "myblob",
"type": "blobTrigger",
"direction": "in",
"path": "samples-workitems/{name}",
"connection":"MyStorageAccountAppSetting"
}
]
}
تنشئ السلسلة {name} في مسار مشغل كائن ثنائي كبير الحجمsamples-workitems/{name}تعبير ربط الذي يمكنك استخدامه في التعليمات البرمجية للوظيفة للوصول إلى اسم الملف لتشغيل الكائن الثنائي كبير الحجم. لمزيد من المعلومات، راجع أنماط أسماء الكائن الثنائي كبير الحجم لاحقاً في هذه المقالة.
لمزيد من المعلومات حول خصائص الملف function.js، راجع قسم التكوين الذي يشرح هذه الخصائص.
فيما يلي التعليمة البرمجية لـ Python:
import logging
import azure.functions as func
def main(myblob: func.InputStream):
logging.info('Python Blob trigger function processed %s', myblob.name)
السمات
تستخدم كل من مكتبات C# العملية والعملية المعزولة السمة BlobAttribute لتحديد الدالة. يستخدم البرنامج النصي C # بدلا من ذلك ملف تكوين function.json.
يأخذ منشئ السمة المعلمات التالية:
| المعلمة | الوصف |
|---|---|
| BlobPath | الطريق إلى blob. |
| الاتصال | اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بـ Azure Blobs. راجع الاتصالات. |
| Access | يشير إلى ما إذا كنت ستقرأ أو تكتب. |
في مكتبات الفئات C#، يأخذ منشئ السمة سلسلة مسار تشير إلى الحاوية المراد مشاهدتها واختياريا إلى نمط اسم نقطة. وفيما يلي مثال على ذلك:
[FunctionName("ResizeImage")]
public static void Run(
[BlobTrigger("sample-images/{name}")] Stream image,
[Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
{
....
}
بينما تأخذ السمة خاصية Connection ، يمكنك أيضا استخدام السمة StorageAccountAttribute لتحديد اتصال حساب تخزين. يمكنك القيام بذلك عندما تحتاج إلى استخدام حساب تخزين مختلف عن الوظائف الأخرى في المكتبة. تأخذ الدالة الإنشائية اسم إعداد تطبيق يحتوي على سلسلة اتصال تخزين. يمكن تطبيق السمة على مستوى المعلمة أو الأسلوب أو الفئة. يُظهر المثال التالي مستوى الفئة ومستوى الأسلوب:
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("StorageTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
...
}
يتم تحديد حساب التخزين للاستخدام بالترتيب التالي:
- خاصية المشغل أو السمة الملزمة
Connection. - تم تطبيق السمة
StorageAccountعلى نفس المعلمة مثل سمة المشغل أو الربط. - السمة
StorageAccountالمطبقة على الوظيفة. - السمة
StorageAccountالمطبقة على الفئة. - حساب التخزين الافتراضي لتطبيق الوظيفة، والذي يتم تعريفه في
AzureWebJobsStorageإعداد التطبيق.
عند التطوير محليا، أضف إعدادات التطبيق في الملف local.settings.json في Values المجموعة.
تعليقات توضيحية
تمنحك السمة @BlobTrigger حق الوصول إلى كائن ثنائي كبير الحجم الذي أدي إلى تشغيل الوظيفة. للحصول على التفاصيل، ارجع إلى مثال على المشغل.
التكوين
يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.
| خاصية function.json | الوصف |
|---|---|
| النوع | يجب تعيينه إلى blobTrigger. يتم تعيين هذه الخاصية تلقائيا عند إنشاء المشغل في مدخل Microsoft Azure. |
| direction | يجب تعيينه إلى in. يتم تعيين هذه الخاصية تلقائياً عند إنشاء المشغل في مدخل Azure. تتم الإشارة إلى الاستثناءات في قسم الاستخدام. |
| الاسم | اسم المتغير الذي يمثل كائن ثنائي كبير الحجم في التعليمات البرمجية للوظيفة. |
| المسار | الحاوية المطلوب مراقبتها. قد يكون نمط اسم كائن ثنائي كبير الحجم. |
| الاتصال | اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بـ Azure Blobs. راجع الاتصالات. |
راجع قسم المثال للحصول على أمثلة كاملة.
بيانات التعريف
يوفر مشغل blob العديد من خصائص بيانات التعريف. يمكن استخدام هذه الخصائص كجزء من تعبيرات الربط في روابط أخرى أو معلمات في التعليمات البرمجية الخاصة بك. تحتوي هذه القيم على نفس دلالات نوع CloudBlob .
| الخاصية | النوع | الوصف |
|---|---|---|
BlobTrigger |
string |
الطريق إلى الفقاعة المثيرة. |
Uri |
System.Uri |
عنوان URI الخاص بالفقاعة للموقع الأساسي. |
Properties |
BlobProperties | خصائص نظام الفقاعة. |
Metadata |
IDictionary<string,string> |
البيانات الوصفية المعرفة من قبل المستخدم للنقطة. |
يسجل المثال التالي المسار إلى النقطة المشغلة، بما في ذلك الحاوية:
public static void Run(string myBlob, string blobTrigger, ILogger log)
{
log.LogInformation($"Full blob path: {blobTrigger}");
}
بيانات التعريف
يوفر مشغل blob العديد من خصائص بيانات التعريف. يمكن استخدام هذه الخصائص كجزء من تعبيرات الربط في روابط أخرى أو معلمات في التعليمات البرمجية الخاصة بك.
| الخاصية | الوصف |
|---|---|
blobTrigger |
الطريق إلى الفقاعة المثيرة. |
uri |
عنوان URI الخاص بالفقاعة للموقع الأساسي. |
properties |
خصائص نظام الفقاعة. |
metadata |
البيانات الوصفية المعرفة من قبل المستخدم للنقطة. |
يمكن الحصول على بيانات التعريف من خاصية الكائن المتوفر context ، كما هو موضح في المثال التالي ، والذي يسجل المسار إلى النقطة المشغلة (blobTrigger) ، بما في ذلك الحاويةbindingData:
module.exports = async function (context, myBlob) {
context.log("Full blob path:", context.bindingData.blobTrigger);
};
بيانات التعريف
بيانات التعريف متوفرة من خلال المعلمة $TriggerMetadata.
الاستخدام
يعتمد استخدام مشغل Blob على إصدار حزمة الإضافة ، وطريقة C # المستخدمة في تطبيق الوظائف الخاص بك ، والتي يمكن أن تكون واحدة مما يلي:
مكتبة الفئة أثناء العملية هي دالة C# مترجمة يتم تشغيلها في نفس العملية مثل وقت تشغيل الوظائف.
اختر إصدارا للاطلاع على تفاصيل الاستخدام للوضع والإصدار.
يتم دعم أنواع المعلمات التالية لكافة الإصدارات:
StreamTextReaderstringByte[]
أنواع المعلمات التالية خاصة بإصدار الإضافة وتتطلب FileAccess.ReadWrite في مكتبة فئة C # الخاصة بك:
للحصول على أمثلة باستخدام هذه الأنواع، انظر إلي مستودع GitHub لملحق البرنامج. تعرف على المزيد عن هذه الأنواع الجديدة المختلفة وكيفية الترحيل إليها من دليل ترحيل Azure.Storage.Blobs.
يمكنك أيضا استخدام السمة StorageAccountAttribute لتحديد حساب التخزين المراد استخدامه. يمكنك القيام بذلك عندما تحتاج إلى استخدام حساب تخزين مختلف عن الوظائف الأخرى في المكتبة. تأخذ الدالة الإنشائية اسم إعداد تطبيق يحتوي على سلسلة اتصال تخزين. يمكن تطبيق السمة على مستوى المعلمة أو الأسلوب أو الفئة. يُظهر المثال التالي مستوى الفئة ومستوى الأسلوب:
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("BlobTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
....
}
يتم تحديد حساب التخزين للاستخدام بالترتيب التالي:
- خاصية
BlobTriggerالسمةConnection. StorageAccountالسمة المطبقة على نفس المعلمة المماثلة لهاBlobTrigger.- السمة
StorageAccountالمطبقة على الوظيفة. - السمة
StorageAccountالمطبقة على الفئة. - حساب التخزين الافتراضي لتطبيق الوظيفة، والذي يتم تعريفه في
AzureWebJobsStorageإعداد التطبيق.
الارتباط ب string، أو Byte[] يوصى به فقط عندما يكون حجم الفقاعة صغيرا. يوصى بذلك لأنه يتم تحميل محتويات blob بالكامل في الذاكرة. بالنسبة لمعظم النقط، استخدم علامة Stream أو CloudBlockBlob نوعا. لمزيد من المعلومات، راجع التزامن واستخدام الذاكرة.
إذا تلقيت رسالة خطأ عند محاولة الارتباط بأحد أنواع SDK للتخزين، فتأكد من أن لديك مرجعا إلى إصدار Storage SDK الصحيح.
تمنحك السمة @BlobTrigger حق الوصول إلى كائن ثنائي كبير الحجم الذي أدي إلى تشغيل الوظيفة. للحصول على التفاصيل، ارجع إلى مثال على المشغل.
يمكنك الوصول إلى بيانات كائن ثنائي كبير الحجم باستخدام context.bindings.<NAME> المكان <NAME> الذي يطابق القيمة المعرفة في function.json.
يمكنك الوصول إلى بيانات كائن ثنائي كبير الحجم عبر معلمة تطابق الاسم المعين بواسطة معلمة اسم الربط في ملفfunction.json.
يمكنك الوصول إلى بيانات كائن ثنائي كبير الحجم عبر المعلمة المكتوبة على أنها InputStream. للحصول على التفاصيل، ارجع إلى مثال على المشغل.
الاتصالات
connection الخاصية هي مرجع إلى تكوين البيئة الذي يحدد كيفية اتصال التطبيق ب Azure Blobs. وقد تحدد ما يلي:
- اسم إعداد تطبيق يحتوي على سلسلة اتصال
- اسم بادئة مشتركة لإعدادات تطبيق متعددة، تحدد معا اتصالا يستند إلى الهوية.
إذا كانت القيمة التي تم تكوينها مطابقة تامة لإعداد واحد ومطابقة بادئة لإعدادات أخرى، استخدام التطابق التام.
سلسلة الاتصال
للحصول على سلسلة اتصال، اتبع الخطوات الموضحة في إدارة مفاتيح الوصول إلى حساب التخزين. يجب أن تكون سلسلة الاتصال لحساب تخزين للأغراض العامة، وليس حساب تخزين Blob.
يجب تخزين سلسلة الاتصال هذه في إعداد تطبيق باسم يطابق القيمة المحددة بواسطة connection خاصية تكوين الربط.
إذا كان اسم إعداد التطبيق يبدأ بـ "AzureWebJobs"، يمكنك تحديد باقي الاسم هنا فقط. على سبيل المثال، إذا قمت بتعيين connection "MyStorage"، يبحث وقت تشغيل الوظائف عن إعداد تطبيق يسمى "AzureWebJobsMyStorage". إذا تركت connection فارغا، فسيستخدم وقت تشغيل الوظائف سلسلة اتصال التخزين الافتراضية في إعداد التطبيق المسمى AzureWebJobsStorage.
الاتصالات القائمة على الهوية
إذا كنت تستخدم الإصدار 5.x أو أعلى من الملحق، فبدلا من استخدام سلسلة اتصال مع سر، يمكنك جعل التطبيق يستخدم هوية Azure Active Directory. للقيام بذلك ، يمكنك تحديد الإعدادات تحت بادئة شائعة تقوم بتعيين connection الخاصية في تكوين المشغل والربط.
إذا كنت تقوم بالإعداد connection إلى "AzureWebJobsStorage"، فراجع الاتصال بمساحة تخزين مضيفة باستخدام هوية. بالنسبة لكافة الاتصالات الأخرى، يتطلب الملحق الخصائص التالية:
| الخاصية | قالب متغير البيئة | الوصف | قيمة المثال |
|---|---|---|---|
| Blob Service URI | <CONNECTION_NAME_PREFIX>__serviceUri1 |
مستوى البيانات URI لخدمة blob التي تتصل بها ، باستخدام مخطط HTTPS. | https://< storage_account_name.blob.core.windows.net> |
<CONNECTION_NAME_PREFIX>__blobServiceUri 1 يمكن استخدامها كاسم مستعار. إذا كان سيتم استخدام تكوين الاتصال بواسطة مشغل نقطة ، blobServiceUri فيجب أن يكون مصحوبا queueServiceUriأيضا ب . انظر أدناه.
serviceUri لا يمكن استخدام النموذج عند استخدام تكوين الاتصال العام عبر النقط و/أو قوائم الانتظار و/أو الجداول. يمكن ل URI نفسه تعيين خدمة blob فقط. كبديل ، يمكنك توفير عنوان URI خصيصا لكل خدمة ، مما يسمح باستخدام اتصال واحد. إذا تم توفير كلا الإصدارين ، استخدام النموذج متعدد الخدمات. لتكوين الاتصال لخدمات متعددة، بدلا من ، قم بتعيين <CONNECTION_NAME_PREFIX>__serviceUri:
| الخاصية | قالب متغير البيئة | الوصف | قيمة المثال |
|---|---|---|---|
| Blob Service URI | <CONNECTION_NAME_PREFIX>__blobServiceUri |
مستوى البيانات URI لخدمة blob التي تتصل بها ، باستخدام مخطط HTTPS. | https://< storage_account_name.blob.core.windows.net> |
| URI لخدمة قائمة الانتظار (مطلوب لمشغلات blob2) | <CONNECTION_NAME_PREFIX>__queueServiceUri |
مستوى البيانات URI لخدمة قائمة انتظار، باستخدام مخطط HTTPS. هذه القيمة مطلوبة فقط لمشغلات blob. | https://< storage_account_name.queue.core.windows.net> |
2 يعالج مشغل الفقاعة الفشل عبر عمليات إعادة المحاولة المتعددة عن طريق كتابة نقاط سامة في قائمة انتظار. في serviceUri النموذج ، AzureWebJobsStorage يتم استخدام الاتصال. ومع ذلك ، عند التحديد blobServiceUri، يجب أيضا توفير URI لخدمة قائمة الانتظار مع queueServiceUri. يوصى باستخدام الخدمة من نفس حساب التخزين مثل خدمة blob. ستحتاج أيضا إلى التأكد من أن المشغل يمكنه قراءة الرسائل وكتابتها في خدمة قائمة الانتظار التي تم تكوينها عن طريق تعيين دور مثل "مساهم بيانات قائمة انتظار التخزين".
قد يتم تعيين خصائص إضافية لتخصيص الاتصال. راجع الخصائص الشائعة للاتصالات المستندة إلى الهوية.
عند استضافتها في خدمة Azure Functions، تستخدم الاتصالات المستندة إلى الهوية هوية مدارة. تستخدم الهوية المعينة من قبل النظام بشكل افتراضي على الرغم من إمكانية تحديد هوية معينة من قبل المستخدم مع خصائص credential و clientID. عند التشغيل في سياقات أخرى، مثل التطوير المحلي، يتم استخدام هوية المطور بدلا من ذلك، على الرغم من أنه يمكن تخصيصها. راجع التنمية المحلية مع الاتصالات القائمة على الهوية.
منح الإذن للهوية
مهما كانت الهوية المستخدمة يجب أن يكون لديك أذونات لتنفيذ الإجراءات المقصودة. ستحتاج إلى تعيين دور في Azure RBAC، باستخدام أدوار مضمنة أو مخصصة توفر هذه الأذونات.
هام
قد تعرض بعض الأذونات بواسطة الخدمة الهدف غير الضرورية لكافة السياقات. حيثما أمكن، الالتزام بمبدأ أقل امتيازومنح الهوية الامتيازات المطلوبة فقط. على سبيل المثال، إذا كان التطبيق يحتاج فقط إلى أن يكون قادرا على القراءة من مصدر بيانات، فاستخدم دورا لديه إذن للقراءة فقط. سيكون من غير المناسب تعيين دور يسمح أيضا بالكتابة إلى تلك الخدمة ، لأن هذا سيكون إذنا مفرطا لعملية قراءة. وبالمثل ، قد ترغب في التأكد من أن تعيين الدور يتم تحديده فقط على الموارد التي تحتاج إلى قراءة.
ستحتاج إلى إنشاء تعيين دور يوفر الوصول إلى حاوية blob في وقت التشغيل. إن أدوار الإدارة، مثل Owner، غير كافية. يعرض الجدول التالي الأدوار المضمنة الموصى بها عند استخدام ملحق Blob Storage في التشغيل العادي. قد يتطلب التطبيق الخاص بك أذونات إضافية استنادا إلى التعليمة البرمجية التي تكتبها.
| نوع الربط | مثال على الأدوار المضمنة |
|---|---|
| مشغّل | مالك بيانات التخزين Blobومساهمبيانات قائمة انتظار التخزين1 يجب أيضا منح أذونات إضافية لاتصال AzureWebJobsStorage. 2 |
| ربط بيانات الإدخال | قارئ بيانات للبيانات الثنائية الكبيرة للتخزين |
| ربط بيانات الإخراج | مالك بيانات كائن ثنائي كبير الحجم للتخزين |
1 يعالج مشغل blob الفشل عبر عمليات إعادة المحاولة المتعددة عن طريق كتابة نقاط السم إلى قائمة انتظار على حساب التخزين المحدد بواسطة الاتصال.
2 يتم استخدام اتصال AzureWebJobsStorage داخليا للنقاط وقوائم الانتظار التي تمكن المشغل. إذا تم تكوينه لاستخدام اتصال يستند إلى الهوية، فستحتاج إلى أذونات إضافية تتجاوز المتطلبات الافتراضية. يتم تغطية هذه الأدوار من خلال أدوار مالك بيانات Storage Blob و Storage Queue Data Contributor و Storage Account Contributor . لمعرفة المزيد، راجع الاتصال بمساحة تخزين المضيف باستخدام هوية.
أنماط اسم كائن ثنائي كبير الحجم
يمكنك تحديد نمط اسم كائن ثنائي كبير الحجم في الخاصية path في function.json أو في الدالة الإنشائية للسمة BlobTrigger. يمكن أن يكون نمط الاسم تعبير عامل تصفية أو ربط. توفر الأقسام التالية أمثلة.
تلميح
لا يمكن أن يحتوي اسم الحاوية على محلل في نمط الاسم.
الحصول على اسم الملف والملحق
يوضح المثال التالي كيفية ربط اسم ملف كائن ثنائي كبير الحجم والملحق بشكل منفصل:
"path": "input/{blobname}.{blobextension}",
إذا تمت تسمية كائن ثنائي كبير الحجم original-Blob1.txt، فإن قيم المتغيرين blobname وblobextension في التعليمة البرمجية للوظيفة هي original-Blob1 وtxt.
تصفية على اسم كائن ثنائي كبير الحجم
يتم تشغيل المثال التالي فقط على الكائنات الثنائية كبيرة الحجم في الحاوية input التي تبدأ بالسلسلة "original-":
"path": "input/original-{name}",
إذا كان اسم كائن ثنائي كبير الحجم original-Blob1.txt، فإن قيمة المتغير name في التعليمة البرمجية للوظيفة هي Blob1.txt.
تصفية على نوع الملف
يتم تشغيل المثال التالي فقط على ملفات .png:
"path": "samples/{name}.png",
تصفية على الأقواس المتعرجة في أسماء الملفات
للبحث عن الأقواس المتعرجة في أسماء الملفات، تخلص الأقواس باستخدام قوسين. يقوم المثال التالي بتصفية الكائنات الثنائية كبيرة الحجم التي تحتوي على أقواس متعرجة في الاسم:
"path": "images/{{20140101}}-{name}",
إذا تمت تسمية كائن ثنائي كبير الحجم بالاسم {20140101}-soundfile.mp3، فإن nameقيمة المتغير في التعليمة البرمجية للوظيفة هي soundfile.mp3.
التحقق
يعمل التحقق كهجين بين فحص السجلات وتشغيل عمليات المسح الضوئية الدورية للحاويات. يتم مسح الكائنات الثنائية كبيرة الحجم ضوئياً في مجموعات من 10,000 في وقت واحد مع رمز مميز للمتابعة المستخدم بين الفواصل الزمنية.
تحذير
بالإضافة إلى ذلك، يتم إنشاء سجلات التخزين على أساس أفضل جهد. ليس هناك ما يضمن أن يتم تسجيل جميع الأحداث. في بعض الحالات، قد يتم فقد السجلات.
إذا كنت تحتاج إلى معالجة كائن ثنائي كبير الحجم أسرع أو أكثر موثوقية، ففكر في إنشاء رسالة قائمة انتظار عند إنشاء كائن ثنائي كبير الحجم. ثم استخدم مشغل قائمة انتظار بدلاً من مشغل كائن ثنائي كبير الحجم لمعالجة كائن ثنائي كبير الحجم. يتمثل الخيار الآخر في استخدام شبكة الأحداث، راجع البرنامج التعليمي التنفيذ التلقائي لتحجيم الصور التي تم تحميلها باستخدام Event Grid.
البدائل
مشغل Event Grid
ملاحظة
عند استخدام ملحقات التخزين 5.x وأعلى، فإن مشغل Blob يحتوي على دعم مضمن لمشغل Blob المستند إلى Event Grid. لمزيد من المعلومات، راجع القسم ملحق التخزين 5.x والأعلى أدناه.
يحتوي مشغل Event Grid أيضاً على دعم مضمن لأحداث كائن ثنائي كبير الحجم. استخدام Event Grid بدلاً من مشغل تخزين Blob للسيناريوهات التالية:
حسابات تخزين Blob فقط: حسابات تخزين Blob فقط مدعومة لروابط إدخال وإخراج ولكن ليس لمشغلات كائن ثنائي كبير الحجم.
عالي النطاق: يمكن تعريف النطاق العالي بشكل غير محكم على أنه حاويات تحتوي على أكثر من 100,000 كائن ثنائي كبير الحجم بداخلها أو حسابات تخزين بها أكثر من 100 تحديث لكائن ثنائي كبير الحجم في الثانية.
الكائنات الثنائية كبيرة الحجم الموجودة: سيقوم مشغل كائن ثنائي كبير الحجم بمعالجة كافة الكائنات الثنائية كبيرة الحجم الموجودة في الحاوية عند إعداد المشغل. إذا كانت لديك حاوية مع العديد من الكائنات الثنائية كبيرة الحجم الموجودة وتريد فقط تشغيل هذه الكائنات الجديدة، استخدم مشغل Event Grid.
تقليل زمن الانتقال: إذا كان تطبيق الوظائف الخاص بك على خطة الاستهلاك، فقد يكون هناك تأخير يصل إلى 10 دقائق في معالجة الكائنات الثنائية كبيرة الحجم الجديدة إذا كان تطبيق الوظائف قد تعطل. لتجنب زمن الانتقال هذا، يمكنك التبديل إلى خطة App Service مع تمكين مجموعات قابلية وصول عالية التوفر AlwaysOn. يمكنك أيضاً استخدام مشغل Event Grid مع حساب تخزين Blob الخاص بك. للحصول على مثال، راجع البرنامج التعليمي Event Grid.
راجع البرنامج التعليمي تغيير حجم الصورة مع Event Grid لمثال Event Grid.
ملحق التخزين 5.x وأعلى
عند استخدام ملحق التخزين، يوجد دعم مضمن ل "شبكة الأحداث" في مشغل Blob، والذي يتطلب تعيين المعلمة source إلى "شبكة الأحداث" في مشغل Blob الحالي.
لمزيد من المعلومات حول كيفية استخدام مشغل Blob استناداً إلى Event Grid، راجع دليل Event Grid Blob Trigger.
مشغل مخزن قائمة الانتظار
هناك نهج آخر لمعالجة الكائنات الثنائية كبيرة الحجم وهي كتابة رسائل قائمة الانتظار التي تتوافق مع الكائنات الثنائية كبيرة الحجم التي يتم إنشاؤها أو تعديلها ثم استخدام مشغل تخزين قائمة الانتظار لبدء المعالجة.
إيصالات كائن ثنائي كبير الحجم
يضمن وقت تشغيل Azure Functions أن يتم استدعاء أية وظيفة مشغل كائن ثنائي كبير الحجم أكثر من مرة لنفس الكائن الثنائي كبير الحجم الجديد أو المحدث. لتحديد ما إذا تمت معالجة إصدار كائن ثنائي كبير الحجم معين، فإنه يحتفظ بإيصالات الكائنات الثنائية كبيرة الحجم.
تخزن Azure Functions إيصالات الكائنات الثنائية كبيرة الحجم في حاوية باسم azure-webjobs-hosts في حساب تخزين Azure لتطبيق الوظائف الخاص بك (المعرف من خلال إعداد التطبيق AzureWebJobsStorage). يحتوي إيصال كائن ثنائي كبير الحجم على المعلومات التالية:
- الوظيفة المشغلة (
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>، على سبيل المثال:MyFunctionApp.Functions.CopyBlob) - اسم الحاوية
- نوع الكائن الثنائي كبير الحجم (
BlockBlobأوPageBlob) - اسم كائن ثنائي كبير الحجم
- ETag (معرف إصدار كائن ثنائي كبير الحجم، على سبيل المثال:
0x8D1DC6E70A277EF)
لفرض إعادة معالجة كائن ثنائي كبير الحجم، قم بحذف إيصال لكائن ثنائي كبير الحجم من الحاوية azure-webjobs-hosts يدوياً. في حين أن إعادة المعالجة قد لا تحدث على الفور، فمن المؤكد أن تحدث في وقت لاحق. لإعادة المعالجة فوراً، يمكن تحديث كائن ثنائي كبير الحجم scaninfo في azure-webjobs-hosts/blobscaninfo. سيتم مسح أي كائنات ثنائية كبيرة الحجم ضوئياً بطابع زمني تم تعديله مؤخراً بعد الخاصية LatestScan مرة أخرى.
كائنات ثنائية كبيرة الحجم غير قابلة للمعالجة
عندما تفشل دالة مشغل نقطة لنقطة معينة، تعيد وظائف Azure محاولة هذه الدالة بما مجموعه خمس مرات بشكل افتراضي.
إذا فشلت جميع المحاولات الخمس، تضيف Azure Functions رسالة إلى قائمة انتظار التخزين المسماة webjobs-blobtrigger-poison. الحد الأقصى لعدد مرات إعادة المحاولة قابل للتكوين. يتم استخدام نفس إعداد MaxDequeueCount لمعالجة كائن ثنائي كبير الحجم غير قابل للمعالجة ومعالجة رسالة قائمة انتظار غير قابلة للمعالجة. رسالة قائمة الانتظار للكائنات الثنائية كبيرة الحجم غير القابلة للمعالجة هي عنصر JSON الذي يحتوي على الخصائص التالية:
- FunctionId (بالتنسيق
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>) - BlobType (
BlockBlobأوPageBlob) - ContainerName
- BlobName
- ETag (معرف إصدار كائن ثنائي كبير الحجم، على سبيل المثال:
0x8D1DC6E70A277EF)
استخدام التزامن والذاكرة
يستخدم مشغل كائن ثنائي كبير الحجم قائمة انتظار داخلياً، بحيث يتم التحكم في الحد الأقصى لعدد استدعاءات الوظيفة المتزامنة بواسطة تكوين قوائم الانتظار في host.json. تحدد الإعدادات الافتراضية التزامن إلى 24 استدعاء. ينطبق هذا الحد بشكل منفصل على كل وظيفة تستخدم مشغل كائن ثنائي كبير الحجم.
ملاحظة
بالنسبة للتطبيقات التي تستخدم الإصدار 5.0.0 أو إصدار أعلى لملحق التخزين، ينطبق تكوين قوائم الانتظار في host.json فقط على مشغلات قوائم الانتظار. يتم التحكم في تزامن مشغل كائن ثنائي كبير الحجم بدلاً من ذلك عن طريق تكوين الكائنات الثنائية كبيرة الحجم في host.json.
تحدد خطة الاستهلاك تطبيق وظائف على جهاز ظاهري واحد (VM) إلى 1.5 غيغابايت للذاكرة. يتم استخدام الذاكرة بواسطة كل مثيل وظيفة يتم تنفيذه بشكل متزامن وبواسطة وقت تشغيل Functions نفسه. إذا كانت الوظيفة التي تم تشغيلها بواسطة كائن ثنائي كبير الحجم تقوم بتحميل كائن ثنائي كبير الحجم بأكمله في الذاكرة، فإن الحد الأقصى للذاكرة المستخدمة من قبل تلك الوظيفة فقط للكائنات الثنائية كبيرة الحجم هو 24 * الحد الأقصى لحجم كائن ثنائي كبير الحجم. على سبيل المثال، تطبيق الوظائف الذي يحتوي على ثلاث وظائف يتم تشغيلها بواسطة كائن ثنائي كبير الحجم والإعدادات الافتراضية سيكون لها حد أقصى للتزامن لكل جهاز ظاهري يبلغ 3 * 24 = 72 استدعاء وظيفة.
تقوم وظائف JavaScript وJava بتحميل كائن ثنائي كبير الحجم بأكمله في الذاكرة، وتقوم وظائف C# بذلك إذا قمت بربطها بـ string أو Byte[].
خصائص host.json
يحتوي ملف host.json على الإعدادات التي تتحكم في سلوك مشغل كائن ثنائي كبير الحجم. راجع القسم إعدادات host.json للحصول على تفاصيل حول الإعدادات المتوفرة.