مشاركة عبر


Quickstart: تشغيل المهام المجدولة باستخدام Azure Functions

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

يستخدم azd مصدر المشروع لإنشاء تطبيق الوظائف والموارد ذات الصلة ونشر كودك على Azure. يتبع هذا النشر أفضل الممارسات الحالية لتوزيع وظائف Azure الآمنة والقابلة للتطوير.

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

Important

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

Prerequisites

تهيئة المشروع

استخدم الأمر azd init لإنشاء مشروع كود Azure Functions محلي من قالب.

  1. في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا azd init الأمر في مجلد فارغ:

    azd init --template functions-quickstart-dotnet-azd-timer -e scheduled-dotnet
    

    يسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الحالي. -e تعين العلامة اسما للبيئة الحالية. في azd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. يستخدم اسم البيئة أيضا في اسم مجموعة الموارد التي تنشئها في Azure.

  2. شغل هذا الأمر للانتقال إلى مجلد التطبيق:

    cd src
    
  3. قم بإنشاء ملف باسم local.settings.json في src المجلد الذي يحتوي على بيانات JSON هذه:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    هذا الملف مطلوب عند التشغيل محليا.

  1. في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا azd init الأمر في مجلد فارغ:

    azd init --template functions-quickstart-typescript-azd-timer -e scheduled-ts
    

    يسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الحالي. -e تعين العلامة اسما للبيئة الحالية. في azd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. يستخدم اسم البيئة أيضا في اسم مجموعة الموارد التي تنشئها في Azure.

  2. قم بإنشاء ملف باسم local.settings.json في src المجلد الذي يحتوي على بيانات JSON هذه:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    هذا الملف مطلوب عند التشغيل محليا.

  1. في الوحدة الطرفية المحلية أو موجه الأوامر، قم بتشغيل هذا azd init الأمر في مجلد فارغ:

    azd init --template functions-quickstart-python-azd-timer -e scheduled-py
    

    يسحب هذا الأمر ملفات المشروع من مستودع القالب ويهيئ المشروع في المجلد الحالي. -e تعين العلامة اسما للبيئة الحالية. في azd، تحتفظ البيئة بسياق توزيع فريد لتطبيقك، ويمكنك تحديد أكثر من واحد. يستخدم اسم البيئة أيضا في اسم مجموعة الموارد التي تنشئها في Azure.

  2. قم بإنشاء ملف باسم local.settings.json في src المجلد الذي يحتوي على بيانات JSON هذه:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    هذا الملف مطلوب عند التشغيل محليا.

إنشاء وتنشيط البيئة الظاهرية

في المجلد الجذر، قم بتشغيل هذه الأوامر لإنشاء وتنشيط بيئة ظاهرية باسم .venv:

python3 -m venv .venv
source .venv/bin/activate

إذا لم تقم بايثون بتثبيت حزمة venv على توزيعة لينكس الخاصة بك، شغل الأمر التالي:

sudo apt-get install python3-venv

تشغيل في بيئتك المحلية

  1. قم بتشغيل هذا الأمر من مجلد التطبيق في محطة طرفية أو موجه أوامر:

    func start
    
  1. قم بتشغيل هذا الأمر من مجلد التطبيق في محطة طرفية أو موجه أوامر:

    npm install
    npm start  
    
  1. عندما يبدأ مضيف الوظائف في مجلد مشروعك المحلي، فإنه يكتب معلومات عن وظيفة المؤقت التي تفعيل على مخرج الطرفية. يجب أن ترى وظيفة المؤقت الخاصة بك تنفذ بناء على الجدول المحدد في الكود الخاص بك.

    الجدول الافتراضي هو */30 * * * * *، الذي يعمل كل 30 ثانية.

  2. عند الانتهاء، اضغط على Ctrl+C في نافذة المحطة الطرفية لإيقاف func.exe عملية المضيف.

  1. قم بتشغيل deactivate لإيقاف تشغيل البيئة الظاهرية.

راجع الكود (اختياري)

يمكنك مراجعة الكود الذي يحدد وظيفة مشغل المؤقت:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Timer;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class timerFunction
    {
        private readonly ILogger _logger;

        public timerFunction(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<timerFunction>();
        }

        [Function("timerFunction")]
        public void Run(
            [TimerTrigger("%TIMER_SCHEDULE%", RunOnStartup = true)] TimerInfo myTimer,
            FunctionContext context
        )
        {
            _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            if (myTimer.IsPastDue)
            {
                _logger.LogWarning("The timer is running late!");
            }
        }
    }
}

يمكنك مراجعة مشروع القالب الكامل هنا.

import { app, InvocationContext, Timer } from '@azure/functions';

export async function timerFunction(myTimer: Timer, context: InvocationContext): Promise<void> {
    context.log(`TypeScript Timer trigger function executed at: ${new Date().toISOString()}`);

    if (myTimer.isPastDue) {
        context.warn("The timer is running late!");
    }
}

app.timer('timerFunction', {
    schedule: '%TIMER_SCHEDULE%',
    runOnStartup: true,
    handler: timerFunction
});

يمكنك مراجعة مشروع القالب الكامل هنا.

import datetime
import logging

import azure.functions as func

# Create the function app instance
app = func.FunctionApp()

@app.timer_trigger(schedule="%TIMER_SCHEDULE%", 
                   arg_name="mytimer", 
                   run_on_startup=True,
                   use_monitor=False) 
def timer_function(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.now(datetime.timezone.utc).isoformat()
    
    logging.info(f'Python timer trigger function executed at: {utc_timestamp}')
    
    if mytimer.past_due:
        logging.warning('The timer is running late!')

يمكنك مراجعة مشروع القالب الكامل هنا.

بعد التحقق من وظيفتك محليا، حان الوقت لنشرها على Azure.

نشر في Azure

تم إعداد هذا المشروع لاستخدام azd up الأمر لنشر كودك في تطبيق وظائف جديد ضمن خطة استهلاك مرنة في Azure.

Tip

يتضمن هذا المشروع مجموعة من ملفات Bicep التي azd تستخدم لإنشاء توزيع آمن إلى خطة استهلاك Flex التي تتبع أفضل الممارسات.

  1. قم بتشغيل هذا الأمر لإنشاء azd موارد Azure المطلوبة في Azure ونشر مشروع التعليمات البرمجية إلى تطبيق الوظائف الجديد:

    azd up
    

    يحتوي المجلد الجذر على azure.yaml ملف التعريف المطلوب من قبل azd.

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

  2. عند المطالبة، قم بتوفير معلمات النشر المطلوبة هذه:

    المعلمة‬ ‏‏الوصف
    اشتراك Azure الاشتراك الذي يتم فيه إنشاء مواردك.
    موقع Azure منطقة Azure التي يتم فيها إنشاء مجموعة الموارد التي تحتوي على موارد Azure الجديدة. يتم عرض المناطق التي تدعم حاليا خطة استهلاك Flex فقط.

    azd up يستخدم الأمر استجابتك لهذه المطالبات مع ملفات تكوين Bicep لإكمال مهام النشر هذه:

    • إنشاء وتكوين موارد Azure المطلوبة هذه (ما يعادل azd provision):

      • خطة استهلاك Flex وتطبيق الوظائف
      • Azure Storage (مطلوب) وApplication Insights (مستحسن)
      • نهج الوصول والأدوار لحسابك
      • اتصالات الخدمة إلى الخدمة باستخدام الهويات المدارة (بدلا من سلسلة الاتصال المخزنة)
      • شبكة ظاهرية لتشغيل كل من تطبيق الوظائف وموارد Azure الأخرى بشكل آمن
    • قم بحزم التعليمات البرمجية ونشرها في حاوية التوزيع (ما يعادل azd deploy). ثم يتم بدء تشغيل التطبيق وتشغيله في الحزمة المنشورة.

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

التحقق من النشر

بعد انتهاء النشر، تبدأ وظيفة مشغل المؤقت تلقائيا في Azure بناء على جدولها.

  1. في بوابة Azure، اذهب إلى تطبيق الوظائف الجديد الخاص بك.

  2. اختر سجل التدفق من القائمة اليسرى لمراقبة تنفيذ الوظائف في الوقت الحقيقي.

  3. يجب أن ترى سجلات تظهر وظيفة مشغل المؤقت الخاصة بك تعمل وفقا للجدول الزمني الخاص بها.

إعادة نشر التعليمات البرمجية الخاصة بك

شغل azd up الأمر عدة مرات تحتاج لتوفير موارد Azure ونشر تحديثات الكود إلى تطبيق الوظائف الخاص بك.

إشعار

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

يتم تخزين استجاباتك الأولية للمطالبات azd وأي متغيرات بيئة تم إنشاؤها بواسطة azd محليا في البيئة المسماة. azd env get-values استخدم الأمر لمراجعة كافة المتغيرات في بيئتك التي تم استخدامها عند إنشاء موارد Azure.

تنظيف الموارد

عندما تنتهي من العمل مع تطبيق الوظائف والموارد ذات الصلة، استخدم هذا الأمر لحذف تطبيق الوظائف وموارده ذات الصلة من Azure وتجنب تحمل أي تكاليف إضافية:

azd down --no-prompt

إشعار

يرشد --no-promptazd الخيار إلى حذف مجموعة الموارد الخاصة بك دون تأكيد منك.

لا يؤثر هذا الأمر على مشروع التعليمات البرمجية المحلية.