Mulai cepat: Menyebarkan hub Azure IoT dan akun penyimpanan menggunakan templat ARM
Dalam mulai cepat ini, Anda menggunakan templat Azure Resource Manager (templat ARM) untuk membuat hub IoT, akun Azure Storage, dan rute untuk mengirim pesan dari hub IoT ke penyimpanan. Hub dikonfigurasi sehingga pesan yang dikirim ke hub secara otomatis dirutekan ke akun penyimpanan jika memenuhi kondisi perutean. Di akhir mulai cepat ini, Anda dapat membuka akun penyimpanan dan melihat pesan yang dikirim.
Templat Azure Resource Manager adalah file JavaScript Object Notation (JSON) yang menentukan infrastruktur dan konfigurasi untuk proyek Anda. Template tersebut menggunakan sintaksis deklaratif. Anda menjelaskan penyebaran yang Dimaksudkan tanpa menulis urutan perintah pemrograman untuk membuat penyebaran.
Jika lingkungan Anda telah memenuhi prasyarat dan Anda terbiasa menggunakan templat ARM, pilih tombol Sebarkan ke Azure. Templat terbuka di portal Azure.
Prasyarat
- Jika tidak memiliki langganan Azure, buat akun Azure gratis sebelum Anda memulai.
Meninjau templat
Templat yang digunakan dalam mulai cepat ini disebut 101-iothub-auto-route-messages
dari Templat Mulai Cepat Azure.
Dua sumber daya Azure yang ditentukan dalam templat:
- Microsoft.Storage/storageAccounts: Akun penyimpanan dengan kontainer.
- Microsoft.Devices/IotHubs: Hub IoT dengan titik akhir yang menunjuk ke kontainer penyimpanan dan rute untuk mengirim pesan yang difilter ke titik akhir tersebut.
{
"$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')]"
}
}
}
Menyebarkan templat
Bagian ini menyediakan langkah-langkah untuk menyebarkan templat ARM.
Mengirim pesan perangkat ke cloud
Di bagian ini, Anda mendaftarkan perangkat di hub IoT baru Anda lalu mengirim pesan dari perangkat tersebut ke IoT Hub. Rute yang dikonfigurasi templat di hub IoT hanya mengirim pesan ke penyimpanan jika berisi properti level=storage
pesan . Untuk menguji bahwa kondisi perutean ini berfungsi seperti yang diharapkan, kami akan mengirim beberapa pesan dengan properti tersebut dan beberapa tanpa.
Tip
Mulai cepat ini menggunakan perangkat simulasi Azure CLI untuk kenyamanan. Untuk contoh kode pengiriman pesan perangkat-ke-cloud dengan properti pesan untuk perutean, lihat HubRoutingSample di Azure IoT SDK untuk .NET.
Ambil nama hub IoT yang dibuat templat untuk Anda.
Jika Anda menggunakan perintah default di bagian sebelumnya, sumber daya Anda dibuat di grup sumber daya ContosoResourceGrp . Jika Anda menggunakan grup sumber daya yang berbeda, perbarui perintah berikut agar cocok.
az iot hub list --resource-group ContosoResourceGrp --output table
Salin nama hub IoT Anda dari output. Ini harus diformat seperti
contosoHub{randomidentifier}
Tambahkan perangkat ke hub.
az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName}
Simulasikan perangkat dan kirim pesan perangkat ke cloud.
Parameter
--data
memungkinkan kita mengatur isi pesan.az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --data "This message won't be routed."
Simulator mengirimkan 100 pesan dan kemudian terputus. Anda tidak perlu menunggu semua 100 untuk tujuan mulai cepat ini.
Tip
Azure CLI tidak akan mencetak pesan saat mengirimnya. Jika Anda ingin menonton pesan saat tiba di hub, Anda dapat menginstal ekstensi Azure IoT Hub untuk Visual Studio Code dan menggunakannya untuk memantau titik akhir bawaan.
Kirim pesan perangkat ke cloud untuk dirutekan ke penyimpanan.
Parameter
--properties
memungkinkan kami menambahkan properti pesan, aplikasi, atau sistem ke pesan default. Untuk mulai cepat ini, rute di hub IoT Anda mencari pesan yang berisi propertilevel=storage
pesan .az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --properties level=storage \ --data "This message will be routed to storage."
Meninjau sumber daya yang disebarkan
Masuk ke portal Azure dan pilih Grup Sumber Daya, lalu pilih akun penyimpanan.
Telusuri paling detail ke akun penyimpanan hingga Anda menemukan file.
Pilih salah satu file dan pilih Unduh dan unduh file ke lokasi yang dapat Anda temukan nanti. Ini memiliki nama yang numerik, seperti 47. Tambahkan .txt di bagian akhir, lalu klik dua kali pada file untuk membukanya.
Saat Anda membuka file, setiap baris adalah untuk pesan yang berbeda; isi setiap pesan juga dienkripsi. Hal ini harus dilakukan agar Anda dapat melakukan kueri terhadap isi pesan.
Catatan
Pesan-pesan ini dikodekan dalam UTF-32 dan base64. Jika membaca kembali pesan tersebut, Anda harus mendekodenya dari base64 dan utf-32 untuk membacanya sebagai ASCII. Jika tertarik, Anda dapat menggunakan metode ReadOneRowFromFile dalam Tutorial Perutean untuk membaca satu dari salah satu file pesan ini dan mendekodekannya ke ASCII. ReadOneRowFromFile berada di repositori IoT C# SDK yang Anda buka zipnya untuk mulai cepat ini. Berikut adalah jalur dari bagian atas folder tersebut: ./iothub/device/samples/getting started/RoutingTutorial/SimulatedDevice/Program.cs. Atur boolean
readTheFile
ke true, dan hardcode jalur ke file pada disk, dan itu akan membuka dan menerjemahkan baris pertama dalam file.
Dalam mulai cepat ini, Anda menyebarkan templat ARM untuk membuat hub IoT dan akun penyimpanan, lalu menjalankan program untuk mengirim pesan ke hub. Pesan dirutekan berdasarkan properti pesan mereka dan disimpan di akun penyimpanan tempat pesan dapat dilihat.
Membersihkan sumber daya
Untuk menghapus sumber daya yang ditambahkan selama mulai cepat ini, masuk ke portal Azure. Pilih Grup Sumber Daya, lalu temukan grup sumber daya yang Anda gunakan untuk mulai cepat ini. Pilih grup sumber daya lalu pilih Hapus. Saat grup dihapus, semua sumber daya dalam grup juga akan dihapus.