Uw modules op IoT Edge schalen implementeren en bewaken met behulp van de Azure CLI

Van toepassing op:  Ja pictogram IoT Edge 1,1  ja pictogram IOT Edge 1,2

Maak een Azure IoT Edge automatische implementatie met behulp van de Azure-opdrachtregelinterface om lopende implementaties voor veel apparaten tegelijk te beheren. Automatische implementaties voor IoT Edge maken deel uit van de functie voor automatisch apparaatbeheer van Azure IoT Hub. Implementaties zijn dynamische processen waarmee u meerdere modules op meerdere apparaten kunt implementeren, de status en status van de modules kunt bijhouden en indien nodig wijzigingen kunt aanbrengen.

In dit artikel gaat u de Azure CLI en de IoT-extensie instellen. Vervolgens leert u hoe u modules implementeert op een set IoT Edge apparaten en de voortgang bewaakt met behulp van de beschikbare CLI-opdrachten.

Vereisten

  • Een IoT-hub in uw Azure-abonnement.

  • Een of meer IoT Edge apparaten.

    Als u nog geen apparaat IoT Edge ingesteld, kunt u er een maken op een virtuele Azure-machine. Volg de stappen in een van deze quickstart-artikelen: Een virtueel Linux-apparaat maken of Een virtueel linux-Windows maken.

  • De Azure CLI in uw omgeving. Uw Azure CLI-versie moet 2.0.70 of hoger zijn. Gebruik az --version om de versie te valideren. In deze versie worden az-extensie-opdrachten ondersteund en is voor het eerst het Knack-opdrachtframework opgenomen.

  • De IoT-extensie voor Azure CLI.

Een implementatiemanifest configureren

Een implementatiemanifest is een JSON-document dat beschrijft welke modules moeten worden geïmplementeerd, hoe gegevens tussen de modules stromen en gewenste eigenschappen van de module-tweelingen. Zie Meer informatie over het implementeren van modules en het maken van routes in IoT Edge.

Als u modules wilt implementeren met behulp van de Azure CLI, moet u het implementatiemanifest lokaal opslaan als .txt bestand. U gebruikt het bestandspad in de volgende sectie bij het uitvoeren van de opdracht om de configuratie toe te passen op uw apparaat.

Hier is een basisimplementatiemanifest met één module als voorbeeld:

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

Notitie

In dit voorbeeldimplementatiemanifest wordt schemaversie 1.1 gebruikt voor de IoT Edge agent en hub. Schemaversie 1.1 is uitgebracht samen met IoT Edge versie 1.0.10. Hiermee worden functies zoals opstartorder van modules en routeprioriteit mogelijk.

Gelaagde implementatie

Gelaagde implementaties zijn een type automatische implementatie dat op elkaar kan worden gestapeld. Zie Understand IoT Edge automatic deployments for single devices or at scale (Meer informatie IoT Edge automatische implementaties voor individuele apparaten of op schaal) voor meer informatie over gelaagde implementaties.

Gelaagde implementaties kunnen net als bij elke automatische implementatie worden gemaakt en beheerd met de Azure CLI, met slechts enkele verschillen. Nadat een gelaagde implementatie is gemaakt, werkt de Azure CLI voor gelaagde implementaties op dezelfde manier als voor elke implementatie. Als u een gelaagde implementatie wilt maken, voegt u de --layered vlag toe aan de opdracht create.

Het tweede verschil zit in de constructie van het implementatiemanifest. Waar standaard automatische implementatie naast gebruikersmodules ook de systeemruntimemodules moet bevatten, kunnen gelaagde implementaties alleen gebruikersmodules bevatten. Gelaagde implementaties hebben ook een standaard automatische implementatie op een apparaat nodig om de vereiste onderdelen van elk IoT Edge te leveren, zoals de systeemruntimemodules.

Hier is een eenvoudig gelaagd implementatiemanifest met één module als voorbeeld:

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

Notitie

Dit gelaagde implementatiemanifest heeft een iets andere indeling dan een standaardimplementatiemanifest. De gewenste eigenschappen van de runtimemodules worden samengevouwen en maken gebruik van een punt-notatie. Deze opmaak is vereist om de Azure Portal een gelaagde implementatie te herkennen. Bijvoorbeeld:

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

In het vorige voorbeeld werd de gelaagde implementatie-instelling properties.desired voor een module getoond. Als deze gelaagde implementatie is gericht op een apparaat waarop dezelfde module al is toegepast, worden alle bestaande gewenste eigenschappen overschreven. Als u de gewenste eigenschappen wilt bijwerken in plaats van ze te overschrijven, kunt u een nieuwe subsectie definiëren. Bijvoorbeeld:

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

Hetzelfde kan ook worden uitgedrukt met:

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

Notitie

Op dit moment moeten alle gelaagde implementaties een edgeAgent object bevatten dat als geldig moet worden beschouwd. Zelfs als bij een gelaagde implementatie alleen module-eigenschappen worden bijgewerkt, moet u een leeg object opnemen. Bijvoorbeeld: "$edgeAgent":{}. Een gelaagde implementatie met een leeg object wordt weergegeven als doel edgeAgent in de module edgeAgent dubbel, niet toegepast.

Samengevat: als u een gelaagde implementatie wilt maken:

  • Voeg de --layered vlag toe aan de Azure CLI-opdracht maken.
  • Neem geen systeemmodules op.
  • Gebruik de volledige punt-notatie onder $edgeAgent en $edgeHub .

Zie Gelaagde implementatie voor meer informatie over het configureren van module-tweelingen in gelaagde implementaties.

Apparaten identificeren met behulp van tags

Voordat u een implementatie kunt maken, moet u kunnen opgeven welke apparaten u wilt beïnvloeden. Azure IoT Edge identificeert apparaten met behulp van tags in de apparaat dubbel.

Elk apparaat kan meerdere tags hebben die u definieert op een manier die zinvol is voor uw oplossing. Als u bijvoorbeeld een campus met slimme gebouwen beheert, kunt u de volgende tags toevoegen aan een apparaat:

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

Zie Apparaattweeling begrijpen en gebruiken in IoT Hub voor meer informatie over apparaattweeling IoT Hub.

Een implementatie maken

U implementeert modules op uw doelapparaten door een implementatie te maken die bestaat uit het implementatiemanifest en andere parameters.

Gebruik de opdracht az iot edge deployment create om een implementatie te maken:

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

Gebruik dezelfde opdracht met de vlag --layered om een gelaagde implementatie te maken.

De opdracht create voor implementatie heeft de volgende parameters:

  • --layered. Een optionele vlag om de implementatie te identificeren als een gelaagde implementatie.
  • --deployment-id. De naam van de implementatie die wordt gemaakt in de IoT-hub. Geef uw implementatie een unieke naam van maximaal 128 kleine letters. Vermijd spaties en de volgende ongeldige tekens: & ^ [ ] { } \ | " < > / . Deze parameter is vereist.
  • --content. Bestandspad naar de JSON van het implementatiemanifest. Deze parameter is vereist.
  • --hub-name. Naam van de IoT-hub waarin de implementatie wordt gemaakt. De hub moet in het huidige abonnement zijn. Wijzig uw huidige abonnement met behulp van de az account set -s [subscription name] opdracht .
  • --labels. Naam-waardeparen die beschrijven en u helpen uw implementaties bij te houden. Labels gebruiken JSON-opmaak voor de namen en waarden. Bijvoorbeeld: {"HostPlatform":"Linux", "Version:"3.0.1"}.
  • --target-condition. De voorwaarde die bepaalt op welke apparaten deze implementatie wordt gericht. De voorwaarde is gebaseerd op apparaattweetags of gerapporteerde eigenschappen van apparaattwee en moet overeenkomen met de expressie-indeling. Bijvoorbeeld: tags.environment='test' and properties.reported.devicemodel='4000x'.
  • --priority. Een positief geheel getal. Als twee of meer implementaties op hetzelfde apparaat zijn gericht, is de implementatie met de hoogste numerieke waarde voor prioriteit van toepassing.
  • --metrics. Metrische gegevens die een query edgeHub uitvoeren op de gerapporteerde eigenschappen om de status van een implementatie bij te houden. Metrische gegevens nemen JSON-invoer of een bestandspad. Bijvoorbeeld: '{"queries": {"mymetric": "SELECT deviceId FROM devices WHERE properties.reported.lastDesiredStatus.code = 200"}}'.

Zie Monitor IoT Edge deployments (Implementaties bewaken) als u een implementatie wilt bewaken met behulp IoT Edge Azure CLI.

Een implementatie wijzigen

Wanneer u een implementatie wijzigt, worden de wijzigingen onmiddellijk gerepliceerd naar alle doelapparaten.

Als u de doelvoorwaarde bij werkt, worden de volgende updates uitgevoerd:

  • Als een apparaat niet voldoet aan de oude doelvoorwaarde, maar voldoet aan de nieuwe doelvoorwaarde en deze implementatie de hoogste prioriteit heeft voor dat apparaat, wordt deze implementatie toegepast op het apparaat.
  • Als een apparaat met deze implementatie momenteel niet meer voldoet aan de doelvoorwaarde, wordt deze implementatie verwijderd en wordt de implementatie met de volgende prioriteit uitgevoerd.
  • Als een apparaat met deze implementatie niet langer voldoet aan de doelvoorwaarde en niet voldoet aan de doelvoorwaarde van andere implementaties, vindt er geen wijziging plaats op het apparaat. Het apparaat blijft de huidige modules uitvoeren in hun huidige status, maar wordt niet meer beheerd als onderdeel van deze implementatie. Nadat het apparaat voldoet aan de doelvoorwaarde van een andere implementatie, wordt deze implementatie verwijderd en wordt de nieuwe implementatie gebruikt.

U kunt de inhoud van een implementatie niet bijwerken, waaronder de modules en routes die zijn gedefinieerd in het implementatiemanifest. Als u de inhoud van een implementatie wilt bijwerken, maakt u een nieuwe implementatie die gericht is op dezelfde apparaten met een hogere prioriteit. U kunt bepaalde eigenschappen van een bestaande module wijzigen, waaronder de doelvoorwaarde, labels, metrische gegevens en prioriteit.

Gebruik de opdracht az iot edge deployment update om een implementatie bij te werken:

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

De opdracht voor het bijwerken van de implementatie heeft de volgende parameters:

  • --deployment-id. De naam van de implementatie die in de IoT-hub bestaat.
  • --hub-name. De naam van de IoT-hub waarin de implementatie bestaat. De hub moet zich in het huidige abonnement. Schakel over naar het gewenste abonnement met behulp van de opdracht az account set -s [subscription name] .
  • --set. Werk een eigenschap in de implementatie bij. U kunt de volgende eigenschappen bijwerken:
    • targetCondition (bijvoorbeeld targetCondition=tags.location.state='Oregon' )
    • labels
    • priority
  • --add. Voeg een nieuwe eigenschap toe aan de implementatie, inclusief doelvoorwaarden of labels.
  • --remove. Verwijder een bestaande eigenschap, inclusief doelvoorwaarden of labels.

Een implementatie verwijderen

Wanneer u een implementatie verwijdert, krijgen alle apparaten de implementatie met de hoogste prioriteit. Als uw apparaten niet voldoen aan de doelvoorwaarde van een andere implementatie, worden de modules niet verwijderd wanneer de implementatie wordt verwijderd.

Gebruik de opdracht az iot edge deployment delete om een implementatie te verwijderen:

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

De deployment delete opdracht heeft de volgende parameters:

  • --deployment-id. De naam van de implementatie die in de IoT-hub bestaat.
  • --hub-name. De naam van de IoT-hub waarin de implementatie bestaat. De hub moet zich in het huidige abonnement. Schakel over naar het gewenste abonnement met behulp van de opdracht az account set -s [subscription name] .

Volgende stappen

Meer informatie over het implementeren van modules op IoT Edge apparaten.