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

Uygulama hedefi:  Evet simgesi IoT Edge 1,1  evet IoT Edge 1,2

Birden Azure IoT Edge devam eden dağıtımları aynı anda yönetmek için Azure komut satırı arabirimini kullanarak bir otomatik dağıtım oluşturun. Dağıtımlar için IoT Edge, Azure IoT Hub'nin otomatik cihaz yönetimi özelliğinin bir Azure IoT Hub. Dağıtımlar, birden çok cihaza birden çok modül dağıtmanızı, modüllerin durumunu ve durumunu izlemenizi ve gerektiğinde değişiklikler uygulamanızı sağlayan dinamik işlemlerdir.

Bu makalede Azure CLI ve IoT uzantısını ayarlayabilirsiniz. Ardından bir dizi farklı cihaza modül dağıtmayı ve IoT Edge CLI komutlarını kullanarak ilerleme durumunu izleme hakkında bilgi edinebilirsiniz.

Önkoşullar

  • Azure aboneliğinizin bir IoT hub'ı.

  • Bir veya daha IoT Edge cihaz.

    Sanal makineniz yoksa IoT Edge Azure sanal makinesi içinde bir tane oluşturabilirsiniz. Şu hızlı başlangıç makalelerinden birinin adımlarını izleyin: Sanal Linux cihazı oluşturma veya Sanal linux cihazı Windows oluşturun.

  • Ortamınız için Azure CLI. Azure CLI sürümünüz 2.0.70 veya sonraki bir sürüme sahip olması gerekir. 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ğıtacak modülleri, modüller arasında veri akışını ve modül ikizlerinin istenen özelliklerini açıklayan bir JSON belgesidir. Daha fazla bilgi için bkz. Modül dağıtmayı ve IoT Edge.

Modülleri Azure CLI kullanarak dağıtmak için dağıtım bildirimini yerel olarak bir .txt kaydedin. Yapılandırmayı cihazınıza uygulamak için komutunu çalıştıracak bir sonraki bölümde dosya yolunu kullanın.

Örnek olarak bir modülün yer alan temel dağıtım bildirimi şu şekildedir:

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

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, 1.0.10 IoT Edge sürümüyle birlikte yayınlandı. Modül başlangıç sırası ve yol önceliklendirmesi gibi özellikleri sağlar.

Katmanlı dağıtım

Katmanlı dağıtımlar, birbirinin üzerine yığılmış bir otomatik dağıtım t t t'leridir. Katmanlı dağıtımlar hakkında daha fazla bilgi için bkz. Tek IoT Edge veya uygun ölçekte otomatik dağıtımları anlama.

Katmanlı dağıtımlar, azure CLI ile herhangi bir otomatik dağıtım gibi yalnızca birkaç farklılıkla oluşturulabilir ve yönetilebilir. Katmanlı dağıtım oluşturulduktan sonra Azure CLI, tüm dağıtımlarda olduğu gibi katmanlı dağıtımlar için çalışır. Katmanlı dağıtım oluşturmak için create --layered komutuna bayrağını ekleyin.

İkinci fark, dağıtım bildiriminin yapısıdır. Standart otomatik dağıtım, herhangi bir kullanıcı modülüne ek olarak sistem çalışma zamanı modüllerini de 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 bir cihaz için gerekli bileşenleri sağlamak IoT Edge bir cihazda standart bir otomatik dağıtıma da ihtiyaç vardır.

Örnek olarak tek modülle birlikte temel katmanlı dağıtım bildirimi şu şekildedir:

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

Not

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

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

Önceki örnekte modül için katmanlı dağıtım properties.desired ayarı gösterildi. Bu katmanlı dağıtım, aynı modülün zaten uygulandığı bir cihazı hedeflese, mevcut istenen özelliklerin üzerine yazmalıdır. Üzerine yazmak yerine istenen özellikleri güncelleştirmek için yeni bir alt bölüm tanımlayabilirsiniz. Örneğin:

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

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

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

Not

Şu anda tüm katmanlı dağıtımların geçerli kabul etmek edgeAgent için bir nesnesi içermesi gerekir. Katmanlı dağıtım yalnızca modül özelliklerini güncellese bile boş bir nesne dahil edin. Örneğin: "$edgeAgent":{}. Boş bir nesneyle katmanlı edgeAgent dağıtım, modül ikizini hedef olarak edgeAgent gösterilir, uygulanmaz.

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

  • --layeredbayrağını Azure CLI create komutuna ekleyin.
  • Sistem modüllerini dahil etme.
  • ve altında tam nokta notasyonu $edgeAgent $edgeHub 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şturamadan önce, hangi cihazları etkileyeceğini belirtebilirsiniz. Azure IoT Edge ikizi içinde etiketleri kullanarak cihazları tanımlar.

Her cihazda çözümünüz için anlamlı olacak şekilde tanımladığınız birden çok etiket olabilir. Örneğin, akıllı binalardan bir kampüs yönetirken bir cihaza aşağıdaki etiketleri eklersiniz:

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

Cihaz ikizleri ve etiketleri hakkında daha fazla bilgi için bkz.IoT Hub.

Dağıtım oluşturma

Dağıtım bildirimi ve diğer parametrelerden oluşan bir dağıtım oluşturarak modülleri hedef cihazlarınıza dağıtırsiniz.

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 --layered bayrağıyla aynı komutu kullanın.

Dağıtım için oluştur 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'larında oluşturulacak dağıtımın adı. Dağıtımınız için en fazla 128 küçük harfe sahip benzersiz bir ad girin. Boşluklardan ve şu geçersiz karakterlerden kaçının: & ^ [ ] { } \ | " < > / . Bu parametre zorunludur.
  • --content. Dağıtım bildirimi JSON dosyasının yolu. Bu parametre zorunludur.
  • --hub-name. Dağıtımın oluşturulacak IoT hub'ı adı. Hub geçerli abonelikte yer almalı. komutunu kullanarak geçerli aboneliğinizi az account set -s [subscription name] değiştirme.
  • --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 hedeflen olacağını belirleyen koşul. Koşul, cihaz ikizi etiketlerine veya cihaz ikizi bildirilen özelliklerine göredir ve ifade biçimiyle eşleşmesi gerekir. Örneğin: tags.environment='test' and properties.reported.devicemodel='4000x'.
  • --priority. Pozitif tamsayı. İki veya daha fazla dağıtım aynı cihaza hedefli ise, öncelik için en yüksek sayısal değere sahip dağıtım geçerli olur.
  • --metrics. Bir dağıtımın durumunu edgeHub izlemek için bildirilen özellikleri sorgular. Ö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. Dağıtımları IoT Edge izleme.

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

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

Hedef koşulu güncelleştirin, aşağıdaki güncelleştirmeler gerçekleşir:

  • Bir cihaz eski hedef koşulu karşılamasa ama yeni hedef koşulu karşılarsa ve bu dağıtım o 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şılayamasa, 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şulunu karşılamıyorsa ve diğer dağıtımların hedef koşulunu karşılamıyorsa, cihazda hiçbir değişiklik gerçekleşmez. Cihaz geçerli durumunda mevcut modüllerini çalıştırmaya devam eder, ancak artık bu dağıtımın bir parçası olarak yönetilmez. 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 bir önceliğe sahip aynı cihazları hedefleyen yeni bir dağıtım oluşturun. Hedef koşul, Etiketler, ölçümler ve öncelik dahil olmak üzere var olan bir modülün belirli özelliklerini değiştirebilirsiniz.

Bir 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:

  • --dağıtım kimliği. IoT Hub 'ında bulunan dağıtımın adı.
  • --hub-adı. Dağıtımın bulunduğu IoT Hub 'ının adı. Hub geçerli abonelikte olmalıdır. Komutunu kullanarak istenen aboneliğe geçiş yapın az account set -s [subscription name] .
  • --Ayarla. Dağıtımdaki bir özelliği güncelleştirin. Aşağıdaki özellikleri güncelleştirebilirsiniz:
    • targetCondition (örneğin, targetCondition=tags.location.state='Oregon' )
    • labels
    • priority
  • --Ekle. Dağıtım için hedef koşullar veya Etiketler dahil yeni bir özellik ekleyin.
  • --Kaldır. Hedef koşullar veya Etiketler dahil olmak üzere var olan bir özelliği kaldırın.

Bir dağıtımı silme

Bir dağıtımı sildiğinizde, tüm cihazlar, 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.

Bir 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 deleteKomut aşağıdaki parametreleri alır:

  • --dağıtım kimliği. IoT Hub 'ında bulunan dağıtımın adı.
  • --hub-adı. Dağıtımın bulunduğu IoT Hub 'ının adı. Hub geçerli abonelikte olmalıdır. Komutunu kullanarak istenen aboneliğe geçiş yapın az account set -s [subscription name] .

Sonraki adımlar

IoT Edge cihazlara modül dağıtmahakkında daha fazla bilgi edinin.