Hızlı Başlangıç: ARM şablonu kullanarak Azure IoT hub'ı ve depolama hesabı dağıtma
Bu hızlı başlangıçta, IoT hub'ı, Azure Depolama hesabı ve IoT hub'ından depolamaya ileti göndermek için bir yol oluşturmak için bir Azure Resource Manager şablonu (ARM şablonu) kullanacaksı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.
Azure Resource Manager şablonu, projenizin altyapısını ve yapılandırmasını tanımlayan bir JavaScript Nesne Gösterimi (JSON) dosyasıdır. Bu şablonda, bildirim temelli sözdizimi kullanılır. Dağıtımı oluşturmak için programlama komutlarının sırasını yazmadan hedeflenen dağıtımınızı açıklarsınız.
Ortamınız önkoşulları karşılıyorsa ve ARM şablonlarını kullanma hakkında bilginiz varsa, Azure’a dağıtma düğmesini seçin. Şablon Azure portalında açılır.
Önkoşullar
- Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir Azure hesabı oluşturun.
Şablonu gözden geçirme
Bu hızlı başlangıçta kullanılan şablon Azure Hızlı Başlangıç Şablonları'ndan çağrılır101-iothub-auto-route-messages
.
Şablonda 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'ı.
{
"$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')]"
}
}
}
Şablonu dağıtma
Bu bölümde ARM şablonunu dağıtma adımları sağlanır.
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. Şablonun IoT hub'ında yapılandırıldığı yol, yalnızca ileti özelliğini level=storage
içeriyorsa depolamaya 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."
Dağıtılan kaynakları gözden geçirme
Azure portalında oturum açın ve Kaynak Grubu'na tıklayın 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-32 ve base64'te kodlanmıştır. İletiyi yeniden okursanız, ASCII olarak okumak için base64 ve utf-32'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/getting started/RoutingTutorial/SimulatedDevice/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, ioT hub'ı ve depolama hesabı oluşturmak için bir ARM şablonu dağıttınız ve 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
Bu hızlı başlangıç sırasında eklenen kaynakları kaldırmak için Azure portalında oturum açın. Kaynak Grupları'nı seçin ve bu hızlı başlangıç için kullandığınız kaynak grubunu bulun. Kaynak grubunu ve ardından Sil'i seçin. Grup silindiğinde, gruptaki tüm kaynaklar da silinir.