وظائف المشغلات ومفاهيم ربط البيانات في 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 للدالات:
هذا المثال هو دالة تم تشغيلها من قبل 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.x من وقت تشغيل Azure Functions في 14 سبتمبر 2026. نوصي بشدة بترحيل تطبيقاتك إلى الإصدار 4.x للحصول على الدعم الكامل.
- بدءا من وقت تشغيل الإصدار 2.x، يجب تسجيل جميع الروابط باستثناء HTTP وTimer. راجع تسجيل ملحقات الربط.
- المشغلات غير مدعومة في خطة الاستهلاك. يتطلب مشغلات تستند إلى وقت التشغيل.
- مدعوم في 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 | الناتج | الارتباط |
الخدمة | الأمثلة | العينات |
---|---|---|
مساحة تخزين Blob | المشغِّل الادخال الناتج |
الارتباط |
Azure Cosmos DB | المشغِّل الادخال الناتج |
الارتباط |
Azure Data Explorer (Kusto) | الادخال الناتج |
الارتباط |
عنوان SQL لـ Azure | المشغِّل الادخال الناتج |
|
Event Grid | المشغِّل الناتج |
الارتباط |
مراكز الأحداث | المشغِّل الناتج |
|
IoT Hub | المشغِّل الناتج |
|
HTTP | المشغِّل | الارتباط |
تخزين قائمة الانتظار | المشغِّل الناتج |
الارتباط |
RabbitMQ | المشغِّل الناتج |
|
SendGrid | الناتج | |
ناقل الخدمة | المشغِّل الناتج |
الارتباط |
SignalR | المشغِّل الادخال الناتج |
|
تخزين الجداول | الادخال الناتج |
|
عدّاد الوقت | المشغِّل | الارتباط |
Twilio | الناتج | الارتباط |
الخدمة | الأمثلة | العينات |
---|---|---|
مساحة تخزين Blob | المشغِّل الادخال الناتج |
الارتباط |
Azure Cosmos DB | المشغِّل الادخال الناتج |
الارتباط |
Azure Data Explorer (Kusto) | الادخال الناتج |
|
عنوان SQL لـ Azure | المشغِّل الادخال الناتج |
الارتباط |
Event Grid | المشغِّل الناتج |
الارتباط |
مراكز الأحداث | المشغِّل الناتج |
|
IoT Hub | المشغِّل الناتج |
|
HTTP | المشغِّل | الارتباط |
تخزين قائمة الانتظار | المشغِّل الناتج |
الارتباط |
RabbitMQ | المشغِّل الناتج |
|
SendGrid | الناتج | |
ناقل الخدمة | المشغِّل الناتج |
الارتباط |
SignalR | المشغِّل الادخال الناتج |
|
تخزين الجداول | الادخال الناتج |
|
عدّاد الوقت | المشغِّل | الارتباط |
Twilio | الناتج | الارتباط |
الخدمة | الأمثلة | العينات |
---|---|---|
مساحة تخزين Blob | المشغِّل الادخال الناتج |
الارتباط |
Azure Cosmos DB | المشغِّل الادخال الناتج |
الارتباط |
عنوان 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 ولكن يمكن استهلاكها من أي لغة معتمدة. لمزيد من المعلومات حول إنشاء روابط مخصصة، راجع إنشاء روابط إدخال وإخراج مخصصة.