البرنامج التعليمي: نشر وظائف Azure كوحدات IoT Edge النمطية

ينطبق على:علامة اختيار IoT Edge 1.5 IoT Edge 1.5 علامة اختيار IoT Edge 1.4 IoT Edge 1.4

هام

IoT Edge 1.5 LTS وIoT Edge 1.4 LTS هي إصدارات مدعومة. IoT Edge 1.4 LTS هو نهاية العمر الافتراضي في 12 نوفمبر 2024. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.

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

  • استخدم Visual Studio Code لإنشاء Azure Function.
  • استخدم Visual Studio Code وDocker لإنشاء صورة Docker ونشرها في سجل حاوية.
  • انشر الوحدة النمطية من سجل الحاوية إلى جهاز IoT Edge الخاص بك.
  • عرض البيانات المفلترة.

رسم تخطيطي لبنية الدالة، يوضح كيفية تنظيم ونشر وحدة دالة.

تقوم Azure Function التي قمت بإنشائها في هذا البرنامج التعليمي بتصفية بيانات درجة الحرارة التي تم إنشاؤها بواسطة جهازك. ترسل الدالة فقط الرسائل في المراحل التمهيدية إلى Azure IoT Hub عندما تكون درجة الحرارة أعلى من حد معين.

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

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

قبل البدء في هذا البرنامج التعليمي، قم بالبرنامج التعليمي لإعداد بيئة التطوير الخاصة بك لتطوير حاويات Linux: تطوير وحدات Azure IoT Edge باستخدام Visual Studio Code. بعد إكمال هذا البرنامج التعليمي، يجب أن يكون لديك المتطلبات الأساسية التالية في مكانها:

لتطوير وحدة IoT Edge باستخدام Azure Functions، قم بتثبيت متطلبات أساسية إضافية على جهاز التطوير الخاص بك:

إنشاء مشروع دالة

يوفر Azure IoT Edge ل Visual Studio Code الذي قمت بتثبيته في المتطلبات الأساسية إمكانات الإدارة بالإضافة إلى بعض قوالب التعليمات البرمجية. في هذا القسم، تستخدم Visual Studio Code لإنشاء حل IoT Edge الذي يحتوي على خدمة Azure Function.

إنشاء مشروع جديد

اتبع هذه الخطوات لإنشاء قالب حل C# Function قابل للتخصيص.

  1. افتح Visual Studio Code على جهاز التطوير الخاص بك.

  2. افتح لوحة أوامر Visual Studio Code عن طريق تحديد View>Command Palette.

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

    • حدد مجلدا: اختر الموقع على جهاز التطوير الخاص بك ل Visual Studio Code لإنشاء ملفات الحل.
    • توفير اسم حل: إضافة اسم وصفي للحل الخاص بك، مثل FunctionSolution، أو قبول الافتراضي.|
    • حدد قالب وحدة نمطية: اختر Azure Functions - C#‎.
    • توفير اسم وحدة نمطية | قم بتسمية الوحدة النمطية CSharpFunction.
    • توفير مستودع صور Docker للوحدة النمطية. يتضمن مستودع الصور اسم سجل الحاوية واسم صورة الحاوية الخاصة بك. يتم ملء صورة الحاوية مسبقا من الخطوة الأخيرة. استبدل localhost:5000 بقيمة خادم تسجيل الدخول من سجل حاوية Azure. يمكنك استرداد خادم تسجيل الدخول من صفحة نظرة عامة على سجل الحاوية في مدخل Microsoft Azure. تبدو السلسلة النهائية مثل <اسم> السجل.azurecr.io/csharpfunction.

    لقطة شاشة توضح مكان إضافة اسم مستودع صور Docker في Visual Studio Code.

إضافة بيانات اعتماد التسجيل الخاصة بك

يخزن ملف البيئة للحل الخاص بك بيانات الاعتماد الخاصة بسجل الحاوية الخاص بك ويشاركها مع وقت تشغيل IoT Edge. يحتاج وقت التشغيل إلى بيانات الاعتماد هذه لسحب صورك الخاصة إلى جهاز IoT Edge.

يحاول ملحق IoT Edge في Visual Studio Code سحب بيانات اعتماد سجل الحاوية من Azure وملئها في ملف البيئة. تحقق لمعرفة ما إذا كانت بيانات الاعتماد موجودة بالفعل في الملف. إذا لم يكن كذلك، فأضفها الآن:

  1. في مستكشف Visual Studio Code، افتح .env الملف.
  2. حدث الحقول باستخدام قيم اسم المستخدم وكلمة المرور التي نسختها من سجل حاوية Azure. يمكنك العثور عليها مرة أخرى عن طريق الانتقال إلى سجل الحاوية في Azure والبحث في صفحة مفاتيح الإعدادات> Access.
  3. احفظ هذا الملف.

إشعار

يستخدم هذا البرنامج التعليمي بيانات اعتماد تسجيل دخول المسؤول لسجل حاوية Azure، والتي تعتبر ملائمة لسيناريوهات التطوير والاختبار. عندما تكون جاهزًا لسيناريوهات الإنتاج، نوصي بخيار مصادقة أقل امتيازًا مثل أساسيات الخدمة. لمزيد من المعلومات، راجع إدارة الوصول إلى سجل الحاوية.

تعيين البنية المستهدفة إلى AMD64

يتم دعم تشغيل وحدات Azure Functions النمطية على IoT Edge فقط على الحاويات المستندة إلى Linux AMD64. البنية المستهدفة الافتراضية ل Visual Studio Code هي Linux AMD64، لكننا سنضبطها بشكل صريح على Linux AMD64 هنا.

  1. افتح لوحة الأوامر وابحث عن Azure IoT Edge: تعيين النظام الأساسي الهدف الافتراضي لحل Edge.

  2. في لوحة الأوامر، حدد بنية هدف AMD64 من قائمة الخيارات.

تحديث الوحدة النمطية باستخدام التعليمات البرمجية المخصصة

دعونا نضيف بعض التعليمات البرمجية الإضافية حتى تعالج الوحدة النمطية CSharpFunction الرسائل على الحافة قبل إعادة توجيهها إلى IoT Hub.

  1. في مستكشف Visual Studio Code، افتح الوحدات النمطية>CSharpFunction>CSharpFunction.cs.

  2. استبدل محتويات ملف CSharpFunction.cs بالتعليمة البرمجية التالية. تحصل هذه التعليمة البرمجية على معلومات حول القياس عن بُعد لدرجة الحرارة المحيطة والجهاز، ويقوم فقط بإعادة توجيه الرسالة إلى IoT Hub إذا كانت درجة حرارة الجهاز أعلى من حد معين.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.EdgeHub;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    
    namespace Functions.Samples
    {
        public static class CSharpFunction
        {
            [FunctionName("CSharpFunction")]
            public static async Task FilterMessageAndSendMessage(
                [EdgeHubTrigger("input1")] Message messageReceived,
                [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output,
                ILogger logger)
            {
                const int temperatureThreshold = 20;
                byte[] messageBytes = messageReceived.GetBytes();
                var messageString = System.Text.Encoding.UTF8.GetString(messageBytes);
    
                if (!string.IsNullOrEmpty(messageString))
                {
                    logger.LogInformation("Info: Received one non-empty message");
                    // Get the body of the message and deserialize it.
                    var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString);
    
                    if (messageBody != null && messageBody.machine.temperature > temperatureThreshold)
                    {
                        // Send the message to the output as the temperature value is greater than the threshold.
                        using (var filteredMessage = new Message(messageBytes))
                        {
                             // Copy the properties of the original message into the new Message object.
                             foreach (KeyValuePair<string, string> prop in messageReceived.Properties)
                             {filteredMessage.Properties.Add(prop.Key, prop.Value);}
                             // Add a new property to the message to indicate it is an alert.
                             filteredMessage.Properties.Add("MessageType", "Alert");
                             // Send the message.
                             await output.AddAsync(filteredMessage);
                             logger.LogInformation("Info: Received and transferred a message with temperature above the threshold");
                        }
                    }
                }
            }
        }
        //Define the expected schema for the body of incoming messages.
        class MessageBody
        {
            public Machine machine {get; set;}
            public Ambient ambient {get; set;}
            public string timeCreated {get; set;}
        }
        class Machine
        {
            public double temperature {get; set;}
            public double pressure {get; set;}
        }
        class Ambient
        {
            public double temperature {get; set;}
            public int humidity {get; set;}
        }
    }
    
  3. حفظ الملف.

بناء ودفع حل IoT Edge الخاص بك

في القسم السابق، أنشأت حل IoT Edge وعدلت CSharpFunction لتصفية الرسائل التي تقل درجات حرارة الجهاز عنها عن الحد المقبول. الآن تحتاج إلى بناء الحل كصورة حاوية ودفعها إلى سجل الحاوية الخاص بك.

  1. افتح المحطة الطرفية المتكاملة Visual Studio Code عن طريق تحديد عرض>المحطة الطرفية.

  2. تسجيل الدخول إلى Docker من خلال إدخال الأمر التالي في المحطة الطرفية. تسجيل الدخول باستخدام اسم المستخدم وكلمة المرور وخادم تسجيل الدخول من سجل الحاويات Azure. يمكنك استرداد هذه القيم من قسم Access keys في السجل الخاص بك في منصة Azure.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    قد تتلقى تحذيرًا أمنيًا يوصي باستخدام --password-stdin. على الرغم من أن أفضل الممارسات موصى بها لسيناريوهات الإنتاج، إلا أنها خارج نطاق هذا البرنامج التعليمي. لمزيد من المعلومات، راجع مرجع تسجيل دخول docker.

  3. في مستكشف VS Code، انقر بزر الماوس الأيمن فوق ملف publish.template.json وحدد إنشاء ودفع حل IoT Edge.

    يبدأ أمر الإنشاء والدفع ثلاث عمليات. أولًا، يقوم بإنشاء مجلد جديد في الحل يُسمى config والذي يحتوي على بيان النشر الكامل، والذي تم إنشاؤه من المعلومات الموجودة في قالب النشر وملفات الحل الأخرى. ثانيًا، يقوم بتشغيل docker build لإنشاء صورة الحاوية بناءً على dockerfile المناسب للبنية المستهدفة. بعد ذلك، يتم تشغيل docker push لدفع مستودع الصور إلى سجل الحاوية الخاص بك.

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

عرض صورة الحاوية الخاصة بك

يعرض Visual Studio Code رسالة نجاح عندما يتم دفع صورة الحاوية الخاصة بك إلى سجل الحاوية. إذا كنت تريد تأكيد العملية الناجحة بنفسك، يمكنك عرض الصورة في السجل.

  1. في مدخل Microsoft Azure، استعرض وصولاً إلى سجل حاوية Azure.
  2. حدد مستودعات الخدمات>.
  3. يجب أن تشاهد مستودع csharpfunction في القائمة. حدد هذا المستودع لرؤية المزيد من التفاصيل.
  4. في قسم Tags، يجب أن تشاهد علامة 0.0.1-amd64. تشير هذه العلامة إلى إصدار الصورة التي قمت بإنشائها والنظام الأساسي لها. يتم تعيين هذه القيم في ملف module.json في مجلد CSharpFunction.

نشر الحل وتشغيله

يمكنك استخدام مدخل Microsoft Azure لنشر الوحدة النمطية للدالة على جهاز IoT Edge كما فعلت في التشغيل السريع. يمكنك أيضاً نشر الوحدات النمطية ومراقبتها من داخل Visual Studio Code. تستخدم الأقسام التالية Azure IoT Edge وIoT Hub ل Visual Studio Code الذي تم سرده في المتطلبات الأساسية. قم بتثبيت الملحقات الآن، إذا لم تكن قد قمت بالفعل.

  1. في مستكشف Visual Studio Code، ضمن قسم Azure IoT Hub، قم بتوسيع Devices لمشاهدة قائمة أجهزة IoT الخاصة بك.

  2. انقر بزر الماوس الأيمن فوق اسم جهاز IoT Edge الخاص بك، ثم حدد Create Deployment for Single Device.

  3. استعرض للوصول إلى مجلد الحل الذي يحتوي على CSharpFunction. افتح مجلد التكوين، وحدد ملف deployment.amd64.json، ثم اختر Select Edge Deployment Manifest.

  4. ضمن جهازك، قم بتوسيع Modules لمشاهدة قائمة بالوحدات النمطية التي تم نشرها وتشغيلها. انقر فوق الزر التحديث. من المفترض أن ترى CSharpFunction الجديدة تعمل جنباً إلى جنب مع الوحدة النمطية SimulatedTemperatureSensor و$ edgeAgent و $ edgeHub .

    قد يستغرق ظهور الوحدات النمطية الجديدة بضع دقائق. يجب أن يقوم جهاز IoT Edge الخاص بك باسترداد معلومات النشر الجديدة الخاصة به من IoT Hub، وبدء الحاويات الجديدة، ثم الإبلاغ عن الحالة مرة أخرى إلى IoT Hub.

    لقطة شاشة توضح كيفية عرض الوحدات النمطية المنشورة في Visual Studio Code.

عرض البيانات التي تم إنشاؤها

يمكنك مشاهدة جميع الرسائل التي تصل إلى مركز IoT الخاص بك من جميع أجهزتك عن طريق تشغيل Azure IoT Hub: بدء مراقبة نقطة نهاية الحدث المضمنة في لوحة الأوامر. لإيقاف مراقبة الرسائل، قم بتشغيل الأمر Azure IoT Hub: Stop Monitoring Built-in Event Endpoint في لوحة الأوامر.

يمكنك أيضاً تصفية العرض لمشاهدة جميع الرسائل التي تصل إلى مركز إنترنت الأشياء الخاص بك من جهاز معين. انقر بزر الماوس الأيمن فوق الجهاز في قسم Azure IoT Hub>Devices في مستكشف Visual Studio Code وحدد Start Monitoring Built-in Event Endpoint.

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

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

وإلا، يمكنك حذف التكوينات المحلية وموارد Azure التي قمت بإنشائها في هذه المقالة لتجنب الرسوم.

قم بحذف موارد Azure.

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

لحذف الموارد:

  1. سجل الدخول إلى مدخل Azure، وحدد "Resource groups".

  2. حدد اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge.

  3. راجع قائمة الموارد الموجودة في مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا كنت تريد حذف بعضها فقط، فيمكنك النقر فوق كل مورد لحذفها بشكل فردي.

الخطوات التالية

في هذا البرنامج التعليمي، قمت بإنشاء وحدة Azure Function النمطية مع رمز لتصفية البيانات الأولية التي تم إنشاؤها بواسطة جهاز IoT Edge الخاص بك.

تابع إلى البرامج التعليمية التالية لمعرفة الطرق الأخرى التي يمكن أن يساعدك بها Azure IoT Edge في تحويل البيانات إلى رؤى للأعمال على الحافة.