Baca dalam bahasa Inggris

Bagikan melalui


Mulai cepat: Menyebarkan hub Azure IoT dan akun penyimpanan menggunakan Bicep

Dalam mulai cepat ini, Anda menggunakan Bicep 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.

Bicep adalah bahasa pemrogram khusus domain (DSL) yang menggunakan sintaks deklaratif untuk menyebarkan sumber daya Azure. Bicep menyediakan sintaks ringkas, keamanan jenis yang andal, dan dukungan untuk penggunaan kembali kode. Bicep menawarkan pengalaman penulisan terbaik untuk solusi infrastructure-as-code di Azure.

Prasyarat

Tinjau file Bicep

File Bicep yang digunakan dalam mulai cepat dinamakan101-iothub-auto-route-messages dari Templat Mulai Cepat Azure.

Dua sumber daya Azure ditentukan dalam file Bicep:

@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

Menerapkan file Bicep

Bagian ini menyediakan langkah-langkah untuk menyebarkan file Bicep.

  1. Unduh file main.bicep dari repositori Templat Mulai Cepat Azure.

  2. Buat sumber daya dengan menyebarkan file Bicep menggunakan Azure CLI.

    az group create --name ContosoResourceGrp --location eastus
    az deployment group create --resource-group exampleRG --template-file main.bicep
    

    Penyebaran memerlukan waktu beberapa menit untuk menyelesaikan. Setelah penyebaran selesai, Anda akan melihat output yang merinci sumber daya yang disebarkan.

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 file Bicep di hub IoT hanya mengirim pesan ke penyimpanan jika berisi properti level=storagepesan . 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.

  1. 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
    
  2. Salin nama hub IoT Anda dari output. Ini harus diformat seperti contosoHub{randomidentifier}

  3. Tambahkan perangkat ke hub.

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

  5. 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 properti level=storagepesan .

    az iot device simulate \
      --device-id contosoDevice \
      --hub-name {YourIoTHubName} \
      --properties level=storage \
      --data "This message will be routed to storage."
    

Meninjau pesan yang dirutekan

  1. Masuk ke portal Azure dan pilih grup sumber daya, lalu pilih akun penyimpanan.

  2. Telusuri paling detail ke akun penyimpanan hingga Anda menemukan file.

    Melihat file akun penyimpanan

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

  4. Ketika Anda membuka file, setiap baris memiliki pesan yang berbeda. Isi dari setiap pesan juga dienkripsi. Hal ini harus dilakukan agar Anda dapat melakukan kueri terhadap isi pesan.

    Menampilkan pesan terkirim

    Catatan

    Pesan ini dikodekan dalam UTF-8 dan base64. Jika Anda membaca kembali pesan, Anda harus mendekodenya dari base64 dan utf-8 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/how to guides/HubRoutingSample/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 file Bicep 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

Ketika Anda tidak lagi memerlukan sumber daya yang dibuat, hapus sumber daya tersebut.

az group delete --name exampleRG

Langkah berikutnya