Aracılığıyla paylaş


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

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:

@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.

  1. Azure Hızlı Başlangıç Şablonları deposundan main.bicep dosyasını indirin.

  2. 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=storageiç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 .

  1. Ş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
    
  2. Çıktıdan IoT hub'ınızın adını kopyalayın. Şu şekilde biçimlendirilmelidir: contosoHub{randomidentifier}

  3. Hub'a bir cihaz ekleyin.

    az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName} 
    
  4. 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.

  5. 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ğini level=storageiç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

  1. Azure portalında oturum açın ve kaynak grubunu ve ardından depolama hesabını seçin.

  2. Dosyaları bulana kadar depolama hesabında detaya gidin.

    Depolama hesabı dosyalarına bakın

  3. 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.

  4. 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.

    Gönderilen iletileri görüntüleme

    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

Sonraki adımlar