نشر ومراقبة وحدات IoT Edge على نطاق واسع باستخدام Azure CLI

ينطبق على:علامة اختيار 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 IoT Edge باستخدام Azure CLI لإدارة عمليات النشر المستمرة للعديد من الأجهزة في وقت واحد. تعد عمليات التوزيع التلقائية ل IoT Edge جزءا من ميزة إدارة الجهاز في Azure IoT Hub. عمليات التوزيع هي عمليات ديناميكية تمكنك من توزيع وحدات متعددة على أجهزة متعددة، وتعقب حالة الوحدات وسلامتها، وإجراء تغييرات عند الضرورة.

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

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

  • مركز IoT في اشتِراك Azure الخاص بك.

  • جهاز IoT Edge واحد أو أكثر.

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

  • Azure CLI في بيئتك. يجب أن يكون إصدار Azure CLI 2.0.70 أو أحدث. استخدم az --version للتحقق من الصحة. يَدعم هذا الإصدار أوامر ملحق az ويقدم إطار قيادة Knack.

  • امتداد إنترنت الأشياء لواجهة مستوى الاستدعاء Azure.

تكوين بيان التوزيع

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

لنشر الوحدات النمطية باستخدام Azure CLI، احفظ بيان التوزيع محليا كملف .txt. يمكنك استخدام مسار الملف في القسم التالي عند تشغيل الأمر لتطبيق التكوين على جهازك.

فيما يلي بيان نشر أساسي مع وحدة نمطية واحدة كمثال:

{
  "content": {
    "modulesContent": {
      "$edgeAgent": {
        "properties.desired": {
          "schemaVersion": "1.1",
          "runtime": {
            "type": "docker",
            "settings": {
              "minDockerVersion": "v1.25",
              "loggingOptions": "",
              "registryCredentials": {}
            }
          },
          "systemModules": {
            "edgeAgent": {
              "type": "docker",
              "settings": {
                "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
                "createOptions": "{}"
              }
            },
            "edgeHub": {
              "type": "docker",
              "status": "running",
              "restartPolicy": "always",
              "settings": {
                "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
                "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
              }
            }
          },
          "modules": {
            "SimulatedTemperatureSensor": {
              "version": "1.5",
              "type": "docker",
              "status": "running",
              "restartPolicy": "always",
              "settings": {
                "image": "mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.5",
                "createOptions": "{}"
              }
            }
          }
        }
      },
      "$edgeHub": {
        "properties.desired": {
          "schemaVersion": "1.1",
          "routes": {
            "upstream": "FROM /messages/* INTO $upstream"
          },
          "storeAndForwardConfiguration": {
            "timeToLiveSecs": 7200
          }
        }
      },
      "SimulatedTemperatureSensor": {
        "properties.desired": {
          "SendData": true,
          "SendInterval": 5
        }
      }
    }
  }
}

إشعار

يستخدم نموذج بيان التوزيع هذا الإصدار 1.1 من المخطط لعامل IoT Edge والمركز. تم إصدار المخطط 1.1 مع الإصدار 1.0.10 من IoT Edge. وهو يتيح ميزات مثل ترتيب بدء تشغيل الوحدة النمطية وتحديد أولويات المسار.

التوزيع ذو الطبقات

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

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

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

فيما يلي بيان نشر أساسي ذو طبقات مع وحدة نمطية واحدة كمثال:

{
  "content": {
    "modulesContent": {
      "$edgeAgent": {
        "properties.desired.modules.SimulatedTemperatureSensor": {
          "settings": {
            "image": "mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.5",
              "createOptions": "{}"
          },
          "type": "docker",
          "status": "running",
          "restartPolicy": "always",
          "version": "1.5"
        }
      },
      "$edgeHub": {
        "properties.desired.routes.upstream": "FROM /messages/* INTO $upstream"
      },
      "SimulatedTemperatureSensor": {
        "properties.desired": {
          "SendData": true,
          "SendInterval": 5
        }
      }
    }
  }
}

إشعار

يحتوي بيان التوزيع متعدد الطبقات هذا على تنسيق مختلف قليلا عن بيان التوزيع القياسي. يتم طي الخصائص المطلوبة من وحدات وقت التشغيل واستخدام تدوين النقطة. هذا التنسيق مطلوب لمدخل Azure للتعرف على توزيع الطبقات. على سبيل المثال:

  • properties.desired.modules.<module_name>
  • properties.desired.routes.<route_name>

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

"SimulatedTemperatureSensor": {
  "properties.desired.layeredProperties": {
    "SendData": true,
    "SendInterval": 5
  }
}

ويمكن أيضا التعبير عن الشيء نفسه مع:

"SimulatedTemperatureSensor": {
  "properties.desired.layeredProperties.SendData" : true,
  "properties.desired.layeredProperties.SendInterval": 5
}

إشعار

حاليا، يجب أن تتضمن كافة عمليات النشر الطبقات كائنا ليتم اعتباره صالحا edgeAgent . حتى إذا كان النشر متعدد الطبقات يقوم بتحديث خصائص الوحدة النمطية فقط، فقم بتضمين كائن فارغ. على سبيل المثال: "$edgeAgent":{}. سيتم عرض نشر متعدد الطبقات مع كائن فارغ edgeAgent على أنه مستهدف في الوحدة النمطية المزدوجة edgeAgent ، غير مطبق.

باختصار، لإنشاء نشر متعدد الطبقات:

  • أضف العلامة --layered إلى أمر إنشاء Azure CLI.
  • لا تقم بتضمين وحدات النظام النمطية.
  • استخدم تدوين النقطة الكاملة ضمن $edgeAgent و $edgeHub.

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

تحديد الأجهزة باستخدام العلامات

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

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

"tags":{
  "location":{
    "building": "20",
    "floor": "2"
  },
  "roomtype": "conference",
  "environment": "prod"
}

لمزيد من المعلومات حول توائم الجهاز وعلاماته، راجع فهم واستخدام توائم الجهاز في IoT Hub.

إنشاء توزيع

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

استخدم الأمر az iot edge deployment create لإنشاء توزيع:

az iot edge deployment create --deployment-id [deployment id] --hub-name [hub name] --content [file path] --labels "[labels]" --target-condition "[target query]" --priority [int]

استخدم نفس الأمر مع العلامة --layered لإنشاء نشر متعدد الطبقات.

يأخذ أمر إنشاء للتوزيع المعلمات التالية:

  • --الطبقات. علامة اختيارية لتحديد التوزيع كنشر متعدد الطبقات.
  • --deployment-id. اسم النشر الذي سيتم إنشاؤه في مركز IoT. امنح النشر اسما فريدا يصل إلى 128 حرفا صغيرا. تجنب المسافات والأحرف غير الصالحة التالية: & ^ [ ] { } \ | " < > /. هذه المعلمة مطلوبة.
  • --المحتوى. مسار الملف إلى بيان النشر JSON. هذه المعلمة مطلوبة.
  • --اسم المركز. اسم مركز IoT الذي سيتم إنشاء النشر فيه. يجب أن يكون المركز موجود في الاشتراك الحالي. قم بتغيير اشتراكك الحالي باستخدام az account set -s [subscription name] الأمر .
  • --تسميات. أزواج الاسم/القيمة التي تصف عمليات التوزيع وتساعدك على تعقبها. تأخذ التسميات تنسيق JSON للأسماء والقيم. على سبيل المثال: {"HostPlatform":"Linux", "Version:"3.0.1"}.
  • --شرط الهدف. الشرط الذي يحدد الأجهزة التي سيتم استهدافها بهذا النشر. يستند الشرط إلى علامات توأم الجهاز أو خصائص الجهاز المزدوج المبلغ عنها، ويجب أن يتطابق مع تنسيق التعبير. على سبيل المثال: tags.environment='test' and properties.reported.devicemodel='4000x'. إذا لم يتم تحديد الشرط الهدف، فلن يتم تطبيق النشر على أي أجهزة.
  • --الأولوية. عدد صحيح موجب. إذا تم استهداف اثنين أو أكثر من عمليات النشر في نفس الجهاز، فسيتم تطبيق التوزيع الذي له أعلى قيمة رقمية للأولوية.
  • --المقاييس. المقاييس التي تستعلم عن الخصائص edgeHub التي تم الإبلاغ عنها لتعقب حالة التوزيع. تأخذ المقاييس إدخال JSON أو مسار ملف. على سبيل المثال: '{"queries": {"mymetric": "SELECT deviceId FROM devices WHERE properties.reported.lastDesiredStatus.code = 200"}}'.

لمراقبة التوزيع باستخدام Azure CLI، راجع مراقبة عمليات توزيع IoT Edge.

إشعار

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

تعديل عملية توزيع

عند تعديل عملية توزيع، يتم نسخ التغييرات على الفور إلى جميع الأجهزة المستهدفة.

إذا قمت بتحديث شرط الهدف، تحدث التحديثات التالية:

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

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

استخدم الأمر az iot edge deployment update لتحديث عملية نشر:

az iot edge deployment update --deployment-id [deployment id] --hub-name [hub name] --set [property1.property2='value']

يأخذ أمر تحديث التوزيع المعلمات التالية:

  • --deployment-id. اسم النشر الموجود في مركز IoT.
  • --اسم المركز. اسم مركز IoT الذي يوجد فيه التوزيع. يجب أن يكون المركز موجود في الاشتراك الحالي. قم بالتبديل إلى الاشتراك المطلوب باستخدام الأمر az account set -s [subscription name].
  • --تعيين. تحديث خاصية في النشر. يمكنك تحديث الخصائص التالية:
    • targetCondition (على سبيل المثال، targetCondition=tags.location.state='Oregon')
    • labels
    • priority
  • --إضافة. أضف خاصية جديدة إلى النشر، بما في ذلك الشروط أو التسميات الهدف.
  • --إزالة. إزالة خاصية موجودة، بما في ذلك الشروط أو التسميات الهدف.

حذف عملية نشر

عند حذف عملية توزيع، فإن أي أجهزة تأخذ توزيعها التالي الأعلى أولوية. إذا لم تحقق أجهزتك الشرط الهدف لأي توزيع آخر، فلن تتم إزالة الوحدات النمطية عند حذف النشر.

استخدم الأمر az iot edge deployment delete لحذف عملية نشر:

az iot edge deployment delete --deployment-id [deployment id] --hub-name [hub name]

يأخذ الأمر deployment delete المعلمات التالية:

  • --deployment-id. اسم النشر الموجود في مركز IoT.
  • --اسم المركز. اسم مركز IoT الذي يوجد فيه التوزيع. يجب أن يكون المركز موجود في الاشتراك الحالي. قم بالتبديل إلى الاشتراك المطلوب باستخدام الأمر az account set -s [subscription name].

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

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