Rychlý start: Nasazení centra Azure IoT a účtu úložiště pomocí Bicep
V tomto rychlém startu pomocí Bicep vytvoříte Centrum IoT, účet Azure Storage a trasu pro odesílání zpráv z IoT Hubu 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.
Bicep je jazyk specifický pro doménu (DSL), který k nasazování prostředků Azure používá deklarativní syntaxi. Poskytuje stručnou syntaxi, spolehlivou bezpečnost typů a podporu pro opakované použití kódu. Bicep nabízí nejlepší prostředí pro vytváření obsahu pro řešení infrastruktury jako kódu v Azure.
Požadavky
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Kontrola souboru Bicep
Soubor Bicep použitý v tomto rychlém startu se volá 101-iothub-auto-route-messages
ze šablon Rychlý start Azure.
V souboru Bicep se definují dva prostředky Azure:
- Microsoft.Storage/storageAccounts: Účet úložiště s kontejnerem.
- Microsoft.Devices/IotHubs: IoT Hub s koncovým bodem, který odkazuje na kontejner úložiště a trasu pro odesílání filtrovaných zpráv do daného koncového bodu.
@description('Define the project name or prefix for all objects.')
@minLength(1)
@maxLength(11)
param projectName string = 'contoso'
@description('The datacenter to use for the deployment.')
param location string = resourceGroup().location
@description('The SKU to use for the IoT Hub.')
param skuName string = 'S1'
@description('The number of IoT Hub units.')
param skuUnits int = 1
@description('Partitions used for the event stream.')
param d2cPartitions int = 4
var iotHubName = '${projectName}Hub${uniqueString(resourceGroup().id)}'
var storageAccountName = '${toLower(projectName)}${uniqueString(resourceGroup().id)}'
var storageEndpoint = '${projectName}StorageEndpont'
var storageContainerName = '${toLower(projectName)}results'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
properties: {
allowBlobPublicAccess: false
minimumTlsVersion: 'TLS1_2'
supportsHttpsTrafficOnly: true
}
}
resource container 'Microsoft.Storage/storageAccounts/blobServices/containers@2023-01-01' = {
name: '${storageAccountName}/default/${storageContainerName}'
properties: {
publicAccess: 'None'
}
dependsOn: [
storageAccount
]
}
resource IoTHub 'Microsoft.Devices/IotHubs@2023-06-30' = {
name: iotHubName
location: location
sku: {
name: skuName
capacity: skuUnits
}
properties: {
eventHubEndpoints: {
events: {
retentionTimeInDays: 1
partitionCount: d2cPartitions
}
}
routing: {
endpoints: {
storageContainers: [
{
connectionString: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
containerName: storageContainerName
fileNameFormat: '{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}'
batchFrequencyInSeconds: 100
maxChunkSizeInBytes: 104857600
encoding: 'JSON'
name: storageEndpoint
}
]
}
routes: [
{
name: 'ContosoStorageRoute'
source: 'DeviceMessages'
condition: 'level="storage"'
endpointNames: [
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
}
}
}
}
output name string = IoTHub.name
output resourceId string = IoTHub.id
output resourceGroupName string = resourceGroup().name
output location string = location
Nasazení souboru Bicep
Tato část obsahuje postup nasazení souboru Bicep.
Stáhněte si soubor main.bicep z úložiště Šablony pro rychlý start Azure.
Prostředky vytvoříte nasazením souboru Bicep pomocí Azure CLI.
az group create --name ContosoResourceGrp --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep
Dokončení nasazení trvá několik minut. Po dokončení nasazení by se měl zobrazit výstup s podrobnostmi o nasazených prostředcích.
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 soubor Bicep nakonfigurovaný v Centru IoT odesílá zprávy pouze do úložiště, pokud obsahují vlastnost level=storage
zprá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.
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
Zkopírujte název centra IoT z výstupu. Měla by být naformátovaná takto:
contosoHub{randomidentifier}
Přidejte zařízení do centra.
az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName}
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.
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í vlastnostlevel=storage
zprávy .az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --properties level=storage \ --data "This message will be routed to storage."
Kontrola směrovaných zpráv
Přihlaste se k webu Azure Portal a vyberte skupinu prostředků a pak vyberte účet úložiště.
Přejděte k podrobnostem účtu úložiště, dokud nenajdete soubory.
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.
Když soubor otevřete, každý řádek je určený pro jinou zprávu. Text každé zprávy je také zašifrovaný. Aby bylo možné provádět dotazy na text zprávy, musí být v pořádku.
Poznámka:
Tyto zprávy jsou kódovány v kódování UTF-8 a base64. Pokud zprávu přečtete zpět, musíte ji dekódovat z base64 a utf-8, 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/how to guides/HubRoutingSample/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 soubor Bicep, abyste vytvořili Centrum IoT a účet úložiště a pak spustili 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 už prostředky, které jste vytvořili, nepotřebujete, odstraňte skupinu prostředků.
az group delete --name exampleRG