IoT システム開発の機会が訪れたので、有名どころクラウドを比較して選定しました。
選定における要件
以下のような制約を設けました。
- Platform as a Service (いわゆるマネージド)や Function as a Service (いわゆるサーバーレス)が望ましい
- MQTT Broker
- 対向システムよりデータが publish されるため
- 対向システムとして Arduino 等 OS を使用しない低レベルなデバイスも対象
- ペイロードは任意のバイナリデータ(JSONでラッピングは可能)
- MQTT over TLS (MQTTS)
- クライアント認証も利用
- MQTTクライアントIDはクライアントが生成
- HTTP API Gateway
- スマートフォンアプリによるアクセスするため
- DB
- Function as a Service と組み合わせるため、スケーラブルな DB が望ましい
- Storage
- ログの保存等に使用
- 高速な開発と、高品質な開発の双方が可能であること
- プロトタイピングからプロダクションユースまでカバーしたいため
選定
AWS → 無難な選択肢。経験者多し
かくいう私自身も AWS が最も経験長いです。
項目 | サービス | 備考 |
---|---|---|
MQTT Broker | Amazon MQ or AWS IoT Message Broker | * Client ID 任意 * AWS IoT 認証 (X.509含む), カスタム認証が可能 * MQ より Lambda を invoke 可能 |
Function as a Service | AWS Lambda | * スケジュールされたイベントは最短1分間隔 |
Database | Amazon DynamoDB | |
Storage | Amazon S3 | |
API | Amazon API Gateway |
GCP → MQTT Bridge の柔軟性が低いため除外
項目 | サービス | 備考 |
---|---|---|
MQTT Broker | Cloud IoT Core MQTT Bridge | * Does not support all publish/subscribe operation. * Arduino向け認証ライブラリは正式サポート外 * Client ID に制約あり |
Azure → JSONペイロードしかサポートされない?
項目 | サービス | 備考 |
---|---|---|
MQTT Broker | Azure IoT Hub | * JSONペイロードしかサポートされない?(未確認) * Client ID (=deviceId) 任意 * Username 必要 * X.509 認証可 |
IBM Cloud → Function に加えて Node-RED も選択肢に
高速なプロトタイピングに、 Node-RED を短時間で立ち上げできるのは助かります!
項目 | サービス | 備考 |
---|---|---|
MQTT Broker | Watson IoT Platform | * Client ID に制約あり |
Function as a Service | IBM Cloud Functions (OpenWhisk) | * トリガーは最短1秒(?)間隔 |
Prototyping | IBM Cloud Node-RED Starter | |
Database | Compose for ScyllaDB or IBM Cloudant |
|
Storage | IBM Cloud Object Storage | |
API | IBM Cloud Functions API Gateway |
結論
- 対向システムの仕様が未確定のため汎用的な MQTT broker を選ぶ
- → AWS または IBM Cloud
- 高速プロトタイピングも必要なため Node-RED も利用する
- → IBM Cloud
- MQTT publisher が X.509 認証、クライアントIDは任意、 username 不使用
- → AWS IoT Core
- リリースに向けて仕様が定まってきたら、費用なども考慮して再度選定を行いたい
- → 除外した GCP, Azure も候補となる
MQTT の仕様に未確定な部分があることと、高速なプロトタイピングも行いたいことから、今回は IBM Cloud を選ぶ結果となりました。
まずは IBM Cloud で色々試してみたいと思います。