Aracılığıyla paylaş


Azure CLI kullanarak IoT Edge modüllerini büyük ölçekte dağıtma ve izleme

Şunlar için geçerlidir:IoT Edge 1.5 onay işareti IoT Edge 1.5

Önemli

IoT Edge 1.5 LTS desteklenen sürümdür. IoT Edge 1.4 LTS, 12 Kasım 2024 itibarıyla kullanım ömrü sona erer. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.

Azure IoT Edge otomatik dağıtımı oluşturmak ve aynı anda birçok cihaz için dağıtımları yönetmek için Azure CLI'yi kullanın. IoT Edge için otomatik dağıtımlar, Azure IoT Hub'ın cihaz yönetimi özelliğinin bir parçasıdır. Dağıtımlar birden çok cihaza birden çok modül dağıtmanıza, modüllerin durumunu ve durumunu izlemenize ve gerektiğinde değişiklik yapmanıza olanak tanır.

Bu makalede, Azure CLI ve IoT uzantısını ayarlarsınız. Ardından, modülleri bir dizi IoT Edge cihazına dağıtır ve CLI komutlarını kullanarak ilerleme durumunu izlersiniz.

Önkoşullar

  • Azure aboneliğinizde bir IoT hub'ı.

  • Bir veya daha fazla IoT Edge cihazı.

    Ayarlanmış bir IoT Edge cihazınız yoksa Azure sanal makinesinde bir cihaz oluşturabilirsiniz. Şu hızlı başlangıç makalelerinden birinde yer alan adımları izleyin: Sanal Linux cihazı oluşturma veya Sanal Windows cihazı oluşturma.

  • Ortamınızdaki Azure CLI. Azure CLI sürümünüz 2.0.70 veya üzeri olmalıdır. Denetlemek için kullanın az --version . Bu sürüm, az uzantı komutlarını destekler ve Knack komut çerçevesini kullanıma sunar.

  • Azure CLI için IoT uzantısı.

Dağıtım bildirimi yapılandırma

Dağıtım bildirimi, dağıtılacak modülleri, modüller arasında verilerin nasıl aktığını ve modül ikizlerinin istenen özelliklerini açıklayan bir JSON belgesidir. Daha fazla bilgi için bkz . IoT Edge'de modülleri dağıtmayı ve yollar kurmayı öğrenin.

Azure CLI kullanarak modülleri dağıtmak için dağıtım bildirimini yerel olarak .txt dosyası olarak kaydedin. Yapılandırmayı cihazınıza uygulamak için komutunu çalıştırdığınızda sonraki bölümde dosya yolunu kullanacaksınız.

Aşağıda örnek olarak tek modül içeren temel bir dağıtım bildirimi verilmiştir.

{
  "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
        }
      }
    }
  }
}

Not

Bu örnek dağıtım bildirimi, IoT Edge aracısı ve hub'ı için şema sürümü 1.1'i kullanır. Şema sürümü 1.1, IoT Edge sürüm 1.0.10 ile birlikte yayınlanır. Modül başlangıç sırası ve rota önceliklendirmesi gibi özellikleri kullanmanıza olanak tanır.

Katmanlı dağıtım

Katmanlı dağıtımlar, üst üste yığabileceğiniz bir otomatik dağıtım türüdür. Katmanlı dağıtımlar hakkında daha fazla bilgi için bkz . Tek cihazlar veya uygun ölçekte IoT Edge otomatik dağıtımlarını anlama.

Azure CLI ile herhangi bir otomatik dağıtım gibi yalnızca birkaç farkla katmanlı dağıtımlar oluşturabilir ve yönetebilirsiniz. Katmanlı dağıtım oluşturduktan sonra, Azure CLI katmanlı dağıtımlar için tüm dağıtımlarda olduğu gibi çalışır. Katmanlı dağıtım oluşturmak için create komutuna --layered bayrağını ekleyin.

İkinci fark, dağıtım bildirimini nasıl oluşturduğunuzdur. Standart otomatik dağıtımlar sistem çalışma zamanı modüllerini ve tüm kullanıcı modüllerini içermelidir. Katmanlı dağıtımlar yalnızca kullanıcı modüllerini içerebilir. Katmanlı dağıtımlar, sistem çalışma zamanı modülleri gibi her IoT Edge cihazının gerekli bileşenlerini sağlamak için cihazda standart bir otomatik dağıtıma da ihtiyaç duyar.

Aşağıda örnek olarak bir modül içeren temel katmanlı dağıtım bildirimi verilmiştir.

{
  "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
        }
      }
    }
  }
}

Not

Bu katmanlı dağıtım bildirimi, standart dağıtım bildiriminden biraz farklı bir biçime sahiptir. Çalışma zamanı modüllerinin istenen özellikleri daraltılır ve nokta gösterimi kullanılır. Azure portalının katmanlı bir dağıtımı tanıması için bu biçimlendirme gereklidir. Örneğin:

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

Önceki örnekte bir modülün katmanlı dağıtım ayarı properties.desired gösterilmektedir. Bu katmanlı dağıtım, aynı modülün zaten yüklü olduğu bir cihazı hedefliyorsa, var olan istenen özelliklerin üzerine yazılır. İstenen özelliklerin üzerine yazmak yerine güncelleştirmek için yeni bir alt bölüm tanımlayın. Örneğin:

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

Aynı ifadeyi aşağıdaki söz dizimiyle de ifade edebilirsiniz:

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

Not

Şu anda tüm katmanlı dağıtımların geçerli olması için bir edgeAgent nesne içermesi gerekir. Katmanlı dağıtım yalnızca modül özelliklerini güncelleştirse bile boş bir nesne ekleyin. Örneğin: "$edgeAgent":{}. Boş edgeAgent nesne içeren katmanlı dağıtım, modül ikizinde edgeAgent olarak gösterilir, uygulanmaz.

Katmanlı dağıtım oluşturmak için:

  • --layered Azure CLI create komutuna bayrağını ekleyin.
  • Sistem modüllerini eklemeyin.
  • ve $edgeAgentaltında $edgeHub tam nokta gösterimini kullanın.

Katmanlı dağıtımlarda modül ikizlerini yapılandırma hakkında daha fazla bilgi için bkz . Katmanlı dağıtım.

Etiketleri kullanarak cihazları tanımlama

Dağıtım oluşturmadan önce, hangi cihazları etkilemek istediğinizi belirtmeniz gerekir. Azure IoT Edge, cihaz ikizindeki etiketleri kullanarak cihazları tanımlar.

Her cihazda çözümünüz için anlamlı olan herhangi bir şekilde tanımladığınız birden çok etiket bulunabilir. Örneğin, akıllı binaların yerleşkesini yönetiyorsanız bir cihaza aşağıdaki etiketleri ekleyebilirsiniz:

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

Cihaz ikizleri ve etiketler hakkında daha fazla bilgi için bkz . IoT Hub'da cihaz ikizlerini anlama ve kullanma.

Dağıtım oluşturma

Dağıtım bildirimini ve diğer parametreleri içeren bir dağıtım oluşturarak modülleri hedef cihazlara dağıtın.

Dağıtım oluşturmak için az iot edge deployment create komutunu çalıştırın:

az iot edge deployment create --deployment-id <deployment-id> --hub-name <hub-name> --content <file-path> --labels "<labels>" --target-condition "<target-query>" --priority <priority>

Katmanlı bir dağıtım oluşturmak için --layered bayrağını ekleyin.

az iot edge deployment create komutu aşağıdaki parametreleri kullanır:

  • --layered: Dağıtımı katmanlı dağıtım olarak tanımlayan isteğe bağlı bayrak.
  • --deployment-id: IoT hub'ında oluşturulan dağıtımın adı. En fazla 128 küçük harf içeren benzersiz bir ad kullanın. Boşluklardan ve şu geçersiz karakterlerden kaçının: & ^ [ ] { } \ | " < > /. Bu parametre zorunludur.
  • --content: Dağıtım bildirimi JSON dosyasının dosya yolu. Bu parametre zorunludur.
  • --hub-name: Dağıtımın oluşturulduğu IoT hub'ının adı. Hub geçerli abonelikte olmalıdır. komutunu çalıştırarak az account set -s <subscription-name>geçerli aboneliğinizi değiştirin.
  • --labels: Dağıtımları açıklayan ve izlemenize yardımcı olan ad/değer çiftleri. Etiketler, adlar ve değerler için JSON biçimlendirmesi kullanır. Örneğin: {"HostPlatform":"Linux", "Version":"3.0.1"}.
  • --target-condition: Bu dağıtımla hangi cihazların hedeflendiğini belirleyen koşul. Koşul, cihaz ikizi etiketlerini veya cihaz ikizi tarafından bildirilen özellikleri temel alır ve ifade biçimiyle eşleşmelidir. Örneğin: tags.environment='test' and properties.reported.devicemodel='4000x'. Hedef koşulu belirtmezseniz, dağıtım hiçbir cihaza uygulanmaz.
  • --priority: Pozitif tamsayı. İki veya daha fazla dağıtım aynı cihazı hedeflediyse, en yüksek önceliğe sahip dağıtım uygulanır.
  • --metrics: Bir dağıtımın edgeHub durumunu izlemek için bildirilen özellikleri sorgulayan ölçümler. Ölçümler JSON girişini veya dosya yolunu kullanır. Örneğin: '{"queries": {"mymetric": "SELECT deviceId FROM devices WHERE properties.reported.lastDesiredStatus.code = 200"}}'.

Azure CLI ile bir dağıtımı izlemek için bkz. IoT Edge dağıtımlarını izleme.

Not

Yeni bir IoT Edge dağıtımı oluşturduğunuzda IoT Hub'ın yeni yapılandırmayı işlemesi ve istenen yeni özellikleri hedeflenen cihazlara göndermesi 5 dakika kadar sürebilir.

Dağıtımı değiştirme

Bir dağıtımı değiştirdiğinizde, değişiklikler hemen tüm hedeflenen cihazlara çoğaltılır.

Hedef koşulu güncelleştirirseniz aşağıdaki değişiklikler gerçekleşir:

  • Bir cihaz eski hedef koşulu karşılamadıysa ancak yeni hedef koşulu karşılıyorsa ve bu dağıtım bu cihaz için en yüksek öncelikse, bu dağıtım cihaza uygulanır.
  • Artık bu dağıtımı çalıştıran bir cihaz hedef koşulu karşılamıyorsa, bu dağıtımı kaldırır ve bir sonraki en yüksek öncelikli dağıtımı alır.
  • Şu anda bu dağıtımı çalıştıran bir cihaz artık hedef koşulu karşılamıyorsa ve başka bir dağıtımın hedef koşulunu karşılamıyorsa cihazda herhangi bir değişiklik olmaz. Cihaz mevcut modüllerini mevcut durumunda çalıştırmaya devam eder ancak artık bu dağıtımın bir parçası olarak yönetilmemektedir. Cihaz başka bir dağıtımın hedef koşulunu karşıladıktan sonra bu dağıtımı kaldırır ve yenisini alır.

Dağıtım bildiriminde tanımlanan modülleri ve yolları içeren bir dağıtımın içeriğini güncelleştiremezsiniz. Bir dağıtımın içeriğini güncelleştirmek için, daha yüksek önceliğe sahip aynı cihazları hedefleyen yeni bir dağıtım oluşturun. Mevcut modülün hedef koşul, etiketler, ölçümler ve öncelik gibi belirli özelliklerini değiştirebilirsiniz.

Dağıtımı güncelleştirmek için az iot edge deployment update komutunu kullanın:

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

Dağıtım güncelleştirme komutu aşağıdaki parametreleri kullanır:

  • --deployment-id: IoT hub'ında dağıtımın adı.
  • --hub-name: Dağıtımın bulunduğu IoT hub'ının adı. Hub geçerli abonelikte olmalıdır. Başka bir aboneliğe geçmek için komutunu çalıştırın az account set -s <subscription-name>.
  • --set: Dağıtımdaki bir özelliği değiştirin. Aşağıdaki özellikleri değiştirebilirsiniz:
    • targetCondition (örnek, targetCondition=tags.location.state='Oregon')
    • labels
    • priority
  • --add: Dağıtıma hedef koşullar veya etiketler de dahil olmak üzere yeni bir özellik ekleyin.
  • --remove: Hedef koşullar veya etiketler de dahil olmak üzere mevcut bir özelliği kaldırın.

Dağıtımı silme

Bir dağıtımı sildiğinizde, cihazlar bir sonraki en yüksek öncelikli dağıtımlarını kullanır. Cihazlar başka bir dağıtımın hedef koşulunu karşılamıyorsa, dağıtımı sildiğinizde modüller kaldırılmaz.

Dağıtımı silmek için az iot edge deployment delete komutunu çalıştırın:

az iot edge deployment delete --deployment-id <deployment-id> --hub-name <hub-name>

deployment delete komutu aşağıdaki parametreleri kullanır:

  • --deployment-id. IoT hub'ında bulunan dağıtımın adı.
  • --hub-name. Dağıtımın bulunduğu IoT hub'ının adı. Hub geçerli abonelikte olmalıdır. komutunu az account set -s [subscription name]kullanarak istediğiniz aboneliğe geçin.

Sonraki adımlar

IoT Edge cihazlarına modül dağıtma hakkında daha fazla bilgi edinin.