البرنامج التعليمي: تطوير وحدات IoT Edge النمطية باستخدام حاويات Linux باستخدام IoT Edge ل Linux على Windows
ينطبق على: IoT Edge 1.4
هام
إصدارات Azure IoT Edge 1.5 LTS وIoT Edge 1.4 مدعومة. يصل IoT Edge 1.4 LTS إلى نهاية الخدمة في 12 نوفمبر 2024. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.
يرشدك هذا البرنامج التعليمي من خلال تطوير التعليمات البرمجية الخاصة بك وتصحيحها ونشرها على جهاز Azure IoT Edge باستخدام IoT Edge ل Linux على Windows وVisual Studio 2022. ستتعلم سيناريو المطور الأكثر شيوعا لحلول IoT Edge من خلال نشر وحدة C# على جهاز Linux. ستقوم بنشر وتصحيح وحدة IoT Edge مخصصة تعمل في حاوية Linux على Windows. حتى إذا كنت تخطط لاستخدام لغة مختلفة أو نشر خدمة Azure، فلا يزال هذا البرنامج التعليمي مفيدا للتعرف على أدوات التطوير ومفاهيمه.
يتضمن هذا البرنامج التعليمي خطوات لأدوتي تطوير IoT Edge:
- واجهة سطر أوامر Azure IoT Edge Dev Tool CLI (CLI)، وهي الأداة المفضلة للتطوير
- ملحق Azure IoT Edge Tools ل Visual Studio، وهو في وضع الصيانة
استخدم زر المحدد في بداية هذا البرنامج التعليمي لتحديد إصدار الأداة.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إعداد جهاز التطوير الخاص بك.
- استخدم أدوات تطوير IoT Edge لإنشاء مشروع جديد.
- إنشاء المشروع كحاوية وتخزينه في تسجيل حاوية Azure.
- نشر التعليمات البرمجية إلى جهاز IoT Edge.
المتطلبات الأساسية
يفترض هذا البرنامج التعليمي أنك تستخدم جهازا يعمل بنظام Windows كجهة تطوير. على أجهزة الكمبيوتر Windows، يمكنك تطوير الوحدات النمطية لـ Windows أو Linux. يرشدك هذا البرنامج التعليمي خلال تطوير حاويات Linux، باستخدام IoT Edge لنظام التشغيل Linux على Windows لبناء الوحدات ونشرها.
قبل البدء:
تثبيت IoT Edge ل Linux على Windows.
اقرأ التشغيل السريع نشر أول وحدة IoT Edge على جهاز Windows.
قم بتنزيل .NET Core SDK.
تثبيت Visual Studio 2022 أو تعديله على جهاز التطوير الخاص بك. اختر تطوير Azure وتطوير سطح المكتب باستخدام خيارات حمل العمل C++.
بعد أن يكون تثبيت Visual Studio 2022 جاهزا، قم بتنزيل وتثبيت أدوات Azure IoT Edge من Visual Studio Marketplace.
يمكنك استخدام ملحق Azure IoT Edge Tools لإنشاء حل IoT Edge الخاص بك وبنائه. أداة التطوير المفضلة هي Azure IoT Edge Dev Tool CLI. يتضمن الملحق قوالب مشروع Azure IoT Edge التي تستخدمها لإنشاء مشروع Visual Studio. حاليا، تحتاج إلى تثبيت الملحق بغض النظر عن أداة التطوير التي تستخدمها.
تلميح
إذا كنت تستخدم Visual Studio 2019، فقم بتنزيل وتثبيت أدوات Azure IoT Edge ل Visual Studio 2019 من Visual Studio Marketplace.
- قم بتثبيت Azure CLI.
- إنشاء مركز IoT مجاني أو قياسي في Azure كمورد سحابي.
إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.
المفاهيم الرئيسية
يستعرض هذا البرنامج التعليمي تطوير وحدة IoT Edge. وحدة IoT Edge هي حاوية تحتوي على تعليمات برمجية قابلة للتنفيذ. يمكنك نشر وحدة نمطية واحدة أو أكثر إلى جهاز IoT Edge. تؤدي الوحدات النمطية مهامّ محددة مثل استيعاب البيانات من أجهزة الاستشعار أو تنظيف البيانات وتحليلها أو إرسال رسائل إلى مركز IoT. لمزيد من المعلومات، راجع فهم الوحدات النمطية في IoT Azure Edge.
عند تطوير وحدات IoT Edge النمطية، من المهم فهم الفرق بين جهاز التطوير وجهاز IoT Edge الهدف حيث سيتم نشر الوحدة في نهاية المطاف. يجب أن تتطابق الحاوية التي تقوم ببنائها للاحتفاظ برمز الوحدة النمطية مع نظام التشغيل (OS) الخاص بالجهاز الهدف.
على سبيل المثال، السيناريو الأكثر شيوعا هو شخص يقوم بتطوير وحدة نمطية على كمبيوتر يعمل بنظام التشغيل Windows ويعتزم استهداف جهاز Linux يقوم بتشغيل IoT Edge. في هذه الحالة، نظام تشغيل الحاوية هو Linux.
خلال هذا البرنامج التعليمي، نضع في اعتبارنا الفرق بين نظام التشغيل جهاز التطوير ونظام التشغيل الحاوية. في هذا البرنامج التعليمي، ستستخدم مضيف Windows للتطوير وIoT Edge لنظام Linux على جهاز Windows الظاهري (VM) لإنشاء الوحدات النمطية ونشرها.
يستهدف هذا البرنامج التعليمي الأجهزة التي تقوم بتشغيل IoT Edge مع حاويات Linux. يمكنك استخدام نظام التشغيل المفضل لديك طالما أن جهاز التطوير الخاص بك يعمل بحاويات Linux. نوصي باستخدام Visual Studio للتطوير باستخدام حاويات Linux، لذلك هذا ما يستخدمه هذا البرنامج التعليمي. يمكنك أيضا استخدام Visual Studio Code، على الرغم من وجود اختلافات في الدعم بين الأدوتين. لمزيد من المعلومات، راجع تطوير وحدات Azure IoT Edge النمطية باستخدام Visual Studio Code.
إعداد Docker CLI ومحرك Docker للاتصال عن بعد
يتم حزم وحدات IoT Edge كحاويات، لذلك تحتاج إلى محرك حاوية على جهاز التطوير الخاص بك لبناء وإدارة هذه الوحدات.
يحتوي IoT Edge ل Linux على Windows VM بالفعل على مثيل لمحرك Docker. يوضح لك هذا البرنامج التعليمي كيفية الاتصال عن بعد من جهاز مطور Windows إلى IoT Edge ل Linux على مثيل Windows VM Docker. باستخدام هذا الاتصال البعيد، يمكنك إزالة التبعية على Docker Desktop لنظام التشغيل Windows.
تكوين Docker CLI
الخطوة الأولى هي تكوين Docker CLI على جهاز تطوير Windows لتكون قادرة على الاتصال بمحرك Docker البعيد:
قم بتنزيل الإصدار المحوسب
docker.exe
مسبقا من Docker CLI من Chocolatey. يمكنك أيضا تنزيل مشروع cli الرسمي من GitHub وتحويله برمجيا باتباع تعليمات المستودع.استخراج
docker.exe
إلى دليل في جهاز التطوير الخاص بك؛ على سبيل المثال،C:\Docker\bin
.افتح حول إعدادات النظام المتقدمة لمعلومات>النظام على الكمبيوتر>الشخصي.
حدد Advanced>Environment variables. ضمن User variables، حدد Path.
قم بتحرير متغير المسار وأضف موقع
docker.exe
.افتح جلسة غير مقيدة لـ PowerShell.
تحقق من إمكانية الوصول إلى Docker CLI باستخدام هذا الأمر:
docker --version
إذا قمت بتكوين كل شيء بنجاح، يجب أن يظهر إخراج الأمر إصدار Docker. يجب أن يبدو شيئا مثل
Docker version 20.10.12, build e91ed57
.
تكوين محرك Docker
الخطوة الثانية هي تكوين IoT Edge ل Linux على محرك Windows VM Docker لقبول الاتصالات الخارجية، وإضافة قواعد جدار الحماية المناسبة.
تحذير
قد يؤدي تعريض محرك Docker للاتصالات الخارجية إلى زيادة مخاطر الأمان. يجب استخدام هذا التكوين فقط لأغراض التطوير. تأكد من إعادة التكوين إلى الإعدادات الافتراضية بعد انتهاء التطوير.
افتح جلسة عمل PowerShell غير مقيدة وقم بتشغيل الأوامر التالية:
# Configure the IoT Edge for Linux on Windows VM Docker engine to accept external connections, and add the appropriate firewall rules. Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT" # Create a copy of the IoT Edge for Linux on Windows VM _docker.service_ in the system folder. Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service" # Replace the service execution line to listen for external connections. Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service" # Reload the IoT Edge for Linux on Windows VM services configurations. Invoke-EflowVmCommand "sudo systemctl daemon-reload" # Reload the Docker engine service. Invoke-EflowVmCommand "sudo systemctl restart docker.service" # Check that the Docker engine is listening to external connections. Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
فيما يلي مثال على الإخراج:
PS C:\> # Configure the IoT Edge for Linux on Windows virtual machine Docker engine to accept external connections, and add the appropriate firewall rules. PS C:\> Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT" PS C:\> PS C:\> # Create a copy of the IoT Edge for Linux on Windows VM docker.service in the system folder. PS C:\> Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service" PS C:\> PS C:\> # Replace the service execution line to listen for external connections. PS C:\> Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service" PS C:\> PS C:\> # Reload the IoT Edge for Linux on Windows VM services configurations. PS C:\> Invoke-EflowVmCommand "sudo systemctl daemon-reload" PS C:\> PS C:\> # Reload the Docker engine service. PS C:\> Invoke-EflowVmCommand "sudo systemctl restart docker.service" PS C:\> PS C:\> # Check that the Docker engine is listening to external connections. PS C:\> Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd" tcp6 0 0 :::2375 :::* LISTEN 2790/dockerd
اختبار الاتصال
خطوة الإعداد النهائية هي اختبار اتصال Docker ب IoT Edge ل Linux على محرك Windows VM Docker:
احصل على عنوان IP ل IoT Edge ل Linux على Windows VM:
Get-EflowVmAddr
تلميح
إذا تم نشر IoT Edge لنظام التشغيل Linux على Windows VM دون عنوان IP ثابت، فقد يتغير عنوان IP عبر إعادة تشغيل نظام التشغيل المضيف ل Windows أو تغييرات الشبكة. تأكد من استخدام عنوان IP الصحيح ل IoT Edge ل Linux على Windows VM في كل مرة تريد فيها إنشاء اتصال عن بعد بمحرك Docker.
فيما يلي مثال على الإخراج:
PS C:\> Get-EflowVmAddr [03/15/2022 15:22:30] Querying IP and MAC addresses from virtual machine (DESKTOP-J1842A1-EFLOW) - Virtual machine MAC: 00:15:5d:6f:da:78 - Virtual machine IP : 172.31.24.105 retrieved directly from virtual machine 00:15:5d:6f:da:78 172.31.24.105
اتصل ب IoT Edge ل Linux على محرك Windows VM Docker وقم بتشغيل حاوية العينة
hello-world
. استبدل<EFLOW-VM-IP>
بعنوان IoT Edge for Linux على Windows VM IP الذي حصلت عليه في الخطوة السابقة.docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-world
عند انتهاء تنزيل الحاوية، يتم تشغيل الحاوية وإنتاج هذا الإخراج:
PS C:\> docker -H tcp://172.31.24.105:2375 run --rm hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you're currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
إنشاء مشروع Azure IoT Edge
ينشئ قالب مشروع IoT Edge في Visual Studio حلا يمكنك نشره على أجهزة IoT Edge. استخدم الخطوات التالية لإنشاء حل Azure IoT Edge ثم إنشاء الوحدة النمطية الأولى في هذا الحل. يمكن أن يحتوي كل حل IoT Edge على أكثر من وحدة نمطية واحدة.
هام
بنية مشروع IoT Edge التي ينشئها Visual Studio ليست هي نفسها الموجودة في Visual Studio Code.
حاليا، لا يدعم Azure IoT Edge Dev Tool CLI إنشاء نوع مشروع Visual Studio. تحتاج إلى استخدام ملحق Azure IoT Edge Tools لإنشاء مشروع Visual Studio.
في Visual Studio، قم بإنشاء مشروع جديد عن طريق تحديد إنشاء مشروع جديد في صفحة البدء أو عن طريق تحديد الزر مشروع جديد على شريط الأدوات.
في صفحة إنشاء مشروع جديد، ابحث عن Azure IoT Edge. حدد المشروع الذي يطابق النظام الأساسي (وحدة Linux IoT Edge) والهندسة المعمارية لجهاز IoT Edge، ثم حدد التالي.
في صفحة تكوين مشروعك الجديد، أدخل اسما لمشروعك وحدد الموقع، ثم حدد إنشاء.
في مربع الحوار إضافة وحدة نمطية ، حدد نوع الوحدة النمطية التي تريد تطويرها. يمكنك أيضا تحديد وحدة نمطية موجودة لإضافة وحدة IoT Edge موجودة إلى التوزيع الخاص بك.
في اسم الوحدة النمطية، حدد اسم الوحدة النمطية.
في عنوان URL للمستودع، قم بتوفير اسم مستودع صور الوحدة النمطية. يقوم Visual Studio تلقائيا بملء اسم الوحدة النمطية باسم localhost:5000/<your module name>. استبدله بمعلومات التسجيل الخاصة بك.
استخدم localhost إذا كنت تستخدم سجل Docker محليا للاختبار. إذا كنت تستخدم حاوية تسجيل Azure، ثم استخدم ملقم تسجيل الدخول من إعدادات التسجيل الخاص بك. يبدو خادم تسجيل الدخول مثل <اسم> السجل.azurecr.io. استبدل فقط جزء localhost:5000 من السلسلة، بحيث تبدو النتيجة النهائية مثل <اسم> السجل.azurecr.io/< اسم> الوحدة النمطية.
حدد إضافة لإضافة الوحدة النمطية إلى المشروع.
إشعار
إذا كان لديك مشروع IoT Edge موجود، يمكنك تغيير عنوان URL للمستودع عن طريق فتح
module.json
الملف. يقع عنوان URL للمستودع فيrepository
خاصية ملف JSON.
الآن، لديك مشروع IoT Edge والوحدة النمطية IoT Edge في حل Visual Studio الخاص بك.
بنية المشروع
يحتوي الحل الخاص بك على مجلدين على مستوى المشروع: مجلد مشروع رئيسي ومجلد وحدة نمطية. على سبيل المثال، قد يكون لديك مجلد مشروع رئيسي يسمى AzureIotEdgeApp1
ومجلد وحدة نمطية يسمى IotEdgeModule1
.
يحتوي مجلد المشروع الرئيسي على بيان التوزيع الخاص بك. بيان النشر هو مستند JSON يصف الوحدات النمطية التي سيتم تكوينها على جهاز IoT Edge المستهدف.
يحتوي مجلد الوحدة النمطية على ملف للتعليمات البرمجية للوحدة النمطية الخاصة بك. يطلق عليه إما Program.cs
أو main.c
، اعتمادا على اللغة التي اخترتها. يحتوي هذا المجلد أيضا على ملف يسمى module.json
يصف بيانات التعريف للوحدة النمطية الخاصة بك. توفر ملفات Docker المختلفة المعلومات اللازمة لإنشاء الوحدة النمطية الخاصة بك كحاوية Windows أو Linux.
بيان التوزيع لمشروعك
يتم تسمية بيان النشر الذي تقوم بتحريره باسم deployment.debug.template.json
. هذا الملف هو قالب من بيان توزيع IoT Edge الذي يحدد جميع الوحدات النمطية التي تعمل على جهاز. يحدد الملف أيضا كيفية اتصال الوحدات النمطية مع بعضها البعض. لمزيد من المعلومات حول بيانات النشر، راجع التعرف على كيفية نشر الوحدات النمطية وإنشاء المسارات.
يتضمن قالب التوزيع ما يلي:
- وحدتي وقت التشغيل،
edgeAgent
وedgeHub
. - الوحدة النمطية المخصصة التي قمت بإنشائها في مشروع Visual Studio هذا.
- وحدة نمطية تسمى
SimulatedTemperatureSensor
. تنشئ هذه الوحدة النمطية الافتراضية بيانات محاكاة يمكنك استخدامها لاختبار الوحدات النمطية (أو الحذف إذا لم يكن ذلك ضروريا). لمعرفة كيفية عمل مستشعر درجة الحرارة المحاكية، اعرض التعليمة البرمجية المصدر SimulatedTemperatureSensor.csproj.
تعيين إصدار وقت تشغيل IoT Edge
حاليا، أحدث إصدار وقت تشغيل مستقر هو 1.4. تحديث إصدار وقت تشغيل IoT Edge إلى أحدث إصدار مستقر أو الإصدار الذي تريد استهدافه لأجهزتك:
في مستكشف الحلول، انقر بزر الماوس الأيمن فوق اسم مشروعك الرئيسي وحدد تعيين إصدار وقت تشغيل IoT Edge.
استخدم القائمة المنسدلة لاختيار إصدار وقت التشغيل الذي تقوم أجهزة IoT Edge بتشغيله. ثم حدد موافق لحفظ التغييرات. إذا لم تقم بإجراء أي تغييرات، فحدد إلغاء الأمر.
حاليا، لا يتضمن الملحق تحديدا لأحدث إصدارات وقت التشغيل. إذا كنت تريد تعيين إصدار وقت التشغيل الأعلى من 1.2، فافتح
deployment.debug.template.json
ملف بيان التوزيع. تغيير إصدار وقت التشغيل لصورedgeAgent
وحدة وقت تشغيل النظام وedgeHub
. على سبيل المثال، إذا كنت تريد استخدام الإصدار 1.4 من وقت تشغيل IoT Edge، فقم بتغيير الأسطر التالية في ملف بيان التوزيع:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.4" //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.4", //...
إذا قمت بتغيير الإصدار، فقم بإعادة إنشاء بيان النشر بالنقر بزر الماوس الأيمن فوق اسم مشروعك وتحديد إنشاء نشر ل IoT Edge. تنشئ هذه الخطوة بيان توزيع استنادا إلى قالب التوزيع الخاص بك. يظهر البيان في
config
مجلد مشروع Visual Studio الخاص بك.
deployment.debug.template.json
افتح ملف بيان التوزيع.تغيير إصدار وقت التشغيل لصور
edgeAgent
وحدة وقت تشغيل النظام وedgeHub
. على سبيل المثال، إذا كنت تريد استخدام الإصدار 1.4 من وقت تشغيل IoT Edge، فقم بتغيير الأسطر التالية في ملف بيان التوزيع:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.4", //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.4", //...
إعداد مثيل محرك Docker البعيد Visual Studio 2022
قم بتكوين ملحق Azure IoT Edge Tools لاستخدام محرك Docker البعيد الذي يعمل داخل IoT Edge ل Linux على Windows VM:
حدد Tools>Azure IoT Edge tools>IoT Edge tools settings.
استبدل قيمة المضيف المحلي DOCKER_HOST بعنوان IP ل IoT Edge ل Linux على Windows VM. إذا كنت لا تتذكر عنوان IP، فاستخدم IoT Edge ل Linux على Windows PowerShell cmdlet
Get-EflowVmAddr
للحصول عليه. على سبيل المثال، إذا كان عنوان IP ل IoT Edge ل Linux على Windows VM هو 172.20.1.100، فيجب tcp://172.20.1.100:2375 القيمة الجديدة.حدد موافق.
تطوير الوحدة النمطية
عند إضافة وحدة نمطية جديدة، تأتي مع التعليمات البرمجية الافتراضية الجاهزة للبناء والنشر على جهاز بحيث يمكنك بدء الاختبار دون لمس أي تعليمة برمجية. توجد التعليمات البرمجية للوحدة النمطية داخل مجلد الوحدة النمطية في ملف يسمى Program.cs
(ل C#) أو main.c
(ل C).
في الحل الافتراضي، يتم توجيه البيانات المحاكاة من الوحدة النمطية SimulatedTemperatureSensor
إلى الوحدة النمطية الخاصة بك. تأخذ الوحدة الإدخال ثم ترسله إلى Azure IoT Hub.
عندما تكون مستعدا لتخصيص قالب الوحدة النمطية باستخدام التعليمات البرمجية الخاصة بك، استخدم Azure IoT Hub SDKs لإنشاء وحدات نمطية أخرى تلبي الاحتياجات الرئيسية لحلول IoT. يمكن أن تتضمن هذه الاحتياجات الأمان وإدارة الجهاز والموثوقية.
إنشاء وحدة نمطية واحدة ودفعها
عادة ما تريد اختبار وتصحيح كل وحدة نمطية قبل تشغيلها داخل حل كامل مع وحدات متعددة. نظرا لأن الحل سيبني أو يصحح باستخدام محرك Docker الذي يعمل داخل IoT Edge ل Linux على Windows VM، فإن الخطوة الأولى هي إنشاء الوحدة النمطية ونشرها لتمكين تصحيح الأخطاء عن بعد:
في مستكشف الحلول، حدد مجلد مشروع الوحدة النمطية (على سبيل المثال،
myIotEdgeModule
).تعيين الوحدة النمطية المخصصة كمشروع بدء التشغيل. في القائمة، حدد Project>Set as StartUp Project.
لتصحيح أخطاء وحدة C# Linux، تحتاج إلى تحديث
Dockerfile.amd64.debug
الملف لتمكين خدمة SSH.Dockerfile.amd64.debug
قم بتحديث الملف لاستخدام القالب التالي: Dockerfile لوحدة Azure IoT Edge AMD64 C# مع دعم تتبع الأخطاء عن بعد.إشعار
عند تحديد Debug، يستخدم
Dockerfile.(amd64|windows-amd64).debug
Visual Studio لإنشاء صور Docker. يتضمن هذا الملف مصحح أخطاء سطر الأوامر .NET Core VSDBG في صورة الحاوية أثناء إنشائه. بالنسبة إلى وحدات IoT Edge الجاهزة للإنتاج، نوصي باستخدام تكوين الإصدار ، الذي يستخدمDockerfile.(amd64|windows-amd64)
دون VSDBG.تأكد من أن في السطر الأخير من القالب،
ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"]
، يتطابق اسم DLL مع اسم مشروع وحدة IoT Edge.لإنشاء اتصال SSH مع وحدة Linux، تحتاج إلى إنشاء مفتاح RSA. افتح جلسة عمل PowerShell غير مقيدة وقم بتشغيل الأوامر التالية لإنشاء مفتاح RSA جديد. احفظ مفتاح RSA ضمن نفس مجلد وحدة IoT Edge، وتأكد من أن اسم المفتاح هو
id_rsa
.ssh-keygen -t RSA -b 4096 -m PEM
إذا كنت تستخدم سجلا خاصا مثل Azure Container Registry، فاستخدم أمر Docker التالي لتسجيل الدخول إليه. يمكنك الحصول على اسم المستخدم وكلمة المرور من صفحة مفاتيح الوصول في السجل الخاص بك في مدخل Microsoft Azure. إذا كنت تستخدم سجلا محليا، يمكنك تشغيل سجل محلي.
docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
في مستكشف الحلول، انقر بزر الماوس الأيمن فوق مجلد المشروع وحدد Build and Push IoT Edge Modules. ينشئ هذا الأمر صورة Docker لكل وحدة نمطية ويدفعها.
إذا كنت تستخدم سجلا خاصا مثل Azure Container Registry، فستحتاج إلى إضافة معلومات تسجيل الدخول إلى إعدادات وقت التشغيل الموجودة في الملف
deployment.template.json
. استبدل العناصر النائبة باسم المستخدم الفعلي لمسؤول سجل الحاويات وكلمة المرور واسم السجل."settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "registry1": { "username": "<username>", "password": "<password>", "address": "<registry name>.azurecr.io" } } }
إشعار
تستخدم هذه المقالة بيانات اعتماد تسجيل دخول المسؤول ل Azure Container Registry، والتي تعد ملائمة لسيناريوهات التطوير والاختبار. عندما تكون جاهزًا لسيناريوهات الإنتاج، نوصي بخيار مصادقة أقل امتيازًا مثل أساسيات الخدمة. لمزيد من المعلومات، راجع إدارة الوصول إلى سجل الحاوية.
من الضروري كشف المنفذ 22 للوصول إلى خدمة SSH للوحدة النمطية. يستخدم هذا البرنامج التعليمي 10022 كمنفذ مضيف، ولكن يمكنك تحديد منفذ مختلف. سيتم استخدام المنفذ الذي تحدده كمنفذ SSH للاتصال بالوحدة النمطية Linux C#. تحتاج إلى إضافة معلومات منفذ SSH إلى
createOptions
لإعداد الوحدة النمطية Linux هذا في الملفdeployment.debug.template.json
:"createOptions": { "HostConfig": { "Privileged": true, "PortBindings": { "22/tcp": [ { "HostPort": "10022" } ] } } }
في مستكشف الحلول، انقر بزر الماوس الأيمن فوق مجلد المشروع وحدد إنشاء نشر ل IoT Edge لإنشاء JSON لتوزيع IoT Edge الجديد.
حدد عرض>مستكشف السحابة. تأكد من تسجيل الدخول إلى Visual Studio 2019.
في Cloud Explorer، قم بتوسيع اشتراكك، ثم ابحث عن Azure IoT Hub وجهاز Azure IoT Edge الذي تريد نشره.
انقر بزر الماوس الأيمن فوق جهاز IoT Edge وحدد Create deployment. انتقل إلى بيان نشر تتبع الأخطاء الذي تم تكوينه للنظام الأساسي الخاص بك. إنه في
config
المجلد في حل Visual Studio الخاص بك، مثلdeployment.amd64.json
.
إنشاء صورة Docker للوحدة النمطية
بعد تطوير الوحدة النمطية الخاصة بك، يمكنك إنشاء صورة الوحدة النمطية لتخزينها في سجل حاوية للنشر على جهاز IoT Edge.
استخدم Dockerfile الخاص بالوحدة لإنشاء صورة Docker للوحدة النمطية:
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
على سبيل المثال، افترض أن أمر shell الخاص بك موجود في دليل المشروع واسم الوحدة النمطية الخاصة بك هو IotEdgeModule1
. لإنشاء صورة للسجل المحلي أو سجل حاوية Azure، استخدم الأوامر التالية:
# Build the image for the local registry
docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"
# Or build the image for an Azure container registry
docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"
دفع صورة Docker للوحدة النمطية
ادفع صورة الوحدة النمطية إلى السجل المحلي أو سجل الحاوية:
docker push <ImageName>
على سبيل المثال:
# Push the Docker image to the local registry
docker push localhost:5000/iotedgemodule1:0.0.1-amd64
# Or push the Docker image to an Azure container registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64
نشر الوحدة النمطية على جهاز IoT Edge
في Visual Studio، افتح deployment.debug.template.json
ملف بيان التوزيع في المشروع الرئيسي.
قبل النشر، تحتاج إلى تحديث بيانات اعتماد Azure Container Registry وصور الوحدة والقيم المناسبة createOptions
. لمزيد من المعلومات حول createOption
القيم، راجع كيفية تكوين خيارات إنشاء الحاوية لوحدات IoT Edge النمطية.
إذا كنت تستخدم سجل حاوية Azure لتخزين صورة الوحدة النمطية، فأضف بيانات الاعتماد الخاصة بك إلى
deployment.debug.template.json
فيedgeAgent
الإعدادات. على سبيل المثال:"modulesContent": { "$edgeAgent": { "properties.desired": { "schemaVersion": "1.1", "runtime": { "type": "docker", "settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "myacr": { "username": "myacr", "password": "<your_acr_password>", "address": "myacr.azurecr.io" } } } }, //...
استبدل قيمة الخاصية
image
باسم صورة الوحدة النمطية التي دفعتها إلى السجل. على سبيل المثال، إذا قمت بدفع صورة ذاتmyacr.azurecr.io/iotedgemodule1:0.0.1-amd64
علامة للوحدة النمطيةIotEdgeModule1
المخصصة ، فاستبدل قيمة خاصية الصورة بقيمة العلامة.أضف القيمة أو استبدلها
createOptions
بمحتوى سلسلة لكل نظام ووحدة نمطية مخصصة في قالب النشر.على سبيل المثال،
image
ستكون إعداداتIotEdgeModule1
وcreateOptions
مشابهة للمثال التالي:"IotEdgeModule1": { "version": "1.0.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }
استخدم الأمر IoT Edge Azure CLI set-modules لنشر الوحدات النمطية إلى مركز Azure IoT. على سبيل المثال، لنشر الوحدات النمطية المعرفة في
deployment.debug.amd64.json
الملف إلى مركزmy-iot-hub
IoT لجهازmy-device
IoT Edge، استخدم الأمر التالي:az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
تلميح
يمكنك العثور على سلسلة الاتصال IoT Hub في مدخل Microsoft Azure ضمن إعدادات أمان Azure IoT Hub>نهج>الوصول المشترك.
في Cloud Explorer، انقر بزر الماوس الأيمن فوق جهاز الحافة وقم بالتحديث للتأكد من تشغيل الوحدة النمطية الجديدة، جنبا إلى جنب مع الوحدتي
$edgeAgent
النمطية و$edgeHub
.
تصحيح أخطاء الحل
في جلسة عمل PowerShell غير مقيدة، قم بتشغيل الأوامر التالية:
moduleId
احصل على القيمة، استنادا إلى اسم الوحدة النمطية Linux C#. استبدل<iot-edge-module-name>
العنصر النائب باسم الوحدة النمطية الخاصة بك.$moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
تحقق من صحة ذلك
$moduleId
. إذا كان المتغير فارغا، فتأكد من استخدام اسم الوحدة النمطية الصحيح.بدء تشغيل خدمة SSH داخل حاوية Linux:
Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
افتح منفذ SSH للوحدة النمطية على IoT Edge ل Linux على Windows VM. (يستخدم هذا البرنامج التعليمي المنفذ 10022.)
Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
تحذير
لأسباب أمنية، في كل مرة يتم فيها إعادة تشغيل IoT Edge ل Linux على Windows VM، يتم حذف قاعدة جدول IP والعودة إلى الإعدادات الأصلية. أيضا، يجب عليك بدء تشغيل خدمة SSH للوحدة النمطية مرة أخرى يدويا.
بعد بدء تشغيل خدمة SSH بنجاح، حدد Debug>Attach to Process، واضبط Connection Type على SSH، ثم قم بتعيين Connection target إلى عنوان IP الخاص ب IoT Edge ل Linux على Windows VM. إذا كنت لا تعرف عنوان IP الخاص ب IoT Edge ل Linux على Windows VM، يمكنك استخدام
Get-EflowVmAddr
PowerShell cmdlet.اكتب IP ثم حدد مفتاح Enter. في النافذة المنبثقة، أدخل التكوينات التالية:
الحقل القيمة اسم المضيف عنوان IP ل IoT Edge ل Linux على Windows VM منفذ 10022 (أو الذي استخدمته في تكوين النشر الخاص بك) اسم المستخدم جذر نوع المصادقة مفتاح خاص ملف المفتاح الخاص المسار الكامل للقيمة id_rsa
التي قمت بإنشائها في خطوة سابقةعبارة المرور عبارة المرور المستخدمة للمفتاح الذي قمت بإنشائه في خطوة سابقة بعد الاتصال بالوحدة النمطية بنجاح باستخدام SSH، يمكنك اختيار العملية وتحديد إرفاق. بالنسبة للوحدة النمطية C#، تحتاج إلى اختيار معالجة dotnet والإرفاق ب Managed (CoreCLR). قد يستغرق الأمر من 10 إلى 20 ثانية في المرة الأولى.
تعيين نقطة توقف لفحص الوحدة النمطية:
- إذا كنت تقوم بالتطوير في C#، فقم بتعيين نقطة توقف في الدالة
PipeMessage()
فيModuleBackgroundService.cs
. - إذا كنت تستخدم C، فقم بتعيين نقطة توقف في الدالة
InputQueue1Callback()
فيmain.c
.
- إذا كنت تقوم بالتطوير في C#، فقم بتعيين نقطة توقف في الدالة
يجب إعادة توجيه إخراج
SimulatedTemperatureSensor
إلىinput1
وحدة Linux C# المخصصة. يجب تشغيل نقطة التوقف. يمكنك مشاهدة المتغيرات في نافذة Visual Studio Locals .لإيقاف تصحيح الأخطاء، حدد Ctrl+F5 أو حدد الزر إيقاف .
تنظيف الموارد
إذا كنت تخطط للمتابعة إلى المقالة التالية الموصى بها، يمكنك الاحتفاظ بالموارد والتكوينات التي قمت بإنشائها وإعادة استخدامها. يمكنك أيضا الاستمرار في استخدام نفس جهاز IoT Edge كجهاز اختبار.
وإلا، احذف التكوينات المحلية وموارد Azure التي استخدمتها في هذه المقالة لتجنب الرسوم.
قم بحذف موارد Azure.
حذف موارد Azure ومجموعات الموارد لا رجعة فيه. يُرجى التأكد من عدم حذف مجموعة الموارد أو الموارد غير الصحيحة عن طريق الخطأ. إذا قمت بإنشاء مركز IoT داخل مجموعة موارد موجودة لديها موارد تريد الاحتفاظ بها، فاحذف فقط مورد محور IoT نفسه، وليس مجموعة الموارد.
لحذف الموارد:
سجل الدخول إلى مدخل Azure، وحدد "Resource groups".
حدد اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge.
راجع قائمة الموارد التي تحتويها مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا كنت تريد حذف بعضها فقط، يمكنك تحديد كل مورد لحذفها بشكل فردي.
الخطوة التالية
في هذا البرنامج التعليمي، قمت بإعداد Visual Studio على جهاز التطوير الخاص بك، وقمت بنشر وتصحيح أخطاء وحدة IoT Edge الأولى منه. الآن بعد أن تعرفت على المفاهيم الأساسية، حاول إضافة وظائف إلى وحدة نمطية حتى تتمكن من تحليل البيانات التي تمر عبرها: