AWS IoT Core
IoT デバイスとクラウド間の双方向通信を MQTT や HTTPS で実現するフルマネージドサービスで、数十億台規模のデバイス接続と証明書ベースの認証を提供する
概要
AWS IoT Core は、センサーや組み込み機器などの IoT デバイスを AWS クラウドに安全に接続し、双方向のメッセージングを実現するフルマネージドサービスです。軽量プロトコルの MQTT に加え HTTPS や MQTT over WebSocket をサポートし、デバイスの通信要件に応じたプロトコル選択が可能です。デバイスシャドウによるオフライン時の状態管理、ルールエンジンによるメッセージの振り分け・変換、X.509 証明書を用いた相互認証により、大規模な IoT システムの構築基盤として機能します。
MQTT が IoT 通信の標準になった理由とプロトコル選択の勘所
IoT デバイスの多くはバッテリー駆動で帯域幅も限られるため、HTTP のようなリクエスト/レスポンス型プロトコルでは通信オーバーヘッドが大きすぎます。MQTT は固定ヘッダーがわずか 2 バイトから始まるパブリッシュ/サブスクライブ型プロトコルで、TCP 上で動作しながらも極めて軽量です。IoT Core は MQTT 3.1.1 と MQTT 5.0 の両方をサポートしており、MQTT 5.0 ではリクエスト/レスポンスパターンやメッセージの有効期限設定など、より柔軟な通信制御が可能になりました。一方、ファイアウォールの制約で MQTT のポート 8883 が使えない環境では MQTT over WebSocket (ポート 443) が有効です。HTTPS はデバイスからの単発データ送信に適しており、既存の REST クライアントライブラリをそのまま活用できる利点があります。実務では、常時接続が必要なテレメトリ収集には MQTT を、ファームウェアバージョンの報告のような低頻度の通知には HTTPS を使い分けるケースが一般的です。Azure IoT Hub も MQTT と HTTPS をサポートしていますが、IoT Core はトピックフィルターの柔軟性が高く、ワイルドカードを使った階層的なトピック設計で数千種類のデバイスタイプを 1 つのエンドポイントで管理できます。
デバイスシャドウで実現するオフライン耐性の設計
工場の製造ラインや農業用センサーなど、ネットワーク接続が不安定な環境では、デバイスがいつでもクラウドと通信できるとは限りません。デバイスシャドウは、各デバイスの「望ましい状態」(desired) と「報告された状態」(reported) を JSON ドキュメントとしてクラウド側に保持する仕組みです。アプリケーションがデバイスの設定を変更したい場合、シャドウの desired セクションを更新するだけで済みます。デバイスがオンラインに復帰した時点で差分が自動的に同期され、desired と reported の不一致 (delta) がデバイスに通知されます。この設計により、アプリケーション側はデバイスの接続状態を意識せずに制御命令を発行でき、デバイス側も自分のペースで状態を反映できます。名前付きシャドウを使えば 1 台のデバイスに複数のシャドウを持たせることも可能で、たとえば「温度制御」と「照明制御」を独立したシャドウで管理すると、機能ごとのアクセス制御やバージョン管理が容易になります。IoT 開発の関連書籍 (Amazon) では、シャドウを活用したオフライン対応パターンが体系的に解説されています。
ルールエンジンと証明書認証で構築するセキュアなデータパイプライン
IoT Core のルールエンジンは、デバイスから受信した MQTT メッセージを SQL ライクな構文でフィルタリング・変換し、20 以上の AWS サービスに直接ルーティングする機能です。たとえば「温度が 50 度を超えたメッセージだけを Lambda に送信し、全メッセージは S3 に蓄積する」といったルールを宣言的に定義できます。DynamoDB への直接書き込み、Kinesis Data Streams へのストリーミング、Step Functions のワークフロー起動など、コードを書かずにデータパイプラインを構築できる点が強力です。セキュリティ面では、X.509 証明書による相互 TLS 認証が基本です。デバイスごとに固有の証明書を発行し、IoT ポリシーで「どのデバイスがどのトピックにパブリッシュ/サブスクライブできるか」を細かく制御します。Just-in-Time Registration (JITR) を使えば、デバイスが初めて接続した際に自動で証明書を登録・アクティベートでき、数万台規模のデバイスプロビジョニングを効率化できます。Fleet Provisioning テンプレートと組み合わせることで、工場出荷時に仮の証明書を埋め込み、初回接続時に本番用証明書へ自動切り替えする運用も実現可能です。