Hızlı Başlangıç: Bicep kullanarak Azure IoT hub'ı ve depolama hesabı dağıtma
Bu hızlı başlangıçta Bicep kullanarak ioT hub'ı, Azure Depolama hesabı ve IoT hub'ından depolamaya ileti gönderme yolu oluşturacaksınız. Hub yapılandırıldığından, hub'a gönderilen iletiler yönlendirme koşuluna uygunsa depolama hesabına otomatik olarak yönlendirilir. Bu hızlı başlangıcın sonunda depolama hesabını açabilir ve gönderilen iletileri görebilirsiniz.
Bicep, Azure kaynaklarını dağıtmak için bildirim temelli söz dizimi kullanan, etki alanına özgü bir dildir (DSL). Kısa sözdizimi, güvenilir tür güvenliği ve kod yeniden kullanımı için destek sağlar. Bicep, Azure'daki kod olarak altyapı çözümleriniz için en iyi yazma deneyimini sunar.
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir Azure hesabı oluşturun.
Bicep dosyasını gözden geçirme
Bu hızlı başlangıçta kullanılan Bicep dosyası Azure Hızlı Başlangıç Şablonları'ndan çağrılır101-iothub-auto-route-messages
.
Bicep dosyasında iki Azure kaynağı tanımlanır:
- Microsoft.Storage/storageAccounts: Kapsayıcısı olan bir depolama hesabı.
- Microsoft.Devices/IotHubs: Depolama kapsayıcısını işaret eden bir uç noktaya ve bu uç noktaya filtrelenmiş iletiler göndermeye yönelik bir yola sahip bir IoT hub'ı.
@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
Bicep dosyasını dağıtma
Bu bölümde Bicep dosyasını dağıtma adımları sağlanır.
Azure Hızlı Başlangıç Şablonları deposundan main.bicep dosyasını indirin.
Azure CLI kullanarak Bicep dosyasını dağıtarak kaynakları oluşturun.
az group create --name ContosoResourceGrp --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep
Dağıtımın tamamlanması birkaç dakika sürer. Dağıtım tamamlandığında, dağıtılan kaynakların ayrıntılarını içeren bir çıktı görmeniz gerekir.
Cihazdan buluta ileti gönderme
Bu bölümde, yeni IoT hub'ınıza bir cihaz kaydedip bu cihazdan IoT Hub'a ileti göndereceksiniz. Bicep dosyasının IoT hub'ında yapılandırıldığı yol yalnızca ileti özelliğini level=storage
içeriyorsa depolama alanına ileti gönderir. Bu yönlendirme koşulun beklendiği gibi çalışıp çalışmadığını test etmek için, bu özelliğe sahip bazı iletiler ve bazıları olmadan gönderilir.
İpucu
Bu hızlı başlangıçta kolaylık sağlamak için Azure CLI simülasyon cihazı kullanılmaktadır. Yönlendirme için ileti özellikleriyle cihazdan buluta ileti göndermeye yönelik bir kod örneği için bkz . .NET için Azure IoT SDK'sında HubRoutingSample .
Şablonun sizin için oluşturduğu IoT hub'ının adını alın.
Önceki bölümde varsayılan komutları kullandıysanız kaynaklarınız ContosoResourceGrp kaynak grubunda oluşturulmuştur. Farklı bir kaynak grubu kullandıysanız, aşağıdaki komutu eşleşecek şekilde güncelleştirin.
az iot hub list --resource-group ContosoResourceGrp --output table
Çıktıdan IoT hub'ınızın adını kopyalayın. Şu şekilde biçimlendirilmelidir:
contosoHub{randomidentifier}
Hub'a bir cihaz ekleyin.
az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName}
Cihazın simülasyonunu yapın ve cihazdan buluta iletiler gönderin.
parametresi,
--data
ileti gövdesini ayarlamamıza olanak tanır.az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --data "This message won't be routed."
Simülatör 100 ileti gönderir ve ardından bağlantıyı keser. Bu hızlı başlangıcın amaçları doğrultusunda 100'ün tamamını beklemeniz gerekmez.
İpucu
Azure CLI, iletileri gönderirken yazdırmaz. İletileri hub'ınıza ulaşırken izlemek istiyorsanız Visual Studio Code için Azure IoT Hub uzantısını yükleyebilir ve yerleşik uç noktayı izlemek için kullanabilirsiniz.
Depolama alanına yönlendirilecek cihazdan buluta iletiler gönderin.
parametresi,
--properties
varsayılan iletiye ileti, uygulama veya sistem özellikleri eklememizi sağlar. Bu hızlı başlangıç için IoT hub'ınızdaki yol, ileti özelliğinilevel=storage
içeren iletileri arıyor.az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --properties level=storage \ --data "This message will be routed to storage."
Yönlendirilen iletileri gözden geçirme
Azure portalında oturum açın ve kaynak grubunu ve ardından depolama hesabını seçin.
Dosyaları bulana kadar depolama hesabında detaya gidin.
Dosyalardan birini seçin ve İndir'i seçin ve dosyayı daha sonra bulabileceğiniz bir konuma indirin. 47 gibi sayısal bir ada sahiptir. Sonuna .txt ekleyin ve ardından dosyaya çift tıklayarak dosyayı açın.
Dosyayı açtığınızda, her satır farklı bir ileti içindir. Her iletinin gövdesi de şifrelenir. İletinin gövdesinde sorgular gerçekleştirmeniz için bu olmalıdır.
Not
Bu iletiler UTF-8 ve base64 ile kodlanır. İletiyi yeniden okursanız, ASCII olarak okumak için base64 ve utf-8'den kodunu çözmeniz gerekir. İlginizi çekiyorsa, yönlendirme öğreticisindeki ReadOneRowFromFile yöntemini kullanarak bu ileti dosyalarından birinden için bir tane okuyabilir ve kodunu ASCII olarak çözebilirsiniz. ReadOneRowFromFile, bu hızlı başlangıç için sıkıştırmasını kaldırdığınız IoT C# SDK deposundadır. Bu klasörün en üstündeki yol şu şekildedir: ./iothub/device/samples/how to guides/HubRoutingSample/Program.cs Boole değerini
readTheFile
true olarak ayarlayın ve diskteki dosyanın yolunu sabit kodlayın; dosyadaki ilk satırı açıp çevirir.
Bu hızlı başlangıçta bir IoT hub'ı ve depolama hesabı oluşturmak için bir Bicep dosyası dağıttınız, ardından hub'a ileti göndermek için bir program çalıştıracaksınız. İletiler, ileti özelliklerine göre yönlendirilir ve görüntülenebileceği depolama hesabında depolanır.
Kaynakları temizleme
Oluşturduğunuz kaynaklara artık ihtiyacınız kalmadığında kaynak grubunu silin.
az group delete --name exampleRG