تصحيح أخطاء وحدات Azure IoT Edge النمطية باستخدام Visual Studio Code

ينطبق على:علامة اختيار 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.

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

تتضمن هذه المقالة خطوات لأدوتي تطوير IoT Edge.

  • أداة سطر الأوامر Azure IoT Edge Dev Tool (CLI). هذه الأداة مفضلة للتطوير.
  • أدوات Azure IoT Edge لملحق Visual Studio Code . الملحق في وضع الصيانة.

استخدم زر محدد الأداة في بداية هذه المقالة لتحديد إصدار الأداة.

يدعم Visual Studio Code كتابة وحدات IoT Edge النمطية بلغات البرمجة التالية:

  • وظائف C# وC# Azure
  • C
  • Python
  • Node.js
  • Java

يدعم Azure IoT Edge بنيات الجهاز التالية:

  • AMD64
  • ARM32v7
  • ARM64

لمزيد من المعلومات حول أنظمة التشغيل واللغات والبنى المدعومة، راجع دعم اللغة والهندسة المعمارية.

عند استخدام ملحق Visual Studio Code IoT Edge، يمكنك أيضا تشغيل وتصحيح التعليمات البرمجية للوحدة النمطية في IoT Edge Simulator.

يمكنك أيضا استخدام كمبيوتر تطوير Windows وتصحيح الوحدات النمطية في حاوية Linux باستخدام IoT Edge ل Linux على Windows (EFLOW). لمزيد من المعلومات حول استخدام EFLOW لتطوير الوحدات النمطية، راجع البرنامج التعليمي: تطوير وحدات IoT Edge النمطية باستخدام حاويات Linux باستخدام IoT Edge ل Linux على Windows.

إذا لم تكن على دراية بقدرات تصحيح الأخطاء في Visual Studio Code، فشاهد تصحيح أخطاء Visual Studio Code.

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

يمكنك استخدام جهاز كمبيوتر أو جهاز ظاهري يعمل Windows أو macOS أو Linux كآلة تطوير. على أجهزة الكمبيوتر Windows، يمكنك تطوير الوحدات النمطية لـ Windows أو Linux. لتطوير وحدات Linux النمطية، استخدم كمبيوتر Windows يلبي متطلبات Docker Desktop.

لتثبيت الأدوات المطلوبة للتطوير وتصحيح الأخطاء، أكمل البرنامج التعليمي تطوير وحدات Azure IoT Edge باستخدام Visual Studio Code .

تثبيت التعليمات البرمجية لتطبيق Visual Studio

أضف الملحقات التالية:

لتصحيح أخطاء الوحدة النمطية على جهاز، تحتاج إلى:

تصحيح الأخطاء بدون حاوية باستخدام محاكي IoT Edge

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

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

لا يتوفر تصحيح أخطاء وحدة دون حاوية عند استخدام C أو Python.

تصحيح الأخطاء في وضع الإرفاق باستخدام محاكي IoT Edge

تصحيح الأخطاء في وضع إرفاق غير مدعوم ل C أو Python.

تصحيح وحدة نمطية مع وقت تشغيل IoT Edge

في كل مجلد وحدة نمطية، هناك العديد من ملفات Docker لأنواع الحاويات المختلفة. استخدام أي من الملفات التي تنتهي مع ملحق .debug لإنشاء الوحدة النمطية للاختبار.

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

  • قم بإعداد جهاز IoT Edge الخاص بك، وأنشئ وحدات IoT Edge النمطية الخاصة بك باستخدام .debug Dockerfile، ثم انشر على جهاز IoT Edge.
  • تحديث launch.json بحيث يمكن إرفاق Visual Studio Code بالعملية في حاوية على الجهاز البعيد. يمكنك العثور على هذا الملف في .vscode المجلد في مساحة العمل الخاصة بك، ويتم تحديثه في كل مرة تضيف فيها وحدة نمطية جديدة تدعم تصحيح الأخطاء.
  • استخدم تصحيح أخطاء SSH عن بعد لإرفاقها بالحاوية على الجهاز البعيد.

إنشاء الوحدة النمطية ونشرها على جهاز IoT Edge

في Visual Studio Code، افتح ملف بيان توزيع deployment.debug.template.json . يصف بيان التوزيع الوحدات النمطية التي سيتم تكوينها على جهاز IoT Edge المستهدف. قبل النشر، تحتاج إلى تحديث بيانات اعتماد Azure Container Registry وصور الوحدة النمطية بالقيم المناسبة createOptions . لمزيد من المعلومات حول قيم createOption، راجع كيفية تكوين خيارات إنشاء الحاوية لوحدات IoT Edge النمطية.

  1. إذا كنت تستخدم Azure Container Registry لتخزين صورة الوحدة النمطية الخاصة بك، فأضف بيانات الاعتماد الخاصة بك إلى قسم edgeAgent>settings>registryCredentials في deployment.debug.template.json. استبدل myacr باسم السجل الخاص بك في كلا المكانين وقدم كلمة المرور وعنوان خادم تسجيل الدخول. على سبيل المثال:

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_azure_container_registry_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    ...
    
  2. أضف المحتوى المتسلسل التالي أو استبدله بقيمة createOptions لكل نظام (edgeHub وedgeAgent) والوحدة النمطية المخصصة (على سبيل المثال، filtermodule) المدرجة. قم بتغيير القيم إذا لزم الأمر.

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    

    على سبيل المثال، يجب أن يكون تكوين عامل التصفية مشابها لما يلي:

    "filtermodule": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    
  1. في لوحة أوامر Visual Studio Code، قم بتشغيل الأمر Azure IoT Edge: إنشاء ودفع حل IoT Edge.
  2. حدد deployment.debug.template.json الملف الخاص بحلك.
  3. في قسم Azure IoT Hub>Devices في طريقة عرض Visual Studio Code Explorer، انقر بزر الماوس الأيمن فوق اسم جهاز IoT Edge للنشر ثم اختر Create Deployment for Single Device.

    تلميح

    للتأكد من أن الجهاز الذي اخترته هو جهاز IoT Edge، حدد هذا الجهاز لتوسيع قائمة الوحدات النمطية والتحقق من وجود $edgeHub$edgeAgent. يتضمن كل جهاز IoT Edge هاتين الوحدتين.

  4. انتقل إلى مجلد التكوين الخاص بحلك، وحدد deployment.debug.amd64.json الملف، ثم حدد تحديد Edge Deployment Manifest.

يمكنك التحقق من حالة الحاوية من جهازك أو جهازك الظاهري عن طريق تشغيل docker ps الأمر في محطة طرفية. يجب أن ترى الحاوية مدرجة بعد تشغيل الأمر . إذا تم تشغيل التعليمات البرمجية Visual Studio ووقت تشغيل IoT Edge على نفس الجهاز، يمكنك أيضا التحقق من الحالة في طريقة عرض Visual Studio Code Docker.

هام

إذا كنت تستخدم سجلا خاصا مثل Azure Container Registry لصورك، فقد تحتاج إلى المصادقة لدفع الصور. استخدم docker login <Azure Container Registry login server> أو az acr login --name <Azure Container Registry name> للمصادقة.

تسجيل الدخول إلى Docker

قم بتوفير بيانات اعتماد سجل الحاوية إلى Docker بحيث يمكنه دفع صورة الحاوية إلى التخزين في السجل.

  1. سجل الدخول إلى Docker باستخدام بيانات اعتماد Azure Container Registry التي قمت بحفظها بعد إنشاء السجل.

    docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>
    

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

  2. سجّل الدخول إلى Azure Container Registry. قد تحتاج إلى تثبيت Azure CLI لاستخدام az الأمر . يطلب هذا الأمر العثور على اسم المستخدم وكلمة المرور في سجل الحاوية في مفاتيح الإعدادات> Access.

    az acr login -n <Azure Container Registry name>
    

تلميح

إذا قمت بتسجيل الخروج في أي وقت في هذا البرنامج التعليمي، كرر خطوات تسجيل الدخول Docker وAzure Container Registry للمتابعة.

إنشاء صورة Docker للوحدة النمطية

استخدم Dockerfile الخاص بالوحدة النمطية لإنشاء صورة Docker للوحدة النمطية.

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

على سبيل المثال، لإنشاء صورة للسجل المحلي أو Azure Container Registry، استخدم الأوامر التالية:

# Build the image for the local registry

docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t localhost:5000/filtermodule:0.0.1-amd64 "./modules/filtermodule"

# Or build the image for an Azure Container Registry

docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t myacr.azurecr.io/filtermodule:0.0.1-amd64 "./modules/filtermodule"

صورة Docker لوحدة الدفع

ادفع صورة الوحدة النمطية إلى السجل المحلي أو سجل الحاوية.

docker push <ImageName>

على سبيل المثال:

# Push the Docker image to the local registry

docker push localhost:5000/filtermodule:0.0.1-amd64

# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/filtermodule:0.0.1-amd64

نشر الوحدة النمطية على جهاز IoT Edge

استخدم الأمر IoT Edge Azure CLI set-modules لنشر الوحدات النمطية إلى Azure IoT Hub. على سبيل المثال، لنشر الوحدات النمطية المحددة في ملف deployment.debug.template.json إلى IoT Hub my-iot-hub لجهاز 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 في إعدادات أمان IoT Hub >نهج>الوصول>المشترك iothubowner.

تصحيح الوحدة النمطية

لتصحيح الوحدات النمطية على جهاز بعيد، يمكنك استخدام تصحيح أخطاء SSH عن بعد في Visual Studio Code.

لتمكين تصحيح أخطاء Visual Studio Code عن بعد، قم بتثبيت ملحق التطوير عن بعد. لمزيد من المعلومات حول تصحيح أخطاء Visual Studio Code عن بعد، راجع Visual Studio Code Remote Development.

للحصول على تفاصيل حول كيفية استخدام تصحيح أخطاء SSH عن بعد في Visual Studio Code، راجع التطوير عن بعد باستخدام SSH

في طريقة العرض تصحيح التعليمات البرمجية Visual Studio حدد ملف تكوين التصحيح الوحدة النمطية. بشكل افتراضي، يستخدم .debug Dockerfile وإعدادات حاوية createOptions الوحدة النمطية launch.json والملف localhost.

حدد بدء تصحيح الأخطاء أو حدد F5. حدد العملية التي تريد إرفاقها. في طريقة عرض تصحيح التعليمات البرمجية Visual Studio، ترى المتغيرات في اللوحة اليسرى.

تتبع الأخطاء باستخدام Docker Remote SSH

تدعم محركات Docker و Moby اتصالات SSH بالحاويات التي تسمح لك بتصحيح الأخطاء في Visual Studio Code المتصل بجهاز بعيد. تحتاج إلى تلبية المتطلبات الأساسية التالية قبل أن تتمكن من استخدام هذه الميزة.

قد تختلف متطلبات تصحيح أخطاء SSH عن بعد اعتمادا على اللغة التي تستخدمها. تصف الأقسام التالية إعداد .NET. للحصول على معلومات حول اللغات الأخرى، راجع التطوير عن بعد باستخدام SSH للحصول على نظرة عامة. يتم تضمين تفاصيل حول كيفية تكوين تصحيح الأخطاء عن بعد في أقسام تصحيح الأخطاء لكل لغة في وثائق Visual Studio Code.

تكوين نفق Docker SSH

  1. اتبع الخطوات الواردة في نفق Docker SSH لتكوين نفق SSH على كمبيوتر التطوير الخاص بك. يتطلب نفق SSH مصادقة زوج مفاتيح عام/خاص وسياق Docker الذي يحدد نقطة نهاية الجهاز البعيد.

  2. يتطلب الاتصال إلى Docker امتيازات على مستوى الجذر. اتبع الخطوات الواردة في إدارة docker كمستخدم غير جذر للسماح بالاتصال ب Docker daemon على الجهاز البعيد. عند الانتهاء من تصحيح الأخطاء، قد ترغب في إزالة المستخدم من مجموعة Docker.

  3. في Visual Studio Code، استخدم لوحة الأوامر (Ctrl+Shift+P) لإصدار سياق Docker: استخدم الأمر لتنشيط سياق Docker الذي يشير إلى الجهاز البعيد. يتسبب هذا الأمر في استخدام كل من Visual Studio Code وDocker CLI لسياق الجهاز البعيد.

    تلميح

    تستخدم كافة أوامر Docker السياق الحالي. تذكر إعادة تغيير السياق إلى الوضع الافتراضي عند الانتهاء من تصحيح الأخطاء.

  4. للتحقق من أن سياق Docker البعيد نشط، قم بإدراج الحاويات قيد التشغيل على الجهاز البعيد:

    docker ps
    

    يجب أن يسرد الإخراج الحاويات التي تعمل على الجهاز البعيد مشابهة:

    PS C:\> docker ps        
    CONTAINER ID   IMAGE                                                             COMMAND                   CREATED        STATUS         PORTS                                                                                                                                   NAMES
    a317b8058786   myacr.azurecr.io/filtermodule:0.0.1-amd64                         "dotnet filtermodule…"    24 hours ago   Up 6 minutes                                                                                                                                           filtermodule
    d4d949f8dfb9   mcr.microsoft.com/azureiotedge-hub:1.5                            "/bin/sh -c 'echo \"$…"   24 hours ago   Up 6 minutes   0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:5671->5671/tcp, :::5671->5671/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 1883/tcp   edgeHub
    1f0da9cfe8e8   mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0   "/bin/sh -c 'echo \"$…"   24 hours ago   Up 6 minutes                                                                                                    
                                           tempSensor
    66078969d843   mcr.microsoft.com/azureiotedge-agent:1.5                          "/bin/sh -c 'exec /a…"    24 hours ago   Up 6 minutes                                                                                                    
                                           edgeAgent
    
  5. في دليل .vscode ، أضف تكوينا جديدا إلى launch.json عن طريق فتح الملف في Visual Studio Code. حدد إضافة تكوين ثم اختر قالب إرفاق عن بعد المطابق للوحدة النمطية الخاصة بك. على سبيل المثال، التكوين التالي ل .NET Core. تغيير قيمة المعلمة -H في PipeArgs إلى اسم DNS لجهازك أو عنوان IP.

    "configurations": [
    {
      "name": "Remote Debug IoT Edge Module (.NET Core)",
      "type": "coreclr",
      "request": "attach",
      "processId": "${command:pickRemoteProcess}",
      "pipeTransport": {
        "pipeProgram": "docker",
        "pipeArgs": [
          "-H",
          "ssh://user@my-device-vm.eastus.cloudapp.azure.com:22",
          "exec",
          "-i",
          "filtermodule",
          "sh",
          "-c"
        ],
        "debuggerPath": "~/vsdbg/vsdbg",
        "pipeCwd": "${workspaceFolder}",
        "quoteArgs": true
      },
      "sourceFileMap": {
        "/app": "${workspaceFolder}/modules/filtermodule"
      },
      "justMyCode": true
    },
    

تصحيح أخطاء الوحدة النمطية عن بعد

  1. في طريقة عرض تصحيح التعليمات البرمجية Visual Studio، حدد تكوين تتبع الأخطاء وحدة IoT Edge النمطية عن بعد (.NET Core) .

  2. حدد بدء تصحيح الأخطاء أو حدد F5. حدد العملية التي تريد إرفاقها.

  3. في طريقة عرض تصحيح التعليمات البرمجية Visual Studio، ترى المتغيرات في اللوحة اليسرى.

  4. في Visual Studio Code، قم بتعيين نقاط التوقف في الوحدة النمطية المخصصة.

  5. عند الوصول إلى نقطة توقف، يمكنك فحص المتغيرات، والتنقل عبر التعليمات البرمجية، وتصحيح الوحدة النمطية الخاصة بك.

    لقطة شاشة ل Visual Studio Code المرفقة بحاوية Docker على جهاز بعيد متوقف مؤقتا عند نقطة توقف.

إشعار

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

راجع إدخال مدونة مطور IoT هذا للحصول على مثال باستخدام جهاز Raspberry Pi.

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

بعد إنشاء الوحدة النمطية الخاصة بك، تعرف على كيفية نشر وحدات Azure IoT Edge النمطية من Visual Studio Code.

لتطوير وحدات لأجهزة IoT Edge الخاصة بك، فهم واستخدام Azure IoT Hub SDKs.