مشاركة عبر


Quickstart: الاستجابة لأحداث تخزين blob باستخدام Azure Functions

في هذا البدء السريع، تستخدم كود Visual Studio لبناء تطبيق يستجيب للأحداث في حاوية تخزين Blob. بعد اختبار الكود محليا باستخدام محاكي، تقوم بنشره على تطبيق وظائف بدون خادم جديد يعمل بخطة استهلاك مرنة في Azure Functions.

يستخدم المشروع إضافة Azure Developer CLI (azd) مع كود Visual Studio لتبسيط تهيئة والتحقق من كود مشروعك محليا، بالإضافة إلى نشر الكود على Azure. يتبع هذا النشر أفضل الممارسات الحالية لتوزيع وظائف Azure الآمنة والقابلة للتطوير.

تدعم هذه المقالة الإصدار 4 من نموذج البرمجة Node.js ل Azure Functions.

تدعم هذه المقالة الإصدار 2 من نموذج برمجة Python ل Azure Functions.

المتطلبات الأساسية

  • Node.js 18.x أو أعلى. يمكنك استخدام أمر node --version للتحقق من الإصدار الخاص بك.

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

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

  1. في Visual Studio Code، افتح مجلدا أو مساحة عمل حيث تريد إنشاء مشروعك.

  2. اضغط F1 لفتح لوحة الأوامر، ابحث عن الأمر Azure Developer CLI (azd): Initialize App (init)ونفذه، ثم اختر اختيار قالب.

    قد يكون هناك تأخير طفيف أثناء azd تهيئة المجلد أو مساحة العمل الحالية.

  1. عند المطالبة، اختر تحديد قالب، ثم ابحث عن .Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI

  2. عند الطلب في الطرفية، أدخل اسم بيئة فريد، مثل blobevents-dotnet.

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

  1. عند المطالبة، اختر تحديد قالب، ثم ابحث عن .Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI

  2. عند الطلب في الطرفية، أدخل اسم بيئة فريد، مثل blobevents-python.

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

  1. عند المطالبة، اختر تحديد قالب، ثم ابحث عن .Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI

  2. عند المطالبة، أدخل اسم بيئة فريدا، مثل blobevents-typescript.

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

  1. عند المطالبة، اختر تحديد قالب، ثم ابحث عن .Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI

  2. عند المطالبة، أدخل اسم بيئة فريدا، مثل blobevents-java.

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

  1. عند المطالبة، اختر تحديد قالب، ثم ابحث عن .Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI

  2. عند المطالبة، أدخل اسم بيئة فريدا، مثل blobevents-powershell.

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

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

أضف ملف local.settings.json

يحتاج Functions إلى ملف local.settings.json لتكوين المضيف عند التشغيل محليا.

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

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

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. قم بإنشاء ملف باسم local.settings.json في src المجلد الذي يحتوي على بيانات JSON هذه:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. قم بإنشاء ملف باسم local.settings.json في src المجلد الذي يحتوي على بيانات JSON هذه:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. قم بإنشاء ملف باسم local.settings.json في src المجلد الذي يحتوي على بيانات JSON هذه:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. قم بإنشاء ملف باسم local.settings.json في src المجلد الذي يحتوي على بيانات JSON هذه:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    

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

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

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

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

sudo apt-get install python3-venv

إعداد المحاكي المحلي للتخزين

استخدم محاكي Azurite لتشغيل مشروع التعليمات البرمجية محليا قبل إنشاء موارد Azure واستخدامها.

  1. إذا لم تكن قد قمت بذلك بالفعل، فقم بتثبيت Azurite.

  2. اضغط على F1. في لوحة الأوامر، ابحث عن الأمر Azurite: Start وقم بتشغيله لبدء تشغيل محاكي التخزين المحلي.

  3. في منطقة Azure، قم بتوسيع محاكيحسابات> التخزين المرفقة في مساحة العمل>المحلية، ثم انقر بزر الفأرة الأيمن (Ctrl-click على ماك) حاويات Blob Containers، ثم اختر إنشاء حاوية Blob Container...، ثم أنشئ هاتين الحاويتين في المحاكي المحلي:

    • unprocessed-pdf: الحاوية التي يراقبها المشغل لأحداث التخزين.
    • processed-pdf: الحاوية حيث ترسل الدالة كتل معالجة كمخرجات.
  4. قم بتوسيع حاويات البلوب، انقر بزر الفأرة الأيمن (Ctrl-click على ماك) unprocessed pdf، اختر رفع الملفات...، اضغط Enter لقبول المجلد الجذري، وارفع ملفات PDF من data مجلد المشروع.

عند التشغيل محليا، يمكنك استخدام REST لتفعيل الوظيفة عن طريق محاكاة تلقي الوظيفة رسالة من اشتراك حدث.

تشغيل الدالة محليًا

يتكامل Visual Studio Code مع أدوات Azure Functions Core للسماح لك بتشغيل هذا المشروع على كمبيوتر التطوير المحلي باستخدام محاكي Azurite. PDFProcessorSTORAGE يحدد متغير البيئة اتصال حساب التخزين، والذي يتم ضبطه أيضا في "UseDevelopmentStorage=true" ملف local.settings.json عند تشغيله محليا.

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

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    عندما يبدأ مضيف الوظائف، يكتب اسم الزناد ونوع الزناد على مخرج الطرفية. في قسم الوظائف، يحتوي مجلد جذر المشروع على ملف host.json.

  2. مع استمرار تشغيل Core Tools في Terminal، افتح الملف test.http في مشروعك واختر إرسال طلب لتفعيل الوظيفة ProcessBlobUpload عن طريق إرسال حدث blob اختبار إلى webhook الخاص بحدث blob.

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

  3. في منطقة مساحة العمل الخاصة بحاوية blob، قم بتوسيع ملف معالجة PDF وتحقق من أن الوظيفة عالجت ملف PDF ونسخته مع processed- بادئة.

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

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

يمكنك مراجعة الكود الذي يحدد تفعيل كتلة شبكة الأحداث في ملف المشروع ProcessBlobUpload.cs. توضح الدالة كيف:

  • الاستخدام BlobTrigger مع Source = BlobTriggerSource.EventGrid للمعالجة شبه الفورية
  • ربط إلى BlobClient للكتلة المصدر وللوجهة BlobContainerClient
  • أعالج محتوى blob وأنسخه إلى حاوية أخرى باستخدام التدفقات

يمكنك مراجعة الكود الذي يحدد تفعيل كتلة شبكة الأحداث في ملف المشروع function_app.py. توضح الدالة كيف:

  • الاستخدام @app.blob_trigger مع source="EventGrid" للمعالجة شبه الفورية
  • الوصول إلى محتوى blob باستخدام InputStream المعامل
  • نسخ الملفات المعالجة إلى الحاوية الوجهة باستخدام مجموعة تطوير البرمجيات الخاصة بذاكرة Azure Storage

يمكنك مراجعة الكود الذي يحدد تفعيل كتلة شبكة الأحداث في ملف المشروع processBlobUpload.ts. توضح الدالة كيف:

  • الاستخدام app.storageBlob() مع source: 'EventGrid' للمعالجة شبه الفورية
  • الوصول إلى محتوى blob باستخدام Node.js Azure Storage SDK
  • معالجة ونسخ الملفات إلى حاوية الوجهة بشكل غير متزامن

يمكنك مراجعة الكود الذي يحدد تفعيل شبكة الأحداث في ملف المشروع ProcessBlobUpload.java. توضح الدالة كيف:

  • الاستخدام @BlobTrigger مع source = "EventGrid" للمعالجة شبه الفورية
  • الوصول إلى محتوى blob باستخدام BlobInputStream المعامل
  • نسخ الملفات المعالجة إلى الحاوية الوجهة باستخدام Azure Storage SDK لجافا

يمكنك مراجعة الكود الذي يحدد تفعيل كتلة شبكة الأحداث في ملف مشروع ProcessBlobUpload/run.ps1 وملف function.jsonالمقابل. توضح الدالة كيف:

  • تكوين مشغل blob مع "source": "EventGrid" في function.json للمعالجة شبه اللحظية
  • Access blob content using PowerShell Azure Storage cmdlets
  • معالجة ونسخ الملفات إلى الحاوية الوجهة باستخدام وحدات Azure PowerShell

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

إنشاء موارد Azure ونشرها

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

  1. لفتح لوحة الأوامر في تعليمة Visual Studio البرمجية، اضغط على F1. ابحث عن الأمر Azure Developer CLI (azd): Sign In with Azure Developer CLIونفذه، ثم سجل الدخول باستخدام حساب Azure الخاص بك.

  2. في جذر المشروع، اضغط F1 لفتح لوحة الأوامر. ابحث عن الأمر ونفذه Azure Developer CLI (azd): Provision and Deploy (up) لإنشاء موارد Azure المطلوبة ونشر الكود الخاص بك.

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

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

    azd up يستخدم الأمر ردودك على هذه التعليمات باستخدام ملفات تكوين Bicep لإنشاء وتكوين هذه الموارد المطلوبة من Azure، وفقا لأحدث أفضل الممارسات:

    • خطة استهلاك Flex وتطبيق الوظائف
    • Azure Storage account with blob containers
    • رؤى التطبيقات (موصى بها)
    • نهج الوصول والأدوار لحسابك
    • اشتراك شبكة الأحداث لفعاليات البلوب
    • الاتصالات بين الخدمة باستخدام الهويات المدارة (بدلا من سلاسل الاتصال المخزنة)

    بعد إكمال الأمر بنجاح، يعمل تطبيقك في Azure مع اشتراك حدث مهيأ لتفعيل وظيفتك عند إضافة الكتل إلى الحاوية unprocessed-pdf .

  4. دون ملاحظة ل AZURE_STORAGE_ACCOUNT_NAME و AZURE_FUNCTION_APP_NAME في المخرج. هذه الأسماء فريدة لحساب التخزين وتطبيق الوظائف في Azure على التوالي.

تحقق من الدالة المنشورة

  1. في كود Visual Studio، اضغط F1. في لوحة الأوامر، ابحث عن الأمر Azure Storage: Upload Files...وقم بتشغيله . اقبل الدليل الجذري، وكما كان من قبل، قم برفع ملف PDF أو أكثر من data مجلد المشروع.

  2. عند طلب ذلك، اختر اسم حساب التخزين الجديد الخاص بك (من AZURE_STORAGE_ACCOUNT_NAME). اختر Blob Containers>unprocessed-pdf.

  3. اضغط على F1. في لوحة الأوامر، ابحث عن الأمر Azure Storage: Open in Explorerوقم بتشغيله . اختر نفس حساب > التخزين Blob Containers>processed-pdf، ثم افتح في نافذة جديدة.

  4. في المستكشف، تحقق من أن ملفات PDF التي رفعتها تمت معالجتها بواسطة وظيفتك. يتم كتابة المخرجات على الحاوية processed-pdf مع processed- بادئة.

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

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

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

ملاحظة

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

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

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

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

azd down --no-prompt

ملاحظة

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

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