وظائف المشغلات ومفاهيم ربط البيانات في Azure

في هذه المقالة، ستتعلم المفاهيم عالية المستوى المحيطة بالمشغلات والارتباطات الخاصة بالوظائف.

تؤدي المشغلات إلى تشغيل وظيفة. يُعرف المشغل كيفية استدعاء وظيفة ويجب أن يكون للوظيفة مشغل واحد بالضبط. يمكن أن تمرر المشغلات أيضا البيانات إلى الدالة الخاصة بك، كما تفعل مع استدعاءات الأسلوب.

الربط بوظيفة هو طريقة لتوصيل دالاتك بشكل تعريفي بموارد أخرى؛ تقوم الروابط إما بتمرير البيانات إلى دالتك ( ربط إدخال) أو تمكنك من كتابة البيانات من دالتك ( ربط إخراج) باستخدام معلمات الربط. مشغل الدالة الخاص بك هو في الأساس نوع خاص من ربط الإدخال.

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

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

الأخذ بعين الاعتبار الأمثلة التالية كيفية تنفيذ وظائف مختلفة.

سيناريو مثال المشغِّل ربط بيانات الإدخال ربط بيانات الإخراج
تصل رسالة قائمة الانتظار الجديدة وتقوم بتشغيل دالة للكتابة إلى قائمة انتظار أخرى. رتل* بلا رتل*
تقرأ الوظيفة المجدولة محتويات Blob Storage وتنشئ مستند Azure Cosmos DB جديدا. ⁧⁩عدّاد الوقت⁧⁩ مخزن البيانات الثنائية الكبيرة Azure Cosmos DB
يتم استخدام Event Grid لقراءة صورة من Blob Storage ومستند من Azure Cosmos DB لإرسال بريد إلكتروني. Event Grid Blob Storage وAzure Cosmos DB SendGrid

* يمثل قوائم انتظار مختلفة

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

تلميح

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

تعريفات المشغل والربط

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

التعرف على المشغلات والروابط بشكل مختلف اعتمادًا على لغة التطوير. تأكد من تحديد لغتك في أعلى المقالة.

يوضح هذا المثال دالة تم تشغيلها بواسطة HTTP مع ربط إخراج يكتب رسالة إلى قائمة انتظار Azure Storage.

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

يتم تعريف مشغل HTTP (HttpTrigger) على Run الأسلوب لدالة تسمى HttpExample تقوم بإرجاع كائن MultiResponse :

[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
    FunctionContext executionContext)
{

يوضح MultiResponse هذا المثال تعريف الكائن الذي يقوم كلاهما بإرجاع HttpResponse إلى طلب HTTP ويكتب أيضا رسالة إلى قائمة انتظار تخزين باستخدام QueueOutput ربط:

public class MultiResponse
{
    [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

لمزيد من المعلومات، راجع دليل نموذج العامل المعزول C#‎.

تستخدم وظائف البرنامج النصي C# القديمة ملف تعريف function.json. لمزيد من المعلومات، راجع مرجع مطور البرنامج النصي Azure Functions C# (.csx).

بالنسبة لوظائف Java، يتم تكوين المشغلات والروابط عن طريق إضافة تعليقات توضيحية إلى أساليب ومعلمات محددة. يتم تعريف مشغل HTTP (@HttpTrigger) هذا على run أسلوب دالة تسمى HttpTriggerQueueOutput، والتي تكتب إلى قائمة انتظار تخزين محددة بواسطة التعليق التوضيحي @QueueOutput على المعلمة message :

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

لمزيد من المعلومات، راجع دليل مطور Java.

تعتمد الطريقة التي يتم بها تحديد المشغلات والربط للدالات Node.js على الإصدار المحدد من Node.js للدالات:

في Node.js للإصدار 4 من Functions، يمكنك تكوين المشغلات والروابط باستخدام الكائنات المصدرة من الوحدة النمطية @azure/functions . لمزيد من المعلومات، راجع دليل المطور Node.js.

هذا المثال هو دالة تم تشغيلها من قبل HTTP تنشئ عنصر قائمة انتظار لكل طلب HTTP تم تلقيه.

http يعرف الأسلوب الموجود على الكائن المصدر app مشغل HTTP، ويحدد storageQueue الأسلوب على output ربط إخراج على هذا المشغل.

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

const queueOutput = output.storageQueue({
    queueName: 'outqueue',
    connection: 'MyStorageConnectionAppSetting',
});

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    extraOutputs: [queueOutput],
    handler: async (request, context) => {
        const body = await request.text();
        context.extraOutputs.set(queueOutput, body);
        return { body: 'Created queue item.' };
    },
});

http يعرف الأسلوب الموجود على الكائن المصدر app مشغل HTTP، ويحدد storageQueue الأسلوب على output ربط إخراج على هذا المشغل.

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

const queueOutput = output.storageQueue({
    queueName: 'outqueue',
    connection: 'MyStorageConnectionAppSetting',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    const body = await request.text();
    context.extraOutputs.set(queueOutput, body);
    return { body: 'Created queue item.' };
}

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    extraOutputs: [queueOutput],
    handler: httpTrigger1,
});

يعرف ملف المثال function.json هذا الدالة:

    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "msg",
      "queueName": "outqueue",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

لمزيد من المعلومات، راجع دليل مطور PowerShell.

تعتمد الطريقة التي يتم بها تعريف الدالة على إصدار Python للدالات:

في Python for Functions الإصدار 2، يمكنك تعريف الدالة مباشرة في التعليمات البرمجية باستخدام المحسنات.

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

إضافة روابط البيانات إلى الوظيفة

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

تدعم Azure Functions روابط متعددة، والتي يجب تكوينها بشكل صحيح. على سبيل المثال، يمكن للدالة قراءة البيانات من قائمة انتظار (ربط الإدخال) وكتابة البيانات إلى قاعدة بيانات (ربط الإخراج) في وقت واحد.

ارتباطات البيانات المدعومة

يعرض هذا الجدول الروابط المعتمدة في الإصدارات الرئيسية من وقت تشغيل Azure Functions:

نوع 1.x1 2.x وأعلى2 المشغِّل الإدخال الإخراج
Blob storage
Azure Cosmos DB
Azure Data Explorer
عنوان SQL لـ Azure
Dapr4
شبكة الأحداث
مراكز الأحداث
خطافات HTTP والويب
مركز IoT
Kafka3
تطبيقات الجوّال
مراكز الإعلامات
تخزين قائمة الانتظار
Redis
RabbitMQ3
SendGrid
ناقل الخدمة
SignalR
تخزين الجداول
المؤقت
Twilio

ملاحظات:

  1. سينتهي الدعم للإصدار 1.x من وقت تشغيل Azure Functions في 14 سبتمبر 2026. نوصي بشدة بترحيل تطبيقاتك إلى الإصدار 4.x للحصول على الدعم الكامل.
  2. بدءا من وقت تشغيل الإصدار 2.x، يجب تسجيل جميع الروابط باستثناء HTTP وTimer. راجع تسجيل ملحقات الربط.
  3. المشغلات غير مدعومة في خطة الاستهلاك. يتطلب مشغلات تستند إلى وقت التشغيل.
  4. مدعوم في Kubernetes وIoT Edge وغيرها من الأوضاع المستضافة ذاتيا فقط.

للحصول على معلومات حول الروابط قيد المعاينة أو المعتمدة لاستخدام الإنتاج، راجع اللغات المدعومة.

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

أمثلة التعليمة البرمجية لروابط البيانات

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

تعتمد التعليمات البرمجية الملزمة ل C# على نموذج العملية المحدد.

الخدمة الأمثلة العينات
مساحة تخزين Blob المشغِّل
الادخال
الناتج
الارتباط
Azure Cosmos DB المشغِّل
الادخال
الناتج
الارتباط
Azure Data Explorer ‏(Kusto) الادخال
الناتج
الارتباط
عنوان SQL لـ Azure المشغِّل
الادخال
الناتج
الارتباط
Event Grid المشغِّل
الناتج
الارتباط
مراكز الأحداث المشغِّل
الناتج
IoT Hub المشغِّل
الناتج
HTTP المشغِّل الارتباط
تخزين قائمة الانتظار المشغِّل
الناتج
الارتباط
RabbitMQ المشغِّل
الناتج
SendGrid الناتج
ناقل الخدمة المشغِّل
الناتج
الارتباط
SignalR المشغِّل
الادخال
الناتج
تخزين الجداول الادخال
الناتج
⁧⁩عدّاد الوقت⁧⁩ المشغِّل الارتباط
Twilio الناتج الارتباط

تعتمد التعليمات البرمجية الملزمة ل Python على إصدار طراز Python.

الخدمة الأمثلة العينات
مساحة تخزين Blob المشغِّل
الادخال
الناتج
الارتباط
Azure Cosmos DB المشغِّل
الادخال
الناتج
الارتباط
Azure Data Explorer ‏(Kusto) الادخال
الناتج
عنوان SQL لـ Azure المشغِّل
الادخال
الناتج
الارتباط
Event Grid المشغِّل
الناتج
الارتباط
مراكز الأحداث المشغِّل
الناتج
IoT Hub المشغِّل
الناتج
HTTP المشغِّل الارتباط
تخزين قائمة الانتظار المشغِّل
الناتج
الارتباط
RabbitMQ المشغِّل
الناتج
SendGrid الناتج
ناقل الخدمة المشغِّل
الناتج
الارتباط
SignalR المشغِّل
الادخال
الناتج
تخزين الجداول الادخال
الناتج
⁧⁩عدّاد الوقت⁧⁩ المشغِّل الارتباط
Twilio الناتج الارتباط

روابط بيانات مخصصة

يمكنك إنشاء روابط إدخال وإخراج مخصصة. يجب أن تكون لارتباطات مؤلفة في .NET ولكن يمكن استهلاكها من أي لغة معتمدة. لمزيد من المعلومات حول إنشاء روابط مخصصة، راجع إنشاء روابط إدخال وإخراج مخصصة.