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

Şunlar için geçerlidir:IoT Edge 1.4 checkmark IoT Edge 1.4

Önemli

IoT Edge 1.4 desteklenen sürümdür. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.

Aynı anda birçok cihaz için devam eden dağıtımları yönetmek üzere Azure CLI kullanarak bir Azure IoT Edge otomatik dağıtımı oluşturun. 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ızı, modüllerin durumunu ve durumunu izlemenizi ve gerektiğinde değişiklik yapmanızı sağlayan dinamik işlemlerdir.

Bu makalede, Azure CLI ve IoT uzantısını ayarlarsınız. Ardından modülleri bir dizi IoT Edge cihazına dağıtmayı ve kullanılabilir CLI komutlarını kullanarak ilerleme durumunu izlemeyi öğreneceksiniz.

Ön koş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. Doğrulamak için az --version kullanın. 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.

Modülleri Azure CLI kullanarak 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ümdeki dosya yolunu kullanırsı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.1",
                "createOptions": "{}"
              }
            },
            "edgeHub": {
              "type": "docker",
              "status": "running",
              "restartPolicy": "always",
              "settings": {
                "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
                "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
              }
            }
          },
          "modules": {
            "SimulatedTemperatureSensor": {
              "version": "1.1",
              "type": "docker",
              "status": "running",
              "restartPolicy": "always",
              "settings": {
                "image": "mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0",
                "createOptions": "{}"
              }
            }
          }
        }
      },
      "$edgeHub": {
        "properties.desired": {
          "schemaVersion": "1.0",
          "routes": {
            "upstream": "FROM /messages/* INTO $upstream"
          },
          "storeAndForwardConfiguration": {
            "timeToLiveSecs": 7200
          }
        }
      },
      "SimulatedTemperatureSensor": {
        "properties.desired": {
          "SendData": true,
          "SendInterval": 5
        }
      }
    }
  }
}

Dekont

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ımlandı. Modül başlatma sırası ve rota önceliklendirmesi gibi özellikleri etkinleştirir.

Katmanlı dağıtım

Katmanlı dağıtımlar, üst üste yığılabilen 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.

Katmanlı dağıtımlar, azure CLI ile herhangi bir otomatik dağıtım gibi oluşturulabilir ve yönetilebilir ve yalnızca birkaç fark vardır. Katmanlı dağıtım oluşturulduktan 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 bildiriminin oluşturulmasıdır. Standart otomatik dağıtımın tüm kullanıcı modüllerine ek olarak sistem çalışma zamanı modüllerini içermesi gerekirken, 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.0",
              "createOptions": "{}"
          },
          "type": "docker",
          "status": "running",
          "restartPolicy": "always",
          "version": "1.0"
        }
      },
      "$edgeHub": {
        "properties.desired.routes.upstream": "FROM /messages/* INTO $upstream"
      },
      "SimulatedTemperatureSensor": {
        "properties.desired": {
          "SendData": true,
          "SendInterval": 5
        }
      }
    }
  }
}

Dekont

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. Örnek:

  • 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 uygulandığı bir cihazı hedeflediyse, mevcut istenen özelliklerin üzerine yazar. İstenen özelliklerin üzerine yazmak yerine güncelleştirmek için yeni bir alt bölüm tanımlayabilirsiniz. Örnek:

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

Aynı durum aşağıdakilerle de ifade edilebilir:

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

Dekont

Şu anda, tüm katmanlı dağıtımların geçerli kabul edilmesi 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 hedeflenmiş olarak gösterilir, uygulanmaz.

Özetle, katmanlı dağıtım oluşturmak için:

  • --layered Azure CLI create komutuna bayrağını ekleyin.
  • Sistem modüllerini eklemeyin.
  • ve $edgeHubaltında $edgeAgent 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şturabilmeniz için önce hangi cihazları etkilemek istediğinizi belirtebilmeniz 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 bildiriminden ve diğer parametrelerden oluşan bir dağıtım oluşturarak modülleri hedef cihazlarınıza dağıtırsınız.

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

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

Katmanlı dağıtım oluşturmak için bayrağıyla --layered aynı komutu kullanın.

Dağıtım için create komutu aşağıdaki parametreleri alır:

  • --katmanlı. Dağıtımı katmanlı dağıtım olarak tanımlamak için isteğe bağlı bir bayrak.
  • --deployment-id. IoT hub'ında oluşturulacak dağıtımın adı. Dağıtımınıza 128 küçük harfe kadar benzersiz bir ad verin. Boşluklardan ve şu geçersiz karakterlerden kaçının: & ^ [ ] { } \ | " < > /. Bu parametre zorunludur.
  • --content. Dağıtım bildirimi JSON'un dosya yolu. Bu parametre zorunludur.
  • --hub-name. Dağıtımın oluşturulacağı IoT hub'ının adı. Hub geçerli abonelikte olmalıdır. komutunu kullanarak az account set -s [subscription name] geçerli aboneliğinizi değiştirin.
  • --labels. Dağıtımlarınızı açıklayan ve izlemenize yardımcı olan ad/değer çiftleri. Etiketler, adlar ve değerler için JSON biçimlendirmesi alır. Örneğin: {"HostPlatform":"Linux", "Version:"3.0.1"}.
  • --target-condition. Bu dağıtımda hangi cihazların hedefleneceğ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şul belirtilmezse, dağıtım hiçbir cihaza uygulanmaz.
  • --priority. Pozitif bir tamsayı. aynı cihazda iki veya daha fazla dağıtım hedefleniyorsa, öncelik için en yüksek sayısal değere 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 alır. Örneğin: '{"queries": {"mymetric": "SELECT deviceId FROM devices WHERE properties.reported.lastDesiredStatus.code = 200"}}'.

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

Dekont

Yeni bir IoT Edge dağıtımı oluşturulduğunda, IoT Hub'ın yeni yapılandırmayı işlemesi ve istenen yeni özellikleri hedeflenen cihazlara yayabilmesi bazen 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 güncelleştirmeler 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.
  • Şu anda bu dağıtımı çalıştıran bir cihaz artık hedef koşulu karşılı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 diğer dağıtımların hedef koşulunu karşılamıyorsa cihazda herhangi bir değişiklik olmaz. Cihaz, geçerli modüllerini geçerli durumunda çalıştırmaya devam eder ancak artık bu dağıtımın bir parçası olarak yönetilmiyor. 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 istiyorsanız, 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 alı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.
  • --set. Dağıtımdaki bir özelliği güncelleştirin. Aşağıdaki özellikleri güncelleş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, tüm cihazlar bir sonraki en yüksek öncelikli dağıtımlarını alır. Cihazlarınız başka bir dağıtımın hedef koşulunu karşılamıyorsa, dağıtım silindiğinde modüller kaldırılmaz.

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

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

deployment delete komutu aşağıdaki parametreleri alı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.