Szybki start: wdrażanie centrum Azure IoT i konta magazynu przy użyciu Bicep
W tym przewodniku Szybki start utworzysz centrum IoT Hub, konto usługi Azure Storage i trasę do wysyłania komunikatów z centrum IoT do magazynu. Koncentrator jest skonfigurowany, aby komunikaty wysyłane do centrum były automatycznie kierowane do konta magazynu, jeśli spełniają warunek routingu. Na końcu tego przewodnika Szybki start możesz otworzyć konto magazynu i zobaczyć wysłane komunikaty.
Bicep to język specyficzny dla domeny (DSL), który używa składni deklaratywnej do wdrażania zasobów platformy Azure. Zapewnia zwięzłą składnię, niezawodne bezpieczeństwo typów i obsługę ponownego użycia kodu. Bicep oferuje najlepsze środowisko tworzenia rozwiązań infrastruktury jako kodu na platformie Azure.
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Przejrzyj plik Bicep
Plik Bicep używany w tym przewodniku Szybki start jest wywoływany 101-iothub-auto-route-messages
z szablonów szybkiego startu platformy Azure.
Dwa zasoby platformy Azure są zdefiniowane w pliku Bicep:
- Microsoft.Storage/storageAccounts: konto magazynu z kontenerem.
- Microsoft.Devices/IotHubs: centrum IoT z punktem końcowym wskazującym kontener magazynu i trasą do wysyłania filtrowanych komunikatów do tego punktu końcowego.
@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
Wdrażanie pliku Bicep
Ta sekcja zawiera kroki wdrażania pliku Bicep.
Pobierz plik main.bicep z repozytorium Szablony szybkiego startu platformy Azure.
Utwórz zasoby, wdrażając plik Bicep przy użyciu interfejsu wiersza polecenia platformy Azure.
az group create --name ContosoResourceGrp --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep
Przeprowadzenie wdrożenia zajmuje kilka minut. Po zakończeniu wdrażania powinny zostać wyświetlone dane wyjściowe zawierające szczegóły wdrożonych zasobów.
Wysyłanie komunikatów z urządzenia do chmury
W tej sekcji zarejestrujesz urządzenie w nowym centrum IoT, a następnie wyślesz komunikaty z tego urządzenia do usługi IoT Hub. Trasa skonfigurowana przez plik Bicep w centrum IoT hub wysyła komunikaty tylko do magazynu, jeśli zawierają właściwość level=storage
komunikatu . Aby przetestować, czy ten warunek routingu działa zgodnie z oczekiwaniami, wyślemy kilka komunikatów z tą właściwością i niektóre bez.
Napiwek
Ten przewodnik Szybki start używa symulowanego urządzenia interfejsu wiersza polecenia platformy Azure dla wygody. Aby zapoznać się z przykładem kodu wysyłania komunikatów z urządzenia do chmury z właściwościami komunikatów na potrzeby routingu, zobacz HubRoutingSample w zestawie SDK usługi Azure IoT dla platformy .NET.
Pobierz nazwę centrum IoT hub utworzonego dla Ciebie szablonu.
Jeśli w poprzedniej sekcji użyto poleceń domyślnych, zasoby zostały utworzone w grupie zasobów ContosoResourceGrp . Jeśli użyto innej grupy zasobów, zaktualizuj następujące polecenie, aby było zgodne.
az iot hub list --resource-group ContosoResourceGrp --output table
Skopiuj nazwę centrum IoT Hub z danych wyjściowych. Powinien być sformatowany tak, jak
contosoHub{randomidentifier}
Dodaj urządzenie do centrum.
az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName}
Symulowanie urządzenia i wysyłanie komunikatów z urządzenia do chmury.
Parametr
--data
pozwala nam ustawić treść komunikatu.az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --data "This message won't be routed."
Symulator wysyła 100 komunikatów, a następnie rozłącza się. Nie musisz czekać na wszystkie 100 na potrzeby tego przewodnika Szybki start.
Napiwek
Interfejs wiersza polecenia platformy Azure nie będzie drukować komunikatów podczas ich wysyłania. Jeśli chcesz oglądać komunikaty po nadejściu do centrum, możesz zainstalować rozszerzenie usługi Azure IoT Hub dla programu Visual Studio Code i użyć go do monitorowania wbudowanego punktu końcowego.
Wysyłanie komunikatów z urządzenia do chmury, które mają być kierowane do magazynu.
Parametr
--properties
umożliwia dodawanie właściwości komunikatu, aplikacji lub systemu do komunikatu domyślnego. Na potrzeby tego przewodnika Szybki start trasa w centrum IoT szuka komunikatów zawierających właściwośćlevel=storage
komunikatu .az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --properties level=storage \ --data "This message will be routed to storage."
Przeglądanie komunikatów kierowanych
Zaloguj się do witryny Azure Portal i wybierz grupę zasobów, a następnie wybierz konto magazynu.
Przejdź do szczegółów konta magazynu, dopóki nie znajdziesz plików.
Wybierz jeden z plików i wybierz pozycję Pobierz i pobierz plik do lokalizacji, którą możesz znaleźć później. Ma ona nazwę liczbową, na przykład 47. Dodaj .txt na końcu, a następnie kliknij dwukrotnie plik, aby go otworzyć.
Po otwarciu pliku każdy wiersz jest przeznaczony dla innego komunikatu. Treść każdej wiadomości jest również szyfrowana. Aby można było wykonywać zapytania względem treści komunikatu, musi to być konieczne.
Uwaga
Te komunikaty są kodowane w formacie UTF-8 i base64. Jeśli odczytujesz komunikat z powrotem, musisz zdekodować go z base64 i utf-8, aby odczytać go jako ASCII. Jeśli cię interesuje, możesz użyć metody ReadOneRowFromFile w samouczku routingu, aby odczytać go z jednego z tych plików wiadomości i zdekodować go do ASCII. ReadOneRowFromFile znajduje się w repozytorium zestawu SDK języka C# IoT, które zostało rozpakowane na potrzeby tego przewodnika Szybki start. Oto ścieżka z góry tego folderu: ./iothub/device/samples/how to guides/HubRoutingSample/Program.cs Ustaw wartość logiczną
readTheFile
na true i zakoduj ścieżkę do pliku na dysku i otworzy i przetłumacze pierwszy wiersz w pliku.
W tym przewodniku Szybki start wdrożono plik Bicep, aby utworzyć centrum IoT i konto magazynu, a następnie uruchomić program do wysyłania komunikatów do centrum. Komunikaty są kierowane na podstawie ich właściwości komunikatów i przechowywane na koncie magazynu, na którym można je wyświetlić.
Czyszczenie zasobów
Gdy nie potrzebujesz już utworzonych zasobów, usuń grupę zasobów.
az group delete --name exampleRG