Sdílet prostřednictvím


Rychlý start: Nasazení centra Azure IoT a účtu úložiště pomocí šablony ARM

V tomto rychlém startu použijete šablonu Azure Resource Manageru (šablonu ARM) k vytvoření centra IoT, účtu služby Azure Storage a trasy pro odesílání zpráv ze služby IoT Hub do úložiště. Centrum je nakonfigurované tak, aby se zprávy odeslané do centra automaticky směrovaly do účtu úložiště, pokud splňují podmínku směrování. Na konci tohoto rychlého startu můžete otevřít účet úložiště a zobrazit odeslané zprávy.

Šablona Azure Resource Manageru je soubor JSON (JavaScript Object Notation), který definuje infrastrukturu a konfiguraci projektu. Tato šablona používá deklarativní syntaxi. Popíšete zamýšlené nasazení, aniž byste museli psát posloupnost programovacích příkazů pro vytvoření nasazení.

Pokud vaše prostředí splňuje požadavky a jste obeznámeni s používáním šablon ARM, vyberte tlačítko Nasazení do Azure. Šablona se otevře na webu Azure Portal.

Nasadit do Azure

Požadavky

Kontrola šablony

Šablona použitá v tomto rychlém startu se volá 101-iothub-auto-route-messages ze šablon Rychlého startu Azure.

V šabloně jsou definované dva prostředky Azure:

{
  "$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')]"
    }
  }
}

Nasazení šablony

Tato část obsahuje postup nasazení šablony ARM.

  • Prostředky vytvoříte nasazením šablony ARM.

    Nasadit do Azure

Odesílání zpráv ze zařízení do cloudu

V této části zaregistrujete zařízení v novém centru IoT a pak odešlete zprávy z tohoto zařízení do IoT Hubu. Trasa, kterou šablona nakonfigurovaná v Centru IoT odesílá zprávy pouze do úložiště, pokud obsahují vlastnost level=storagezprávy . Abychom mohli otestovat, že tato podmínka směrování funguje podle očekávání, pošleme některé zprávy s touto vlastností a některými bez nich.

Tip

V tomto rychlém startu se simulované zařízení Azure CLI používá k usnadnění. Příklad kódu odesílání zpráv typu zařízení-cloud s vlastnostmi zpráv pro směrování najdete v tématu HubRoutingSample v sadě Azure IoT SDK pro .NET.

  1. Načtěte název centra IoT, který pro vás šablona vytvořila.

    Pokud jste použili výchozí příkazy v předchozí části, vaše prostředky byly vytvořeny ve skupině prostředků ContosoResourceGrp . Pokud jste použili jinou skupinu prostředků, aktualizujte následující příkaz tak, aby odpovídal.

    az iot hub list --resource-group ContosoResourceGrp --output table
    
  2. Zkopírujte název centra IoT z výstupu. Měla by být naformátovaná takto: contosoHub{randomidentifier}

  3. Přidejte zařízení do centra.

    az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName} 
    
  4. Simulujte zařízení a odesílejte zprávy typu zařízení-cloud.

    Parametr --data nám umožňuje nastavit text zprávy.

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

    Simulátor odešle 100 zpráv a pak se odpojí. Pro účely tohoto rychlého startu nemusíte čekat na všech 100.

    Tip

    Azure CLI netiskne zprávy při jejich odesílání. Pokud chcete sledovat zprávy při příchodu do centra, můžete nainstalovat rozšíření Azure IoT Hub pro Visual Studio Code a použít ho k monitorování integrovaného koncového bodu.

  5. Odesílání zpráv typu zařízení-cloud, které se mají směrovat do úložiště

    Tento --properties parametr nám umožňuje přidat do výchozí zprávy vlastnosti zprávy, aplikace nebo systému. V tomto rychlém startu trasa v centru IoT hledá zprávy, které obsahují vlastnost level=storagezprávy .

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

Kontrola nasazených prostředků

  1. Přihlaste se k webu Azure Portal a vyberte skupinu prostředků a pak vyberte účet úložiště.

  2. Přejděte k podrobnostem účtu úložiště, dokud nenajdete soubory.

    Podívejte se na soubory účtu úložiště.

  3. Vyberte jeden ze souborů a vyberte Stáhnout a stáhnout soubor do umístění, které najdete později. Má název, který je číselný, například 47. Přidejte .txt na konec a poklikáním otevřete soubor.

  4. Při otevření souboru je každý řádek pro jinou zprávu; text každé zprávy je také zašifrován. Aby bylo možné provádět dotazy na text zprávy, musí být v pořádku.

    Zobrazení odeslaných zpráv

    Poznámka:

    Tyto zprávy jsou kódovány v kódování UTF-32 a base64. Pokud zprávu přečtete zpátky, musíte ji dekódovat z base64 a utf-32, abyste ji mohli číst jako ASCII. Pokud vás zajímá, můžete metodu ReadOneRowFromFile v kurzu směrování přečíst pro jeden z těchto souborů zpráv a dekódovat ji do ASCII. ReadOneRowFromFile je v úložišti sady IoT C# SDK, které jste pro účely tohoto rychlého startu rozbalí. Tady je cesta z horní části této složky: ./iothub/device/samples/getting started/RoutingTutorial/SimulatedDevice/Program.cs. Nastavte logickou hodnotu readTheFile na true a pevně zakódujte cestu k souboru na disku a otevře se a přeloží první řádek v souboru.

V tomto rychlém startu jste nasadili šablonu ARM, která vytvoří Centrum IoT a účet úložiště, a pak spustíte program pro odesílání zpráv do centra. Zprávy se směrují na základě jejich vlastností zprávy a ukládají se do účtu úložiště, kde se dají zobrazit.

Vyčištění prostředků

Pokud chcete odebrat prostředky přidané během tohoto rychlého startu, přihlaste se k webu Azure Portal. Vyberte Skupiny prostředků a pak vyhledejte skupinu prostředků, kterou jste použili pro účely tohoto rychlého startu. Vyberte skupinu prostředků a pak vyberte Odstranit. Po odstranění skupiny jsou všechny prostředky ve skupině.

Další kroky