المشغّلات والارتباطات في Azure Functions
اكتب دالة تُشغَّل عبر HTTP، وأضف ارتباط إخراج للكتابة إلى Azure Queue Storage، وتعرّف على نموذج التوسع التلقائي في خطة Consumption Plan.
المشغّلات والارتباطات في Azure Functions درس مجاني في Cloud & IT Cert Prep على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cloud & IT Cert Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.
ما هي Azure Functions؟
Azure Functions هي خدمة حوسبة بلا خوادم تتيح لكم تشغيل وحدات صغيرة من التعليمات البرمجية (functions) استجابةً للأحداث من دون إدارة أي بنية تحتية. ولا تدفعون إلا مقابل مدة التنفيذ والذاكرة المستخدمة أثناء تشغيل الدالة — ولا توجد تكلفة عندما تكون الدالة غير نشطة. وتناسب Functions المهام المعتمدة على الأحداث، وواجهات API الخفيفة، والمهام المجدولة، ودمج الخدمات السحابية من دون خادم دائم.
المشغلات: ما الذي يبدأ تشغيل الدالة
يجب أن تحتوي كل Azure Function على trigger واحد فقط، يحدد الحدث الذي يؤدي إلى تنفيذها. وتشمل المشغلات الشائعة HTTP (طلب HTTP وارد)، وTimer (جدول CRON)، وBlob Storage (كائن ثنائي كبير جديد في حاوية)، وQueue Storage (رسالة جديدة في قائمة انتظار)، وEvent Hub (تدفق من الأحداث)، وService Bus (رسالة قائمة انتظار أو موضوع)، وCosmos DB (موجز التغييرات). ويستقبل المشغل بيانات الحدث ويمررها إلى التعليمات البرمجية الخاصة بالدالة.
// HTTP trigger function (JavaScript/Node.js)
module.exports = async function (context, req) {
const name = req.query.name || (req.body && req.body.name);
const message = name ? 'Hello, ' + name : 'Pass a name in the query or body';
context.res = {
status: 200,
body: { message }
};
};Function.json: إعدادات المشغلات وعمليات الربط
في اللغات غير المترجمة إلى تعليمات أصلية (JavaScript وPython)، يعلن ملف function.json الموجود في دليل كل دالة عن مشغلاتها وعمليات الربط الخاصة بها. ويربط هذا الملف مصادر الأحداث والمخرجات بالمعلمات المسماة في التعليمات البرمجية للدالة. أما في C# وJava، فيُعلن عن عمليات الربط باستخدام السمات/التعليقات التوضيحية مباشرةً في التعليمات البرمجية. ويقرأ وقت تشغيل Functions الإعدادات وينشئ الاتصالات بخدمات Azure تلقائيًا.
// function.json — HTTP trigger + Queue output binding
{
'bindings': [
{
'authLevel': 'function',
'type': 'httpTrigger',
'direction': 'in',
'name': 'req',
'methods': ['post']
},
{
'type': 'http',
'direction': 'out',
'name': 'res'
},
{
'type': 'queue',
'direction': 'out',
'name': 'outputQueue',
'queueName': 'processing-queue',
'connection': 'AzureWebJobsStorage'
}
]
}عمليات ربط الإخراج: الكتابة إلى الخدمات
تتيح Output bindings للدالة كتابة البيانات إلى خدمات Azure (Blob Storage وQueue Storage وCosmos DB وEvent Hub وغيرها) من دون إدارة حزم SDK أو سلاسل الاتصال. وما عليكم سوى تعيين قيمة إلى معلمة ربط الإخراج، وسيتولى وقت تشغيل Functions عملية الكتابة. ويقلل ذلك بدرجة كبيرة من التعليمات البرمجية المتكررة، ويفصل الدالة عن تفاصيل تنفيذ خدمة Azure المحددة.
// HTTP trigger with Queue output binding (Node.js)
module.exports = async function (context, req) {
const orderData = req.body;
// Write to queue via output binding -- no SDK needed!
context.bindings.outputQueue = JSON.stringify({
orderId: orderData.id,
timestamp: new Date().toISOString()
});
context.res = { status: 202, body: 'Order queued' };
};مشغل المؤقت باستخدام تعبيرات CRON
يشغّل Timer trigger دالة وفق جدول تحدده CRON expression. تستخدم Azure Functions صيغة CRON مؤلفة من 6 أجزاء: {seconds} {minutes} {hours} {day} {month} {day-of-week}. استخدموا 0 0 * * * * للتشغيل كل ساعة، أو 0 0 0 * * * عند منتصف الليل يوميًا، أو 0 0 9-17 * * 1-5 للتشغيل كل ساعة خلال ساعات العمل في أيام الأسبوع. وتفيد دوال المؤقت في مهام التنظيف وإنشاء التقارير وفحوصات السلامة.
// Timer trigger — runs every day at 02:00 UTC
// function.json binding:
// {
// 'type': 'timerTrigger',
// 'schedule': '0 0 2 * * *',
// 'name': 'myTimer'
// }
module.exports = async function (context, myTimer) {
const now = new Date().toISOString();
context.log('Daily cleanup started at', now);
// ... perform cleanup logic ...
context.log('Cleanup completed');
};خطة الاستهلاك: التوسّع بلا خوادم
في Consumption plan، توسّع Azure Functions نطاقها تلقائيًا من صفر إلى مئات المثيلات استنادًا إلى معدل أحداث المشغلات. ولا تدفعون إلا مقابل عدد عمليات التنفيذ وغيغابايت-ثواني الذاكرة المستهلكة — وأول مليون عملية تنفيذ شهريًا مجانية. ويمكن لمضيف Functions توسيع مشغل HTTP حتى 200 مثيل، كما يمكنه توسيع مشغل قائمة الانتظار إلى عدد رسائل القائمة التي تُعالج بالتزامن. ويضيف البدء البارد (أول تنفيذ بعد فترة خمول) زمن استجابة قصيرًا، ويمكن الحد منه باستخدام المثيلات المهيأة مسبقًا في Premium plan.
# View billing details for a function app
az functionapp show \
--name myFunctionApp \
--resource-group MyRG \
--query '{name:name, plan:serverFarmId, state:state}'
# Create a Function App on Consumption plan
az functionapp create \
--name myFunctionApp \
--resource-group MyRG \
--consumption-plan-location eastus \
--runtime node \
--runtime-version 18 \
--storage-account mystorageaccountالخطط المميزة والمخصصة
تلغي Premium plan حالات البدء البارد من خلال الحفاظ على مثيلات مهيأة مسبقًا، وتضيف التكامل مع VNet، وتسمح بمهلات تنفيذ أطول (تصل إلى 60 دقيقة). وتشغّل Dedicated (App Service) plan الدوال على خطة App Service نفسها المستخدمة لتطبيقات الويب، ما يفيد عند الحاجة إلى تكاليف متوقعة أو عند وجود موارد حوسبة قائمة في App Service. اختاروا Consumption لتحقيق اقتصاديات الحوسبة بلا خوادم فعلية؛ واختاروا Premium للدوال الحساسة للأداء أو المتصلة بـ VNet.
# Create a Function App on Premium plan (EP1)
az functionapp plan create \
--name MyPremiumPlan \
--resource-group MyRG \
--location eastus \
--sku EP1 \
--is-linux
az functionapp create \
--name myFunctionAppPremium \
--resource-group MyRG \
--plan MyPremiumPlan \
--runtime python \
--runtime-version 3.11 \
--storage-account mystorageaccountنشر Azure Functions
انشروا Azure Functions باستخدام Azure Functions Core Tools (func azure functionapp publish)، أو VS Code extension، أو ZIP deploy عبر Azure CLI، أو CI/CD pipeline في Azure Pipelines أو GitHub Actions. وفي بيئات الإنتاج، انشروا دائمًا من خلال مسار CI/CD بدلًا من جهاز المطور، لضمان وصول الإصدارات المختبرة والموسومة إلى الإنتاج. كما يدعم وقت تشغيل Functions Docker container deployment للتحكم الكامل في بيئة التشغيل.
# Local development: install Core Tools
npm install -g azure-functions-core-tools@4
# Start locally (triggers work against real Azure services)
func start
# Deploy to Azure
func azure functionapp publish myFunctionApp
# Or deploy via Azure CLI (ZIP deploy)
zip -r function.zip . --exclude '.git/*'
az functionapp deployment source config-zip \
--name myFunctionApp \
--resource-group MyRG \
--src function.zipإعدادات التطبيق ومراجع Key Vault
تخزن Function Apps إعداداتها في application settings — وتظهر هذه الإعدادات كمتغيرات بيئية في التعليمات البرمجية للدالة. خزّنوا سلاسل الاتصال ومفاتيح API والأسرار كإعدادات للتطبيق. وفي بيئات الإنتاج، استخدموا Key Vault references بحيث تُخزّن القيمة في Key Vault ولا يُشار إليها في إعداد التطبيق إلا باسمها، مما يحفظ الأسرار بعيدًا عن المدخل والملفات الناتجة عن النشر. فعّلوا هوية مُدارة على تطبيق الدالة للمصادقة مع Key Vault من دون بيانات اعتماد.
# Set application settings
az functionapp config appsettings set \
--name myFunctionApp \
--resource-group MyRG \
--settings \
STORAGE_CONNECTION='@Microsoft.KeyVault(SecretUri=https://mykv.vault.azure.net/secrets/storage-conn/)' \
COSMOS_DB_URI='https://mycosmosdb.documents.azure.com'
# In function code, read as normal env var
# const storageConn = process.env['STORAGE_CONNECTION'];مراقبة Functions باستخدام Application Insights
تتكامل Azure Functions تلقائيًا مع Application Insights عند توفير مفتاح أدوات أو سلسلة اتصال. ويُتتبّع كل تنفيذ للدالة باعتباره طلبًا، بما في ذلك المدة والنجاح أو الفشل والخصائص المخصصة. استخدموا Live Metrics في Application Insights لمراقبة عمليات التنفيذ في الوقت الفعلي أثناء الاختبار، واستخدموا جزء Failures لتشخيص الأخطاء مع تتبعات الاستثناءات الكاملة واستدعاءات التبعيات.
# Connect Application Insights to a Function App
az functionapp config appsettings set \
--name myFunctionApp \
--resource-group MyRG \
--settings \
APPLICATIONINSIGHTS_CONNECTION_STRING='InstrumentationKey=xxxxxxxx;...'
# Custom telemetry in function code (Node.js)
const appInsights = require('applicationinsights');
appInsights.setup().start();
const client = appInsights.defaultClient;
client.trackEvent({ name: 'OrderProcessed', properties: { orderId: '123' } });السلوك المتزامن والتوسّع
بالنسبة إلى الدوال التي تشغّلها قوائم الانتظار، يعالج مضيف Functions رسائل متعددة بالتوازي. اضبطوا batchSize في host.json للتحكم في عدد الرسائل التي تعالجها مثيلة واحدة بالتزامن. أما مشغلات HTTP، فيضيف التوسّع الأفقي مثيلات جديدة تلقائيًا. استخدموا maxConcurrentCalls (مع مشغلات Service Bus) أو maxPollingInterval (مع مشغلات قوائم الانتظار) لضبط معدل المعالجة وتجنب إرهاق الخدمات اللاحقة مثل قواعد البيانات أثناء أحداث التوسّع الأفقي.
// host.json — tune queue trigger concurrency
{
'version': '2.0',
'extensions': {
'queues': {
'batchSize': 16, // messages per instance
'newBatchThreshold': 8, // fetch more when < 8 remain
'maxPollingInterval': '00:00:02',
'visibilityTimeout': '00:05:00'
}
},
'functionTimeout': '00:10:00'
}تحقّق سريع
اختبر مدى استيعابكم لمفاهيم Microsoft Azure Fundamentals (AZ-900) الواردة في هذا الدرس.
مراجعة الدرس
تعلّمتم في هذا الدرس أن المشغّلات تحدد الحدث الذي يبدأ تشغيل الدالة (HTTP وTimer وQueue وBlob وغير ذلك)، وأن روابط الإخراج تتيح للدوال الكتابة إلى خدمات Azure من دون كتابة تعليمات برمجية باستخدام SDK، وأن خطة Consumption توفر تحجيمًا serverless فعليًا من الصفر مع الدفع مقابل كل عملية تنفيذ. في الدرس التالي، سنستكشف Durable Functions لإنشاء مهام سير عمل ذات حالة.
الأسئلة الشائعة
هل درس «المشغّلات والارتباطات في Azure Functions» مجاني؟
نعم — نص درس «المشغّلات والارتباطات في Azure Functions» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cloud & IT Cert Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Cloud & IT Cert Prep 4 دروس في المجموع.
ماذا ستتعلم في «المشغّلات والارتباطات في Azure Functions»؟
اكتب دالة تُشغَّل عبر HTTP، وأضف ارتباط إخراج للكتابة إلى Azure Queue Storage، وتعرّف على نموذج التوسع التلقائي في خطة Consumption Plan. تتمرن على Cloud & IT Cert Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cloud & IT Cert Prep؟
لا تُشترط خبرة سابقة. Cloud & IT Cert Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «المشغّلات والارتباطات في Azure Functions»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cloud & IT Cert Prep هذا؟
نعم. كل درس في Cloud & IT Cert Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المشغّلات والارتباطات في Azure Functions
- Durable Functions لسير العمل ذي الحالة
- Azure Logic Apps
- Event Grid والبنية المستندة إلى الأحداث