クイック スタート: Bicep を使用して Azure IoT ハブとストレージ アカウントをデプロイする
このクイックスタートでは、Bicep を使用して、IoT ハブ、Azure Storage アカウント、および IoT ハブからストレージにメッセージを送信するルートを作成します。 このハブは、ルーティング条件が満たされた場合に、そのハブに送信されたメッセージをストレージ アカウントに自動的にルーティングするように構成されます。 このクイックスタートの最後には、ストレージ アカウントを開いて、送信されたメッセージを確認することができます。
Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。 簡潔な構文、信頼性の高いタイプ セーフ、およびコードの再利用のサポートが提供されます。 Bicep により、Azure のコード ソリューションとしてのインフラストラクチャに最適な作成エクスペリエンスが実現します。
前提条件
Azure サブスクリプションをお持ちでない場合は、開始する前に無料の Azure アカウントを作成してください。
Bicep ファイルを確認する
このクイックスタートで使用される Bicep ファイルは、Azure クイックスタート テンプレートから 101-iothub-auto-route-messages
と呼ばれます。
Bicep ファイルには、次の 2 つの Azure リソースが定義されています。
- Microsoft.Storage/storageAccounts: コンテナーを含むストレージ アカウント。
- Microsoft.Devices/IotHubs: ストレージ コンテナーを指すエンドポイントと、フィルター処理されたメッセージをそのエンドポイントに送信するルートを持つ IoT ハブ。
@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 ファイルをデプロイする
このセクションでは、Bicep ファイルをデプロイする手順について説明します。
Azure Quickstart Templates リポジトリから main.bicep ファイルをダウンロードします。
Azure CLI を使用して Bicep ファイルをデプロイすることで、リソースを作成します。
az group create --name ContosoResourceGrp --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep
デプロイが完了するまで、数分間かかります。 デプロイが完了すると、デプロイされたリソースの詳細を示す出力が表示されるはずです。
device-to-cloud メッセージを送信する
このセクションでは、新しい IoT ハブにデバイスを登録し、そのデバイスから IoT Hub にメッセージを送信します。 Bicep ファイルによって IoT ハブで構成されたルートは、メッセージにメッセージ プロパティ level=storage
が含まれている場合にのみメッセージをストレージに送信します。 このルーティング条件が期待どおりに動作することをテストするために、そのプロパティを含むいくつかのメッセージと含まないいくつかのメッセージを送信します。
ヒント
このクイック スタートでは、便宜上 Azure CLI のシミュレートされたデバイスを使用します。 ルーティングに関するメッセージ プロパティを使用してデバイスからクラウドへのメッセージを送信するコード例については、Azure IoT SDK for .NET の HubRoutingSample を参照してください。
テンプレートによって自動的に作成された IoT ハブの名前を取得します。
前のセクションで既定のコマンドを使用した場合は、ContosoResourceGrp リソース グループにリソースが作成されています。 別のリソース グループを使用した場合は、一致するように次のコマンドを更新します。
az iot hub list --resource-group ContosoResourceGrp --output table
出力から IoT ハブの名前をコピーします。
contosoHub{randomidentifier}
のように書式設定する必要がありますデバイスをハブに追加します。
az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName}
デバイスをシミュレートし、デバイスからクラウドへのメッセージを送信します。
--data
パラメーターを使用すると、メッセージ本文を設定できます。az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --data "This message won't be routed."
シミュレーターによって 100 個のメッセージが送信された後、シミュレーターは切断されます。 このクイック スタートの目的上は、100 件すべてを待つ必要はありません。
ヒント
Azure CLI では、メッセージの送信時にメッセージは出力されません。 ハブに到着したメッセージを監視する必要がある場合は、Visual Studio Code 用の Azure IoT Hub 拡張機能をインストールし、それを使用して組み込みのエンドポイントを監視できます。
ストレージにルーティングされるデバイスからクラウドへのメッセージを送信します。
--properties
パラメーターを使用すると、メッセージ、アプリケーション、またはシステムのプロパティを既定のメッセージに追加できます。 このクイック スタートでは、IoT ハブ内のルートが、メッセージ プロパティlevel=storage
を含むメッセージを探しています。az iot device simulate \ --device-id contosoDevice \ --hub-name {YourIoTHubName} \ --properties level=storage \ --data "This message will be routed to storage."
ルーティングされたメッセージを確認する
Azure portal にサインインして、リソース グループを選択した後、ストレージ アカウントを選択します。
ストレージ アカウントをドリルダウンしてファイルを見つけます。
いずれかのファイルを選択して [ダウンロード] を選択し、後で見つけやすい場所にそのファイルをダウンロードします。 このファイルには、数値の名前 (例: 47) が付けられています。 末尾に " .txt" を追加し、ファイルをダブルクリックして開きます。
開いたファイルの各行は、異なるメッセージに対するものです。 また、各メッセージの本文は暗号化されています。 メッセージの本文に対してクエリを実行するためには、そのようになっている必要があります。
Note
これらのメッセージは UTF-8 と base64 でエンコードされています。 メッセージを再度確認する場合、それを ASCII として読むために base64 と UTF-8 からデコードする必要があります。 興味がある方は、ルーティングのチュートリアルで説明されている ReadOneRowFromFile メソッドを使用して、これらのメッセージ ファイルのうちから 1 つを読み取り、ASCII にデコードしてみてください。 ReadOneRowFromFile は、このクイックスタートで解凍した IoT C# SDK リポジトリにあります。 そのフォルダーの最上位を起点とするパスは、./iothub/device/samples/how to guides/HubRoutingSample/Program.cs です。ブール値
readTheFile
を true に設定し、ディスク上のファイルへのパスをハードコーディングすると、ファイルの先頭行が開かれて変換されます。
このクイックスタートでは、IoT ハブとストレージ アカウントを作成する Bicep ファイルをデプロイした後、そのハブにメッセージを送信するプログラムを実行しました。 メッセージは、メッセージのプロパティに基づいてルーティングされ、表示できるストレージ アカウントに格納されます。
リソースをクリーンアップする
作成したリソースが不要になったら、リソース グループを削除してください。
az group delete --name exampleRG