初めに
Terraformを用いてIoTHubのデバイスを構築する一例を紹介します。
IoT Hubとは?
IoT Hubは、Azureが提供するフルマネージドサービスで、大量のIoTデバイスからのメッセージを安全に収集し、それらを管理するためのソリューションです。これにより、デバイス間通信、デバイスの管理、セキュリティ対策などが可能となります。
デバイスとは?
デバイスとは、IoT Hubに接続されるセンサー、アクチュエータ、組み込みデバイス、ゲートウェイなどの物理的または仮想的なエンティティを指します。これらのデバイスは、様々な種類のデータを生成し、IoT Hubに送信することができるほか、IoT Hubからのコマンドを受け取ってアクションを実行することが可能です。
デバイスの主な特徴:
1.ユニークなID: 各デバイスはIoT Hubに登録される際に、一意のID(デバイスID)を割り当てられます。これにより、IoT Hubは個々のデバイスを識別し、セキュアな通信チャネルを確立できます。
2.セキュリティ: デバイスは、対称キー、X.509証明書、またはトークンベースの認証を使用してIoT Hubに安全に接続します。これにより、データの機密性とデバイスの完全性が保護されます。
3.デバイスツイン: 各デバイスにはデバイスツインがあり、これはデバイスのメタデータ、構成、状態情報をクラウドと同期するためのJSONドキュメントです。デバイスツインは、デバイスがオフラインの間にもクラウド側で変更を行い、デバイスが再接続した際に同期することを可能にします。
4.ダイレクトメソッド: IoT Hubは、ダイレクトメソッドを介してリアルタイムでデバイスに対してリモートプロシージャコール(RPC)を行うことができます。これにより、即時のアクションをデバイスに命令することができます。
5.メッセージング: デバイスはセンサーからの読み取り値や計算結果などのデータをメッセージとしてIoT Hubに送信でき、また、IoT Hubからデバイスへのコマンドや設定変更などもメッセージとして受信可能です。
6.デバイス管理: IoT Hubを通じて、デバイスのファームウェア更新や構成変更、リモート監視などの管理タスクを行うことができます。
7.スケーラビリティ: IoT Hubは数百万台のデバイスをサポートする設計となっており、大規模なIoTソリューションを実現するためのスケーラビリティを備えています。
実装内容
Terraformの公式ドキュメントを確認したのですが、IotHubのデバイスの作成はTerraformでは未対応のようです。
なので、Terraform内にaz commandを実行できるように実装しました。
resource "azurerm_iothub" "example" {
name = "exampleIothub"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
sku {
name = "S1"
capacity = "1"
}
tags = {
purpose = "testing"
}
}
resource "null_resource" "extension_install" {
provisioner "local-exec" {
command = "az extension add --name azure-iot"
}
}
resource "null_resource" "device_create" {
depends_on = [null_resource.extension_install]
provisioner "local-exec" {
command = "az iot hub device-identity create --device-id <デバイス名> --hub-name ${azurerm_iothub.example.name}"
}
}