Azure Cosmos DB مشغل لوظائف Azure 2.x وأعلى

يستخدم مشغل Azure Cosmos DB Triggerموجز تغيير Azure Cosmos DB للاستماع إلى الإدراجات والتحديثات عبر الأقسام. نشر موجز التغيير إدراج والتحديثات، وليس الحذف.

للحصول على معلومات حول تفاصيل الإعداد والتكوين، راجع نظرة عامة.

مثال

يعتمد استخدام المشغل على إصدار حزمة الإضافة وطريقة C # المستخدمة في تطبيق الوظائف، والتي يمكن أن تكون واحدة مما يلي:

مكتبة الفئة أثناء العملية هي دالة C# مترجمة يتم تشغيلها في نفس العملية مثل وقت تشغيل الوظائف.

تعتمد الأمثلة التالية على إصدار الامتداد لوضع C # المحدد.

يظهر المثال التالي دالة C#‎ التي يتم استدعاؤها عند وجود إدراجات أو تحديثات في قاعدة البيانات المحددة والمجموعة.

using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;

namespace CosmosDBSamplesV2
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
            ILogger log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.LogInformation($"Documents modified: {documents.Count}");
                log.LogInformation($"First document Id: {documents[0].Id}");
            }
        }
    }
}

يتم استدعاء هذه الدالة عند وجود إدراجات أو تحديثات في قاعدة البيانات المحددة والمجموعة.

    @FunctionName("cosmosDBMonitor")
    public void cosmosDbProcessor(
        @CosmosDBTrigger(name = "items",
            databaseName = "ToDoList",
            collectionName = "Items",
            leaseCollectionName = "leases",
            createLeaseCollectionIfNotExists = true,
            connectionStringSetting = "AzureCosmosDBConnection") String[] items,
            final ExecutionContext context ) {
                context.getLogger().info(items.length + "item(s) is/are changed.");
            }

من مكتبة وقت تشغيل دوال Java، استخدم @CosmosDBTrigger التعليق التوضيحي على معلمات الدالة التي تأتي قيمتها من تخزين جدول. يمكن استخدام هذا التعليق التوضيحي مع أنواع Java الأصلية أو POJOs أو القيم االخالية Optional<T>.

يظهر المثال التالي رابط مشغل Cosmos DB في ملف function.js و دالة JavaScript التي تستخدم الربط. الدالة تكتب رسائل السجل عند إضافة سجلات COSMOS DB أو تعديلها.

إليك بيانات الربط في ملف function.json:

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}

لاحظ أن بعض أسماء سمات الربط تغيرت في الإصدار 4.x من ملحق قاعدة بيانات Azure Cosmos.

هنا تعليمة برمجية JavaScript:

    module.exports = async function (context, documents) {
      context.log('First document Id modified : ', documents[0].id);
    }

يوضح المثال التالي كيفية تشغيل دالة كتغييرات البيانات في Cosmos DB.

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}

لاحظ أن بعض أسماء سمات الربط تغيرت في الإصدار 4.x من ملحق قاعدة بيانات Azure Cosmos.

في الملف run.ps1، يمكنك الوصول إلى المستند الذي يؤدي إلى تشغيل الدالة عبر معلمة $Documents.

param($Documents, $TriggerMetadata) 

Write-Host "First document Id modified : $($Documents[0].id)" 

يظهر المثال التالي ربط مشغل Cosmos DB في ملف function.json و دالة Python التي تستخدم الربط. الدالة تكتب رسائل السجل عند تعديل سجلات Cosmos DB.

إليك بيانات الربط في ملف function.json:

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseCollectionName": "leases",
    "connectionStringSetting": "<connection-app-setting>",
    "databaseName": "Tasks",
    "collectionName": "Items",
    "createLeaseCollectionIfNotExists": true
}

لاحظ أن بعض أسماء سمات الربط تغيرت في الإصدار 4.x من ملحق قاعدة بيانات Azure Cosmos.

إليك التعليمة البرمجية لـ Python:

    import logging
    import azure.functions as func


    def main(documents: func.DocumentList) -> str:
        if documents:
            logging.info('First document Id modified: %s', documents[0]['id'])

السمات

تستخدم كل من مكتبات C#‎ قيد المعالجةوالعملية المعزولةCosmosDBTriggerAttribute لتحديد الدالة. يستخدم البرنامج النصي C # بدلا من ذلك ملف تكوين function.json.

خاصية السمة الوصف
ConnectionStringSetting اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بحساب Azure Cosmos DB الذي تتم مراقبته. لمزيد من المعلومات، راجع الاتصالات.
DatabaseName اسم قاعدة بيانات Azure Cosmos DB مع المجموعة التي يتم مراقبتها.
CollectionName اسم المجموعة التي تتم مراقبتها.
LeaseConnectionStringSetting (اختياري) اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بحساب Azure Cosmos DB الذي يحتوي على مجموعة التأجير.

عند عدم التعيين، تُستخدم القيمة ConnectionStringSetting. يتم تعيين هذه المعلمة تلقائيًا عند إنشاء الربط في المدخل. يجب أن يكون لسلسلة الاتصال لمجموعة التأجير أذونات الكتابة.
LeaseDatabaseName (اختياري) اسم قاعدة البيانات التي تحتوي على المجموعة المستخدمة لتخزين عقود الإيجار. عند عدم التعيين، تُستخدم قيمة الإعداد databaseName.
LeaseCollectionName (اختياري) اسم المجموعة المستخدمة لتخزين عقود الإيجار. عند عدم التعيين، تُستخدم القيمة leases.
CreateLeaseCollectionIfNotExists (اختياري) عند تعيينها إلى true، يتم إنشاء مجموعة عقود الإيجار تلقائيًّا عندما لا تكون موجودة بالفعل. القيمة الافتراضية هي false.
LeasesCollectionThroughput (اختياري) تعريف عدد وحدات الطلب لتعيينها عند إنشاء مجموعة التأجيرات. يتم استخدام هذا الإعداد فقط عند تعيين CreateLeaseCollectionIfNotExists إلى true. يتم تعيين هذه المعلمة تلقائيا عند إنشاء الربط باستخدام المدخل.
LeaseCollectionPrefix (اختياري) عند التعيين، تتم إضافة القيمة كبادئة إلى عقود الإيجار التي تم إنشاؤها في مجموعة عقود الإيجار لهذه الوظيفة. يسمح استخدام بادئة دالتين Azure منفصلة مشاركة نفس مجموعة Lease باستخدام بادئات مختلفة.
FeedPollDelay (اختياري) الوقت (بالمللي ثانية) للتأخير بين الاستقصاء عن قسم للتغييرات الجديدة على الخلاصة، بعد أن يتم تجفيف كافة التغييرات الحالية. الافتراضي هو 5000 مللي ثانية أو 5 ثوان.
LeaseAcquireInterval (اختياري) عند تعيينها، فإنه يعرف، في ميلي ثانية، الفاصل الزمني لبدء مهمة لحساب إذا تم توزيع الأقسام بالتساوي بين مثيلات المضيف المعروفة. الافتراضي هو 13000 (13 ثانية).
LeaseExpirationInterval (اختياري) عند تعيينها، تعرف، بالمللي ثانية، الفترة الزمنية التي يتم أخذ التأجير من أجلها على عقد إيجار يمثل قسمًا. إذا لم يتم تجديد التأجير ضمن هذه الفترة الزمنية، فإنه يؤدي إلى انتهاء صلاحية وملكية القسم سينتقل إلى مثيل آخر. الافتراضي هو 60000 (60 ثانية).
LeaseRenewInterval (اختياري) عند تعيينها، تعرف، بالمللي ثانية، فترة التجديد لكافة عقود الإيجار للأقسام الموجودة حاليا بواسطة مثيل. الافتراضي هو 17000 (17 ثانية).
CheckpointInterval (اختياري) عند تعيينها، تعرف، بالمللي ثانية، الفاصل الزمني بين نقاط التفتيش التأجير. الافتراضي هو دائما بعد كل استدعاء دالة.
CheckpointDocumentCount (اختياري) تخصيص كمية المستندات بين نقاط تفتيش الإيجار. الافتراضي هو بعد كل استدعاء وظيفة.
MaxItemsPerInvocation (اختياري) عند تعيين هذه الخاصية تعيين الحد الأقصى لعدد العناصر المتلقاة لكل استدعاء دالة. إذا تم تنفيذ العمليات في المجموعة المراقبة من خلال الإجراءات المخزنة، يتم الاحتفاظ بنطاق المعاملة عند قراءة العناصر من موجز التغيير. ونتيجة لذلك، قد يكون عدد العناصر المتلقاة أعلى من القيمة المحددة بحيث يتم إرجاع العناصر التي تم تغييرها بواسطة نفس المعاملة كجزء من دفعة ذرية واحدة.
StartFromBeginning (اختياري) يخبر هذا الخيار المشغل قراءة التغييرات من بداية محفوظات التغيير للمجموعة بدلا من البدء في الوقت الحالي. تعمل القراءة من البداية فقط في المرة الأولى التي يبدأ فيها المشغل ، كما هو الحال في عمليات التشغيل اللاحقة ، يتم تخزين نقاط التفتيش بالفعل. وتعيين هذا الخيار إلى true عندما يكون هناك عقود إيجار تم إنشاؤها بالفعل ليس له أي تأثير.
PreferredLocations (اختياري) يعرف المواقع المفضلة (المناطق) لحسابات قاعدة البيانات المنسوخة جغرافيا في خدمة Azure Cosmos DB. يجب فصل القيم بفواصل. على سبيل المثال، "شرق الولايات المتحدة، جنوب وسط الولايات المتحدة، شمال أوروبا".
UseMultipleWriteLocations (اختياري) تمكين الحسابات متعددة المناطق للكتابة في مجموعة عقود الإيجار.
UseDefaultJsonSerialization (اختياري) يتيح لك الاستخدام JsonConvert.DefaultSettings في المجموعة الخاضعة للمراقبة. ينطبق هذا الإعداد فقط على المجموعة الخاضعة للمراقبة والمستهلك لإعداد التسلسل المستخدم في المجموعة الخاضعة للمراقبة. JsonConvert.DefaultSettings يجب تعيين في فئة مشتقة من CosmosDBWebJobsStartup.

تعليقات توضيحية

في مكتبة وقت تشغيل وظائف Java، استخدم التعليق التوضيحي @CosmosDBInput على المعلمات التي سيتم كتابتها إلى Cosmos DB. يدعم التعليق التوضيحي الخصائص التالية:

التكوين

يشرح الجدول التالي خصائص تكوين الربط التي قمت بتعيينها في الملف function.json ، حيث تختلف الخصائص حسب إصدار الملحق:

خاصية function.json الوصف
النوع يجب تعيينها إلى cosmosDBTrigger.
⁩direction⁧ يجب تعيينه إلى in. يتم تعيين هذه المعلمة تلقائيًا عند إنشاء المشغل في مدخل Azure.
⁩الاسم⁧ اسم المتغير المستخدم في رمز الدالة الذي يمثل قائمة المستندات ذات التغييرات.
connectionStringSetting اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بحساب Azure Cosmos DB الذي تتم مراقبته. لمزيد من المعلومات، راجع الاتصالات.
databaseName اسم قاعدة بيانات Azure Cosmos DB مع المجموعة التي يتم مراقبتها.
collectionName اسم المجموعة التي تتم مراقبتها.
leaseConnectionStringSetting (اختياري) اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بحساب Azure Cosmos DB الذي يحتوي على مجموعة التأجير.

عند عدم التعيين، تُستخدم القيمة connectionStringSetting. يتم تعيين هذه المعلمة تلقائيًا عند إنشاء الربط في المدخل. يجب أن يكون لسلسلة الاتصال المخصصة لمجموعة التأجير أذونات كتابة.
leaseDatabaseName (اختياري) اسم قاعدة البيانات التي تحتوي على المجموعة المستخدمة لتخزين عقود الإيجار. عند عدم التعيين، تُستخدم قيمة الإعداد databaseName.
leaseCollectionName (اختياري) اسم المجموعة المستخدمة لتخزين عقود الإيجار. عند عدم التعيين، تُستخدم القيمة leases.
createLeaseCollectionIfNotExists (اختياري) عند تعيينها إلى true، يتم إنشاء مجموعة عقود الإيجار تلقائيًّا عندما لا تكون موجودة بالفعل. القيمة الافتراضية هي false.
leasesCollectionThroughput (اختياري) تعريف عدد وحدات الطلب لتعيينها عند إنشاء مجموعة التأجيرات. يتم استخدام هذا الإعداد فقط عند تعيين createLeaseCollectionIfNotExists إلى true. يتم تعيين هذه المعلمة تلقائيا عند إنشاء الربط باستخدام المدخل.
leaseCollectionPrefix (اختياري) عند التعيين، تتم إضافة القيمة كبادئة إلى عقود الإيجار التي تم إنشاؤها في مجموعة عقود الإيجار لهذه الوظيفة. يسمح استخدام بادئة دالتين Azure منفصلة مشاركة نفس مجموعة Lease باستخدام بادئات مختلفة.
feedPollDelay (اختياري) الوقت (بالمللي ثانية) للتأخير بين الاستقصاء عن قسم للتغييرات الجديدة على الخلاصة، بعد أن يتم تجفيف كافة التغييرات الحالية. الافتراضي هو 5000 مللي ثانية أو 5 ثوان.
leaseAcquireInterval (اختياري) عند تعيينها، فإنه يعرف، في ميلي ثانية، الفاصل الزمني لبدء مهمة لحساب إذا تم توزيع الأقسام بالتساوي بين مثيلات المضيف المعروفة. الافتراضي هو 13000 (13 ثانية).
leaseExpirationInterval (اختياري) عند تعيينها، تعرف، بالمللي ثانية، الفترة الزمنية التي يتم أخذ التأجير من أجلها على عقد إيجار يمثل قسمًا. إذا لم يتم تجديد التأجير ضمن هذه الفترة الزمنية، فإنه يؤدي إلى انتهاء صلاحية وملكية القسم سينتقل إلى مثيل آخر. الافتراضي هو 60000 (60 ثانية).
leaseRenewInterval (اختياري) عند تعيينها، تعرف، بالمللي ثانية، فترة التجديد لكافة عقود الإيجار للأقسام الموجودة حاليا بواسطة مثيل. الافتراضي هو 17000 (17 ثانية).
checkpointInterval (اختياري) عند تعيينها، تعرف، بالمللي ثانية، الفاصل الزمني بين نقاط التفتيش التأجير. الافتراضي هو دائما بعد كل استدعاء دالة.
نقطة التفتيشالمستندالعد (اختياري) تخصيص كمية المستندات بين نقاط تفتيش الإيجار. الافتراضي هو بعد كل استدعاء وظيفة.
maxItemsPerInvocation (اختياري) عند تعيين هذه الخاصية تعيين الحد الأقصى لعدد العناصر المتلقاة لكل استدعاء دالة. إذا تم تنفيذ العمليات في المجموعة المراقبة من خلال الإجراءات المخزنة، يتم الاحتفاظ بنطاق المعاملة عند قراءة العناصر من موجز التغيير. ونتيجة لذلك، قد يكون عدد العناصر المتلقاة أعلى من القيمة المحددة بحيث يتم إرجاع العناصر التي تم تغييرها بواسطة نفس المعاملة كجزء من دفعة ذرية واحدة.
startFromBeginning (اختياري) يخبر هذا الخيار المشغل قراءة التغييرات من بداية محفوظات التغيير للمجموعة بدلا من البدء في الوقت الحالي. تعمل القراءة من البداية فقط في المرة الأولى التي يبدأ فيها المشغل ، كما هو الحال في عمليات التشغيل اللاحقة ، يتم تخزين نقاط التفتيش بالفعل. وتعيين هذا الخيار إلى true عندما يكون هناك عقود إيجار تم إنشاؤها بالفعل ليس له أي تأثير.
preferredLocations (اختياري) يعرف المواقع المفضلة (المناطق) لحسابات قاعدة البيانات المنسوخة جغرافيا في خدمة Azure Cosmos DB. يجب فصل القيم بفواصل. على سبيل المثال، "شرق الولايات المتحدة، جنوب وسط الولايات المتحدة، شمال أوروبا".
useMultipleWriteLocations (اختياري) تمكين الحسابات متعددة المناطق للكتابة في مجموعة عقود الإيجار.

راجع قسم المثال للحصول على أمثلة كاملة.

الاستخدام

يعتمد نوع المعلمة الذي يدعمه مشغل Azure Cosmos DB على إصدار وقت تشغيل الدالات وإصدار حزمة الملحقات وطريقة C# المستخدمة.

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

هام

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

هام

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

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

الاتصالات

تعد connectionStringSetting/connection الخصائص والخصائص leaseConnectionStringSetting/leaseConnection مراجع لتكوين البيئة الذي يحدد كيفية اتصال التطبيق بقاعدة بيانات Azure Cosmos. وقد تحدد:

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

سلسلة الاتصال

يجب تخزين سلسلة الاتصال لحساب قاعدة البيانات الخاص بك في إعداد تطبيق باسم يطابق القيمة المحددة بواسطة خاصية الاتصال الخاصة بتكوين الربط.

الاتصالات القائمة على الهوية

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

في هذا الوضع، يتطلب الملحق الخصائص التالية:

الخاصية قالب متغير البيئة الوصف قيمة المثال
نقطة نهاية الحساب <CONNECTION_NAME_PREFIX>__accountEndpoint نقطة نهاية حساب Azure Cosmos DB URI. https://< database_account_name.documents.azure.com:443/>

قد يتم تعيين خصائص إضافية لتخصيص الاتصال. راجع الخصائص الشائعة للاتصالات المستندة إلى الهوية.

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

منح الإذن للهوية

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

هام

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

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

نوع الربط مثال على الأدوار المضمنة
مشغّل مساهم بيانات Cosmos DB المدمج
ربط بيانات الإدخال قارئ بيانات Cosmos DB المدمج
ربط بيانات الإخراج مساهم بيانات Cosmos DB المدمج

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