إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على:
IoT Edge 1.5
هام
IoT Edge 1.5 LTS هو الإصدار المدعوم release. وصل IoT Edge 1.4 LTS إلى نهاية صلاحيته في 12 نوفمبر 2024. إذا كنت تستخدم إصدارا أقدم، راجع Update IoT Edge.
يرشدك هذا الدرس خلال تطوير وتصحيح ونشر كودك الخاص على جهاز Azure IoT Edge باستخدام IoT Edge for Linux على Windows و Visual Studio 2022. ستتعلم أكثر سيناريوهات المطورين شيوعا لحلول IoT Edge من خلال نشر وحدة C# على جهاز لينكس. ستقوم بنشر وتصحيح وحدة IoT Edge مخصصة تعمل في حاوية لينكس على Windows. حتى لو كنت تخطط لاستخدام لغة مختلفة أو نشر خدمة Azure، يظل هذا الدرس مفيدا للتعرف على أدوات ومفاهيم التطوير.
يتضمن هذا الدرس خطوات لأداتين لتطوير IoT Edge:
- واجهة سطر الأوامر CLI (CLI) أداة تطوير Azure IoT Edge Dev، وهي الأداة المفضلة للتطوير
- إضافة أدوات Azure IoT Edge ل Visual Studio، وهي في وضع maintenance mode
استخدم زر المحدد في بداية هذا البرنامج التعليمي لتحديد إصدار الأداة.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إعداد جهاز التطوير الخاص بك.
- استخدم أدوات تطوير IoT Edge لإنشاء مشروع جديد.
- ابن مشروعك كحاوية وخزنها في Azure Container Registry.
- قم بنشر كودك على جهاز IoT Edge.
المتطلبات الأساسية
يفترض هذا الدرس أنك تستخدم جهازا يعمل بنظام Windows كجهاز تطوير خاص. على أجهزة Windows، يمكنك تطوير وحدات Windows أو Linux إما معا. يرشدك هذا الدرس خلال تطوير حاويات لينكس، باستخدام IoT Edge للينكس على Windows لبناء ونشر الوحدات.
قبل البدء:
قم بتثبيت IoT Edge على لينكس على Windows.
اقرأ البدء السريع نشر أول وحدة IoT Edge على جهاز Windows.
حمل حزمة تطوير النواة .NET .
قم بتثبيت أو تعديل Visual Studio 2022 على جهاز التطوير الخاص بك. اختر خيارات Azure develop و تطوير سطح المكتب مع خيارات عبء العمل C++.
بعد أن يكون تثبيت Visual Studio 2022 جاهزا، قم بتنزيل وتثبيت Azure IoT Edge Tools من 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 Tools ل Visual Studio 2019 من Visual Studio Marketplace.
- قم بتثبيت Azure CLI.
- إنشاء مركز مجاني أو قياسي IoT hub في Azure كمورد سحابي.
إذا لم يكن لديك حساب Azure، أنشئ حسابا مجاني قبل أن تبدأ.
المفاهيم الرئيسية
هذا الدرس يشرح تطوير وحدة IoT Edge. وحدة IoT Edge هي حاوية تحتوي على كود تنفيذي. يمكنك نشر وحدة أو أكثر على جهاز IoT Edge. تؤدي الوحدات النمطية مهامّ محددة مثل استيعاب البيانات من أجهزة الاستشعار أو تنظيف البيانات وتحليلها أو إرسال رسائل إلى مركز IoT. لمزيد من المعلومات، راجع فهم Azure IoT Edge modules.
عند تطوير وحدات IoT Edge، من المهم فهم الفرق بين آلة التطوير وجهاز IoT Edge المستهدف حيث سيتم نشر الوحدة في النهاية. يجب أن تتطابق الحاوية التي تقوم ببنائها للاحتفاظ برمز الوحدة النمطية مع نظام التشغيل (OS) الخاص بالجهاز الهدف.
على سبيل المثال، السيناريو الأكثر شيوعا هو شخص يطور وحدة على جهاز Windows وينوي استهداف جهاز لينكس يعمل بنظام IoT Edge. في هذه الحالة، نظام تشغيل الحاوية هو Linux.
خلال هذا البرنامج التعليمي، نضع في اعتبارنا الفرق بين نظام التشغيل جهاز التطوير ونظام التشغيل الحاوية. في هذا الدرس، ستستخدم مضيف Windows للتطوير و IoT Edge لينكس على Windows آلة افتراضية (VM) لبناء ونشر الوحدات.
يستهدف هذا الدرس الأجهزة التي تعمل بنظام IoT Edge مع حاويات لينكس. يمكنك استخدام نظام التشغيل المفضل لديك طالما أن جهاز التطوير الخاص بك يعمل بحاويات Linux. نوصي باستخدام Visual Studio للتطوير باستخدام حاويات لينكس، وهذا ما يستخدمه هذا الدرس. يمكنك أيضا استخدام Visual Studio Code، رغم وجود اختلافات في الدعم بين الأداتين. لمزيد من المعلومات، راجع تطوير وحدات Azure IoT Edge باستخدام Visual Studio Code.
إعداد Docker CLI ومحرك Docker للاتصال عن بعد
وحدات IoT Edge معبأة كحاويات، لذا تحتاج إلى محرك حاويات على جهاز التطوير الخاص بك لبنائها وإدارتها.
يحتوي IoT Edge على لينكس على جهاز Windows الافتراضي بالفعل على نسخة من محرك Docker. يوضح لك هذا الدرس كيفية الاتصال عن بعد من جهاز تطوير Windows إلى IoT Edge for 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 لنظام لينكس على 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 for Linux على جهاز Windows الافتراضي:
Get-EflowVmAddrتلميح
إذا تم نشر IoT Edge لنظام Linux على جهاز Windows الافتراضي بدون عنوان IP ثابت، فقد يتغير عنوان IP عبر إعادة تشغيل نظام تشغيل Windows أو تغييرات الشبكة. تأكد من أنك تستخدم عنوان IP الصحيح لجهاز IoT Edge for Linux على Windows في كل مرة تريد فيها إنشاء اتصال عن بعد بمحرك 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 لينكس على محرك دوكر Windows الافتراضي وشغل حاوية عينات
hello-world. استبدل<EFLOW-VM-IP>ب IoT Edge لينكس على عنوان IP Windows الآلة الافتراضية الذي حصلت عليه في الخطوة السابقة.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/
Create a Azure IoT Edge project
قالب مشروع IoT Edge في Visual Studio ينشئ حلا يمكنك نشره على أجهزة IoT Edge. استخدم الخطوات التالية لإنشاء حل Azure IoT Edge ثم إنشاء أول وحدة في ذلك الحل. يمكن أن يحتوي كل حل IoT Edge على أكثر من وحدة واحدة.
هام
هيكل مشروع IoT Edge الذي ينشئه Visual Studio ليس هو نفسه الموجود في Visual Studio Code.
حاليا، لا تدعم أداة تطوير Azure IoT Edge CLI إنشاء نوع مشروع Visual Studio. تحتاج إلى استخدام إضافة Azure IoT Edge Tools لإنشاء مشروع Visual Studio.
في Visual Studio، أنشئ مشروعا جديدا باختيار إنشاء مشروع جديد في صفحة البداية أو باختيار زر New Project في شريط الأدوات.
في صفحة إنشاء مشروع جديد، ابحث عن Azure IoT Edge. اختر المشروع الذي يطابق المنصة (وحدة لينكس IoT Edge) وبنية جهازك IoT Edge، ثم اختر Next.
في صفحة تكوين مشروعك الجديد، أدخل اسما لمشروعك وحدد الموقع، ثم حدد إنشاء.
في مربع الحوار إضافة وحدة نمطية ، حدد نوع الوحدة النمطية التي تريد تطويرها. يمكنك أيضا اختيار Existing module لإضافة وحدة IoT Edge موجودة إلى نشرك.
في اسم الوحدة النمطية، حدد اسم الوحدة النمطية.
في عنوان URL للمستودع، قم بتوفير اسم مستودع صور الوحدة النمطية. Visual Studio يقوم تلقائيا بملء اسم الوحدة ب localhost:5000/<اسم الوحدة الخاص بك>. استبدله بمعلومات التسجيل الخاصة بك.
استخدم localhost إذا كنت تستخدم سجل Docker محليا للاختبار. إذا كنت تستخدم Azure Container Registry، فاستخدم خادم تسجيل الدخول من إعدادات السجل الخاص بك. يبدو خادم تسجيل الدخول مثل <اسم> السجل.azurecr.io. استبدل فقط جزء localhost:5000 من السلسلة، بحيث تبدو النتيجة النهائية مثل <اسم> السجل.azurecr.io/< اسم> الوحدة النمطية.
حدد إضافة لإضافة الوحدة النمطية إلى المشروع.
إشعار
إذا كان لديك مشروع IoT Edge موجود، يمكنك تغيير رابط المستودع بفتح ملف
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.5. قم بتحديث نسخة وقت التشغيل من IoT Edge إلى أحدث إصدار مستقر أو الإصدار الذي تريد استهدافه لأجهزتك:
في Solution Explorer، انقر بزر الفأرة الأيمن على اسم مشروعك الرئيسي واختر Set IoT Edge runtime version.
استخدم القائمة المنسدلة لاختيار نسخة التشغيل التي تعمل بها أجهزة IoT Edge الخاصة بك. ثم حدد موافق لحفظ التغييرات. إذا لم تقم بإجراء أي تغييرات، فحدد إلغاء الأمر.
حاليا، لا يتضمن الملحق تحديدا لأحدث إصدارات وقت التشغيل. إذا كنت تريد تعيين إصدار وقت التشغيل الأعلى من 1.2، فافتح
deployment.debug.template.jsonملف بيان التوزيع. تغيير إصدار وقت التشغيل لصورedgeAgentوحدة وقت تشغيل النظام وedgeHub. على سبيل المثال، إذا كنت ترغب في استخدام إصدار IoT Edge 1.5 من وقت تشغيل، قم بتغيير الأسطر التالية في ملف بيان النشر:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5" //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...إذا غيرت الإصدار، أعد توليد بيان النشر الخاص بك عن طريق النقر بزر الفأرة الأيمن على اسم مشروعك واختيار توليد النشر ل IoT Edge. تنشئ هذه الخطوة بيان توزيع استنادا إلى قالب التوزيع الخاص بك. يظهر البيان في مجلد
configفي مشروعك Visual Studio.
deployment.debug.template.jsonافتح ملف بيان التوزيع.تغيير إصدار وقت التشغيل لصور
edgeAgentوحدة وقت تشغيل النظام وedgeHub. على سبيل المثال، إذا كنت ترغب في استخدام إصدار IoT Edge 1.5 لوقت تشغيل، قم بتغيير الأسطر التالية في ملف بيان النشر:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5", //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...
قم بإعداد نسخة محرك Docker البعيد من Visual Studio 2022
تكوين إضافة Azure IoT Edge Tools لاستخدام محرك Docker البعيد الذي يعمل داخل IoT Edge for Linux على جهاز Windows VM:
اختر Tools>Azure IoT Edge tools>IoT Edge الإعدادات للأدوات.
استبدل قيمة المضيف المحلي DOCKER_HOST بعنوان IP الخاص ب IoT Edge لينكس على Windows الآلة الافتراضية. إذا لم تتذكر عنوان IP، استخدم IoT Edge لينكس على Windows PowerShell cmdlet
Get-EflowVmAddrللحصول عليه. على سبيل المثال، إذا كان IoT Edge لينكس على عنوان IP 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 لبناء وحدات أخرى تلبي الاحتياجات الأساسية لحلول إنترنت الأشياء. يمكن أن تتضمن هذه الاحتياجات الأمان وإدارة الجهاز والموثوقية.
إنشاء وحدة نمطية واحدة ودفعها
عادة ما تريد اختبار وتصحيح كل وحدة نمطية قبل تشغيلها داخل حل كامل مع وحدات متعددة. نظرا لأن الحل سيبني أو يصحح الأخطاء باستخدام محرك Docker الموجود داخل IoT Edge for Linux على جهاز Windows الافتراضي، فإن الخطوة الأولى هي بناء ونشر الوحدة لتمكين التصحيح عن بعد:
في Solution Explorer، اختر مجلد مشروع الوحدة (على سبيل المثال،
myIotEdgeModule).تعيين الوحدة النمطية المخصصة كمشروع بدء التشغيل. في القائمة، حدد Project>Set as StartUp Project.
لتصحيح أخطاء وحدة C# Linux، تحتاج إلى تحديث
Dockerfile.amd64.debugالملف لتمكين خدمة SSH. قم بتحديث ملفDockerfile.amd64.debugلاستخدام القالب التالي: Dockerfile لوحدة AMD64 C# Azure IoT Edge مع دعم التصحيح عن بعد.إشعار
عند اختيار Debug، يستخدم Visual Studio
Dockerfile.(amd64|windows-amd64).debugلبناء صور Docker. يتضمن هذا الملف مصحح أخطاء سطر الأوامر .NET Core VSDBG في صورة الحاوية أثناء بنائها. بالنسبة لوحدات IoT Edge الجاهزة للإنتاج، نوصي باستخدام تكوين Release، الذي يستخدمDockerfile.(amd64|windows-amd64)بدون VSDBG.تأكد من أن اسم DLL في السطر الأخير من القالب،
ENTRYPOINT ["dotnet", "IotEdgeModule1.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 التالي لتسجيل الدخول إليه. يمكنك الحصول على اسم المستخدم وكلمة المرور من صفحة Access keys في سجل السجل الخاص بك في بوابة Azure. إذا كنت تستخدم سجلا محليا، يمكنك تشغيل سجل محلي.
docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
في Solution Explorer، انقر بزر الفأرة الأيمن على مجلد المشروع واختر 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" } ] } } }في Solution Explorer، انقر بزر الفأرة الأيمن على مجلد المشروع واختر توليد النشر ل 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 Container Registry، استخدم الأوامر التالية:
# 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 module.
إذا كنت تستخدم Azure Container Registry لتخزين صورة الوحدة، أضف بيانات اعتمادك إلى
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ستكون إعداداتcreateOptionsوIotEdgeModule1مشابهة للمثال التالي:"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 Edgemy-device، استخدم الأمر التالي: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 connection string في بوابة 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 الافتراضي. (يستخدم هذا البرنامج التعليمي المنفذ 10022.)
Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
تحذير
لأسباب أمنية، في كل مرة يعيد فيها تشغيل IoT Edge لنظام لينكس على جهاز افتراضي Windows، يتم حذف قاعدة جدول IP وتعود إلى الإعدادات الأصلية. أيضا، يجب عليك بدء تشغيل خدمة SSH للوحدة النمطية مرة أخرى يدويا.
بعد أن تبدأ خدمة SSH بنجاح، اختر debug>Attach to Process، وقم بتعيين Connection Type على SSH، وقم بتعيين Connection target على عنوان IP الخاص بجهازك IoT Edge لينكس على Windows الجهاز الافتراضي. إذا لم تكن تعرف عنوان IP لجهازك IoT Edge لينكس على Windows الآلة الافتراضية، يمكنك استخدام
Get-EflowVmAddrPowerShell cmdlet.اكتب IP ثم حدد مفتاح Enter. في النافذة المنبثقة، أدخل التكوينات التالية:
الحقل القيمة اسم المضيف عنوان IP لجهاز IoT Edge for Linux على Windows الافتراضي منفذ 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 التي استخدمتها في هذا المقال لتجنب الرسوم.
Delete Azure resources
لا يمكنك التراجع عن حذف موارد Azure ومجموعات الموارد. يُرجى التأكد من عدم حذف مجموعة الموارد أو الموارد غير الصحيحة عن طريق الخطأ. إذا أنشأت IoT Hub داخل مجموعة موارد موجودة تحتوي على موارد تريد الاحتفاظ بها، احذف فقط مورد IoT Hub نفسه، وليس مجموعة الموارد.
لحذف الموارد:
- سجل الدخول إلى بوابة Azure، ثم اختر Resource groups.
- اختر اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge الخاصة بك.
- راجع قائمة الموارد التي تحتويها مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا أردت حذف بعضها فقط، اختر كل مورد لحذفه بشكل منفصل.
الخطوة التالية
في هذا الدرس، قمت بإعداد Visual Studio على جهاز التطوير الخاص بك، وقمت بنشر وتصحيح أول وحدة IoT Edge منه. الآن بعد أن تعرفت على المفاهيم الأساسية، حاول إضافة وظائف إلى وحدة نمطية حتى تتمكن من تحليل البيانات التي تمر عبرها: