Megosztás a következőn keresztül:


Rövid útmutató: Azure IoT Hub és tárfiók üzembe helyezése ARM-sablonnal

Ebben a rövid útmutatóban egy Azure Resource Manager-sablont (ARM-sablont) használ egy IoT Hub, egy Azure Storage-fiók és egy útvonal létrehozásához, amellyel üzeneteket küldhet az IoT Hubról a tárolóba. A központ úgy van konfigurálva, hogy a központnak küldött üzenetek automatikusan a tárfiókba legyenek irányítva, ha megfelelnek az útválasztási feltételnek. A rövid útmutató végén megnyithatja a tárfiókot, és megtekintheti az elküldött üzeneteket.

Az Azure Resource Manager-sablon egy JavaScript Object Notation (JSON) fájl, amely meghatározza a projekt infrastruktúráját és konfigurációját. A sablon deklaratív szintaxist használ. Az üzembe helyezés létrehozásához szükséges programozási parancsok sorozatának megírása nélkül írhatja le a tervezett üzembe helyezést.

Ha a környezet megfelel az előfeltételeknek, és már ismeri az ARM-sablonokat, kattintson az Üzembe helyezés az Azure-ban gombra. A sablon megnyílik az Azure Portalon.

Üzembe helyezés az Azure-ban

Előfeltételek

  • Ha nem rendelkezik Azure-előfizetéssel, mindössze néhány perc alatt létrehozhat egy ingyenes Azure-fiókot a virtuális gép létrehozásának megkezdése előtt.

A sablon áttekintése

Az ebben a rövid útmutatóban használt sablont az Azure Gyorsindítási sablonokból hívjuk 101-iothub-auto-route-messages meg.

A sablonban két Azure-erőforrás van definiálva:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.26.54.24096",
      "templateHash": "1111741482289134864"
    }
  },
  "parameters": {
    "projectName": {
      "type": "string",
      "defaultValue": "contoso",
      "minLength": 1,
      "maxLength": 11,
      "metadata": {
        "description": "Define the project name or prefix for all objects."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The datacenter to use for the deployment."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "S1",
      "metadata": {
        "description": "The SKU to use for the IoT Hub."
      }
    },
    "skuUnits": {
      "type": "int",
      "defaultValue": 1,
      "metadata": {
        "description": "The number of IoT Hub units."
      }
    },
    "d2cPartitions": {
      "type": "int",
      "defaultValue": 4,
      "metadata": {
        "description": "Partitions used for the event stream."
      }
    }
  },
  "variables": {
    "iotHubName": "[format('{0}Hub{1}', parameters('projectName'), uniqueString(resourceGroup().id))]",
    "storageAccountName": "[format('{0}{1}', toLower(parameters('projectName')), uniqueString(resourceGroup().id))]",
    "storageEndpoint": "[format('{0}StorageEndpont', parameters('projectName'))]",
    "storageContainerName": "[format('{0}results', toLower(parameters('projectName')))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-01-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {
        "allowBlobPublicAccess": false,
        "minimumTlsVersion": "TLS1_2",
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
      "apiVersion": "2023-01-01",
      "name": "[format('{0}/default/{1}', variables('storageAccountName'), variables('storageContainerName'))]",
      "properties": {
        "publicAccess": "None"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.Devices/IotHubs",
      "apiVersion": "2023-06-30",
      "name": "[variables('iotHubName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuUnits')]"
      },
      "properties": {
        "eventHubEndpoints": {
          "events": {
            "retentionTimeInDays": 1,
            "partitionCount": "[parameters('d2cPartitions')]"
          }
        },
        "routing": {
          "endpoints": {
            "storageContainers": [
              {
                "connectionString": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', variables('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2023-01-01').keys[0].value)]",
                "containerName": "[variables('storageContainerName')]",
                "fileNameFormat": "{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}",
                "batchFrequencyInSeconds": 100,
                "maxChunkSizeInBytes": 104857600,
                "encoding": "JSON",
                "name": "[variables('storageEndpoint')]"
              }
            ]
          },
          "routes": [
            {
              "name": "ContosoStorageRoute",
              "source": "DeviceMessages",
              "condition": "level=\"storage\"",
              "endpointNames": [
                "[variables('storageEndpoint')]"
              ],
              "isEnabled": true
            }
          ],
          "fallbackRoute": {
            "name": "$fallback",
            "source": "DeviceMessages",
            "condition": "true",
            "endpointNames": [
              "events"
            ],
            "isEnabled": true
          }
        },
        "messagingEndpoints": {
          "fileNotifications": {
            "lockDurationAsIso8601": "PT1M",
            "ttlAsIso8601": "PT1H",
            "maxDeliveryCount": 10
          }
        },
        "enableFileUploadNotifications": false,
        "cloudToDevice": {
          "maxDeliveryCount": 10,
          "defaultTtlAsIso8601": "PT1H",
          "feedback": {
            "lockDurationAsIso8601": "PT1M",
            "ttlAsIso8601": "PT1H",
            "maxDeliveryCount": 10
          }
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ]
    }
  ],
  "outputs": {
    "name": {
      "type": "string",
      "value": "[variables('iotHubName')]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Devices/IotHubs', variables('iotHubName'))]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    }
  }
}

A sablon üzembe helyezése

Ez a szakasz az ARM-sablon üzembe helyezésének lépéseit ismerteti.

  • Hozza létre az erőforrásokat az ARM-sablon üzembe helyezésével.

    Üzembe helyezés az Azure-ban

Eszközről felhőbe irányuló üzenetek küldése

Ebben a szakaszban regisztrál egy eszközt az új IoT Hubon, majd üzeneteket küld az eszközről az IoT Hubnak. Az IoT Hubon konfigurált sablon által konfigurált útvonal csak akkor küld üzeneteket a tárolónak, ha azok tartalmazzák az üzenettulajdonságot level=storage. Annak ellenőrzéséhez, hogy ez az útválasztási feltétel a várt módon működik-e, küldünk néhány üzenetet ezzel a tulajdonsággal, és néhányat anélkül.

Tipp.

Ez a rövid útmutató az Azure CLI szimulált eszközét használja a kényelem érdekében. Az eszközről a felhőbe irányuló üzenetek útválasztáshoz használható üzenettulajdonságokkal történő küldéséhez lásd : HubRoutingSample a .NET-hez készült Azure IoT SDK-ban.

  1. Kérje le annak az IoT Hubnak a nevét, amelyet a sablon létrehozott Önnek.

    Ha az előző szakaszban az alapértelmezett parancsokat használta, az erőforrások a ContosoResourceGrp erőforráscsoportban lettek létrehozva. Ha másik erőforráscsoportot használt, frissítse a következő parancsot az egyezéshez.

    az iot hub list --resource-group ContosoResourceGrp --output table
    
  2. Másolja ki az IoT Hub nevét a kimenetből. Úgy kell formázni, mint contosoHub{randomidentifier}

  3. Adjon hozzá egy eszközt a központhoz.

    az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName} 
    
  4. Szimulálja az eszközt, és küldjön eszközről felhőbe irányuló üzeneteket.

    A --data paraméter lehetővé teszi az üzenet törzsének beállítását.

    az iot device simulate \
      --device-id contosoDevice \
      --hub-name {YourIoTHubName} \
      --data "This message won't be routed."
    

    A szimulátor 100 üzenetet küld, majd megszakad. Ebben a rövid útmutatóban nem kell mind a 100-ra várnia.

    Tipp.

    Az Azure CLI nem nyomtatja ki az üzeneteket, miközben elküldi őket. Ha meg szeretné tekinteni az üzeneteket a központ érkezésekor, telepítheti a Visual Studio Code Azure IoT Hub-bővítményét, és használhatja a beépített végpont figyelésére.

  5. Az eszközről a felhőbe irányuló üzenetek küldése a tárolóba irányítandó üzenetek küldéséhez.

    A --properties paraméter lehetővé teszi, hogy üzenet-, alkalmazás- vagy rendszertulajdonságokat adjunk hozzá az alapértelmezett üzenethez. Ebben a rövid útmutatóban az IoT Hub útvonala olyan üzeneteket keres, amelyek tartalmazzák az üzenet tulajdonságát level=storage.

    az iot device simulate \
      --device-id contosoDevice \
      --hub-name {YourIoTHubName} \
      --properties level=storage \
      --data "This message will be routed to storage."
    

Üzembe helyezett erőforrások áttekintése

  1. Jelentkezzen be az Azure Portalra , válassza ki az erőforráscsoportot, majd válassza ki a tárfiókot.

  2. Fúrjon le a tárfiókba, amíg nem talál fájlokat.

    Tekintse meg a tárfiók fájljait

  3. Válassza ki az egyik fájlt, majd válassza a Letöltés lehetőséget, és töltse le a fájlt egy későbbi helyen. A neve numerikus, például 47. Adja hozzá a .txt a végéhez, majd kattintson duplán a fájlra a megnyitásához.

  4. A fájl megnyitásakor minden sor egy másik üzenethez tartozik; az egyes üzenetek törzse is titkosítva van. Ahhoz, hogy lekérdezéseket hajthasson végre az üzenet törzsén.

    Az elküldött üzenetek megtekintése

    Feljegyzés

    Ezek az üzenetek UTF-32-ben és base64-ben vannak kódolva. Ha visszaolvassa az üzenetet, vissza kell kódolnia a base64-ből és az utf-32-ből, hogy ASCII-ként olvashassa. Ha érdekli, az útválasztási oktatóanyag ReadOneRowFromFile metódusával elolvashat egyet az üzenetfájlok egyikéből, és asCII-re kódolhatja. A ReadOneRowFromFile abban az IoT C# SDK-adattárban található, amelyet a rövid útmutatóhoz kibontott. A mappa tetején található elérési út: ./iothub/device/samples/getting started/RoutingTutorial/SimulatedDevice/Program.cs. Állítsa a logikai readTheFile értéket igaz értékre, és kódolja a lemezen lévő fájl elérési útját, és megnyitja és lefordítja a fájl első sorát.

Ebben a rövid útmutatóban üzembe helyezett egy ARM-sablont egy IoT Hub és egy tárfiók létrehozásához, majd futtatott egy programot, amely üzeneteket küld a központnak. Az üzenetek az üzenet tulajdonságaik alapján vannak irányítva, és a tárfiókban vannak tárolva, ahol megtekinthetők.

Az erőforrások eltávolítása

A rövid útmutató során hozzáadott erőforrások eltávolításához jelentkezzen be az Azure Portalra. Válassza az Erőforráscsoportok lehetőséget, majd keresse meg a rövid útmutatóhoz használt erőforráscsoportot. Jelölje ki az erőforráscsoportot, majd válassza a Törlés lehetőséget. A csoport törlésekor a csoport összes erőforrása is.

Következő lépések