AWS IoT Device Simulatorを使ってみたら感動した!
お疲れ様です。サーバーレス開発部の新井です。
2ヶ月程ブログ書けてなかったですが、プロジェクトが一段落したのでこれから投稿ペース上げていこうと思います。
今回はAWS IoTの負荷試験のために、デバイスを仮想的に増やす方法を調べている際に見つけたIoT Device Simulatorがなかなかイケてたので、こちらを紹介したいと思います。
- 参考にしたサイト
- https://aws.amazon.com/answers/iot/iot-device-simulator/
- https://docs.aws.amazon.com/solutions/latest/iot-device-simulator/welcome.html
- https://aws.amazon.com/jp/about-aws/whats-new/2018/05/introducing-the-iot-device-simulator/
IoT Device Simulator とは?
IoT Device SimulatorはAWSが公式に提供している、仮想接続された大量のIoTデバイスをシミュレーションための1つのソリューションです。 内部的にはAWSのサービス群をフル活用し、仮想的にデバイスを生成して接続するという仕組みをClouFormationのテンプレートで提供してくれます。
つまりこちらは用意されているCloudFormaitonのテンプレートをデプロイするだけで、仮想デバイスのシミュレーションを行えるシステムをAWS上に構築できるわけです。素晴らしい!!
で、最終的にCloudFormationでデプロイされるのは以下の様な、マイクロサービス+サーバーレス+SPA(Angular)というなんともナウい構成をしています。
IoT Device Simulatorのデプロイ
では、早速デプロイしていきましょう。
といっても、こちらの手順にしたがって進めていくだけです。
Launch Solutionをクリック
必要あればリージョンを変更
stack名やアドミンユーザなどを入力
コスト可視化のためタグの設定
リソースの作成開始
リソースの作成が完了すると、先程入力したアドミンユーザのメールアドレスにメッセージが届く
ログイン後画面が表示される
IoT Device Simulatorの利用
IoT Device Simulatorで出来ることは大きく分けて、
- IoTデバイス (カスタマイズ可)
- 自動車
を想定したシミュレーションの2つです。
IoTデバイスのシミュレーション
カスタマイズ可能なIoTデバイスのシミュレーションを行う場合は、Device Typeの登録を行います。 ここでは、
- デバイスがPublishするトピック名
- デバイスのPublish間隔
- デバイスの動作時間
- メッセージのペイロードの中身
などデバイスがどのような動作をするか定義することができます。
次にWidgetを作成します。 先程定義した、Device Typeを元に、デバイスを複数台作成することで仮想デバイスの動作が開始されます。
デバイスからPublish送信されるメッセージは、AWS IoTのマネージメントコンソールのテストからも確認できます。
自動車のシミュレーション
自動車を想定したシミュレーションを行う場合は、画面左の「Automotive」より「Add Vehicles」を選択し、仮想デバイス(自動車)を登録します。 ここでは、自動車の走行状態(緯度経度、速度、オイル残量など)をシミュレートできます。
一方で、送信されるデータをこちらで変更できないため、自由度は低いです。 また、マップを表示するにはMapboxでユーザ作成し、Tokenを生成して設定画面からセッティングを行う必要があります。こちらを参考にしてください。(※一度ログアウトしないと反映されないので注意してください)
ユーザ招待
他のユーザの招待する場合は、Usersから招待可能できます。 招待後には権限の変更が可能です。
料金
試しに、デバイスを1,000台登録して、1日に数回シミュレーションを実行したりしながら1週間動かしてみました。
デバイスの登録数や実行時間などによらず、一日約$15とほぼ一定の価格になっています。 サーバーレスアーキテクチャの従量課金の旨味が出るのではないかと予想していましたが、ECS Container Serviceの価格に変動がないのを見ると、この程度のデバイス数と実行回数では料金への影響はほぼないのかと思われます。丸1日使ってない日もあるので、最低金額が1日$15程度ということでしょう。
削除方法
マネージメントコンソールのCloudFormationのページからDelete Stackを実行すれば、作成されたリソース全てを綺麗に削除してくれます。
どんなときにつかえるの?
まず、このシミュレータはリリースされたばかりで、現在提供されている機能は少なく柔軟性は低いです。 例えば以下のような事はできません。
- Device Typeの複数同時作成
- 1デバイス1Topicに対するPublishを行う場合は、Device Typeをデバイス数分作成する必要がある。面倒ですが、API呼び出しをするプログラムを自前で作成すれば可能です。
- デバイスの一括再起動
- Device Typeで設定した動作時間終了後は、再度startボタンを押下する必要があるが、一括で再起動を行う機能は提供されていません。
- Automotiveで送信するデータの編集
- 送信されるデータをこちらで変更できないです。
- AWS IoTのMessage BrokerへのMQTTでの接続
- デプロイされたプログラムを参照すればわかりますが、AWS IoTへの接続はAWS SDK for JavaScriptのIotDataクラスを利用したHTTPでのAPIリクエストです。
以上を踏まえて用途を考えると、
- SPA(Angular) + Serverless(API Gateway + Lambda)のサンプルコード
- ブラウザからAWS IoTのMessage BrokerへのMQTT接続するためのサンプルコード (Cognitoの認証・認可を含む)
- AWS IoT上のサーバーへのテスト用のツール
- デモ用
などには使えるかもしれません。
当初の目的であった負荷試験では、AWS IoTのMessage Brokerへの接続プロトコルがHTTPであるため、実際のMQTTでの接続をシミュレーションできないという理由で、残念ながら却下となりました。
まとめ
CloudFormaitonのテンプレートを流すだけで、10分程度で作成されるこの仕組みとその完成度の高さにとても感動しました! 現時点では、まだ提供されている機能は少ないですが、今後の拡張に期待したいと思います!
お疲れさまでした!