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.
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:
- Microsoft.Storage/storageAccounts: Tárolóval rendelkező tárfiók.
- Microsoft.Devices/IotHubs: Egy olyan IoT Hub, amely a tárolóra mutat, és egy útvonallal, amellyel szűrt üzeneteket küldhet az adott végpontnak.
{
"$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.
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.
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
Másolja ki az IoT Hub nevét a kimenetből. Úgy kell formázni, mint
contosoHub{randomidentifier}
Adjon hozzá egy eszközt a központhoz.
az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName}
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.
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átlevel=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
Jelentkezzen be az Azure Portalra , válassza ki az erőforráscsoportot, majd válassza ki a tárfiókot.
Fúrjon le a tárfiókba, amíg nem talál fájlokat.
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.
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.
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.