Google Cloud IoT Coreの代替ソリューションを調べてみた

## はじめに

巷では、Google Cloud IoT Coreのサービス終了で賑わっているかと思いますが、代替ソリューションについてはすでに検討されましたでしょうか。

https://cloud.google.com/iot/docs/release-notes

本記事では、Cloud IoT Coreの代替ソリューションをご紹介します。

:::note warn
警告
2022年12月上旬時点の情報となります。
最新の情報は、各ベンダのサイトにてご確認ください。
:::

## この記事の対象者
* Google Cloud IoT Coreを既に利用中のユーザ
* 新規利用のため、Google Cloud IoT Coreに変わるソリューションをお探しの方

## 移行先の種類
移行先としては、Cloud IoT Coreと同等のサービスを独自に実装するパターン、外部のSaaSを利用するパターンに分かれるかと思います。

| 移行先   | サービス名                             | メリット                                                                    | デメリット                                                                                                                                              |
| -------- | -------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 独自開発 | Rabbit MQ<br/>Mosquitto<br/>HiveMQなど | ・IoT Coreと同等のI/Fを作成できる<br/>・ロケーションが自由                  | ・開発工数がかかる<br/>・アーキテクチャ設計が必要<br/>・非マネージドサービス<br/>・HTTP BridgeとMQTT Bridgeをそれぞれ代替する必要がある                 |
| SaaS     | EMQX Cloud<br/>HiveMQ Cloudなど        | ・MQTT Brokerを備える<br/>・Edgeの管理機能を備える<br/>・マネージドサービス | ・HTTP Bridgeを利用している場合、考慮が必要<br/>・デバイスの接続認証方式が変わる場合がある<br/>・ロケーションの制限あり<br/>・Pub/Subに直接連携出来ない |

本記事では、移行までのスピードを考え、IoT Coreと同様のサービス提供形態である、SaaS型ソリューションのうち、EMQX CloudとHiveMQ Cloudを調査します。<br>
選定方針として、AWS IoT CoreやAzure IoT Hubといったパブリッククラウドで提供されているサービスではなく、個別に契約ができるクラウドサービスで比較します。

## 移行先サービス
### EMQX Cloud
EMQX CloudはEMQ社が提供するのIoT向けMQTTブローカーサービスです。<br>
MQTT 5およびMQTT 3.1、MQTT 3.1.1に対応<br>
MQTTトピック数やメッセージサイズ、レートなどの使用制限が無く、SQLベースのルール エンジンを使用して、AWS RDSやKafkaなどを始めとする、30以上のデータ統合が可能。

#### 公式

https://www.emqx.com/en/cloud


#### ドキュメント

https://docs.emqx.com/en/cloud/latest/


### Hive MQ Cloud
HiveMQは、MQTTを使用した、エンタープライズ対応でスケーラブルなIoTサービス。<br>
MQTT 5およびMQTT 3.xに100% 準拠。<br>
IoTデータをエンタープライズ システムに柔軟に統合できるOpen APIと、Kafka、SQL、NoSQLデータベースなどの他のエンタープライズ システムにすばやく統合するためのビルド済み拡張機能を備えており、<br>
エンタープライズ拡張機能を別途購入することで、Pub/Subへの出力やJWT認証にも対応します。
#### 公式

https://www.hivemq.com/mqtt-cloud-broker/


#### ドキュメント

https://www.hivemq.com/docs/hivemq-cloud/introduction.html

## 機能比較サマリ
|                          | EMQX                                                 | HiveMQ                                                                                |
| ------------------------ | ---------------------------------------------------- | ------------------------------------------------------------------------------------- |
| HTTP Bridge              | ◯                                                    | ✕                                                                                     |
| MQTT Bridge              | ◯                                                    | ◯                                                                                     |
| 接続状態の管理           | ◯                                                    | ◯                                                                                     |
| デバイスへのコマンド送信 | △                                                    | △                                                                                     |
| デバイス接続認証         | 各パスワード認証<br/>JWT認証<br/>SCRAM認証など       | ID,パスワード                                                                         |
| 公開鍵認証のアルゴリズム | ES256可能                                            | 不可                                                                                  |
| 認証方式                 | ユーザー名/パスワード認証、JWT、SASL/SCRAM 認証など  | ID、パスワード認証                                                                    |
| 課金                     | 従量課金($0.36/h</br>※Professional)                  | 従量課金($0.10 /device monthly<br/>$0.15 /GB monthly)</br>※月額課金(1000デバイスまで) |
| 展開方法                 | SaaS                                                 | SaaS                                                                                  |
| 監視                     | ◯                                                    | ◯                                                                                     |
| Pub/Sub連携              | ◯                                                    | ◯                                                                                     |
| 日本語サポート           | ✕                                                    | ✕                                                                                     |
| リージョン               | 北米東部/アジアパシフィック(シンガポール・香港)/欧州 | 不明                                                                                  |


## 詳細比較
### EMQX
| 機能                     | ◯/✕                                                  | 備考                                                                                                                                                                                                                                                                                                                                                                              | ソース                                                                                   |
| ------------------------ | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| HTTP Bridge              | ◯<br/>※要確認                                        | HTTPで接続可能とは記載されていない。不可能とも記載されていない。<br/>⇒管理APIにPublishのAPIがあるので、それを用いてHTTPでメッセージ送信することはできるかも。                                                                                                                                                                                                                     | https://www.emqx.io/docs/en/v5.0/admin/api.html#/Publish                                 |
| MQTT Bridge              | ◯                                                    | MQTT 5およびMQTT 3.1、MQTT 3.1.1に対応                                                                                                                                                                                                                                                                                                                                            | https://docs.emqx.com/en/cloud/latest/intro/advance.html                                 |
| 接続状態の管理           | ◯                                                    | ダッシュボードの提供は不明。REST API を介してオンライン デバイスのリストを取得可。                                                                                                                                                                                                                                                                                                | https://docs.emqx.com/en/cloud/latest/overview.html#product-capabilities                 |
| デバイスへのコマンド送信 | △                                                    | サブスライブはできる。IoT Coreにように、Consoleから任意のコマンドを送信できるかは不明                                                                                                                                                                                                                                                                                             |                                                                                          |
| デバイス接続認証         | パスワード認証など                                   | ユーザー名/パスワード認証だけでなく、JWT、SASL/SCRAM 認証などの拡張認証もサポート                                                                                                                                                                                                                                                                                                 | https://docs.emqx.com/en/cloud/latest/deployments/auth.html#authentication               |
| 公開鍵認証のアルゴリズム | ◯                                                    | JWT が対称シークレットを使用して署名を生成し、署名を検証(HS256、HS384、および HS512 アルゴリズムをサポート)。<br/><br/>公開鍵を使用して署名を検証 (RS256、RS384、RS512、ES256、ES384、および ES512 アルゴリズムをサポート)。</br></br>※クラウド版には記載がないが、よくある質問に「EMQX Cloud は、EMQ がホストする EMQX Enterprise クラスター」と記載があるため、同様と思われる。 | https://www.emqx.io/docs/en/v5.0/security/authn/jwt.html#authentication-principle        |
| JWT認証方式              | ◯                                                    | JWTによる認証可能                                                                                                                                                                                                                                                                                                                                                                 | https://docs.emqx.com/en/cloud/latest/deployments/jwt_auth.html#jwt-authentication-rules |
| 課金                     | 従量課金($0.36/h</br>※Professional)                  | プレミアム版は要問い合わせ                                                                                                                                                                                                                                                                                                                                                        | https://www.emqx.com/en/cloud/pricing                                                    |
| 展開方法                 | SaaS                                                 |                                                                                                                                                                                                                                                                                                                                                                                   | https://docs.emqx.com/en/cloud/latest/quick_start/introduction.html#register-guide       |
| 監視                     | ◯                                                    | Prometheusメトリックに対応。PrometheusメトリックはCloudMonitoringと連携可能。またはErlangコンソールで監視可能。                                                                                                                                                                                                                                                                   | https://docs.emqx.com/en/cloud/latest/deployments/monitors.html<br/>                     |
| Pub/Sub連携              | ◯                                                    | GoogleCloudとの連携あり。                                                                                                                                                                                                                                                                                                                                                         | https://docs.emqx.com/en/cloud/latest/rule_engine/rule_engine_gcp_pubsub.html<br/>       |
| 日本語サポート           | ✕                                                    | 英語（おそらく中文も対応）のみ                                                                                                                                                                                                                                                                                                                                                    | https://www.emqx.com/en/support                                                          |
| リージョン               | 北米東部/アジアパシフィック(シンガポール・香港)/欧州 | AWS、Google Cloud、Microsoft Azure の 17 のリージョンで実行                                                                                                                                                                                                                                                                                                                       | https://www.emqx.com/en/cloud                                                            |

### Hive MQ
| 機能                     | ◯/✕                                           | 備考                                                                                                                                                      | ソース                                                                                                               |
| ------------------------ | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| HTTP Bridge              | ✕                                             | 対応してる文言は見つけられなかった。                                                                                                                      |                                                                                                                      |
| MQTT Bridge              | ◯                                             | MQTT 5およびMQTT 3.1、MQTT 3.1.1に対応                                                                                                                    | https://www.hivemq.com/mqtt-cloud-broker/                                                                            |
| 接続状態の管理           | ◯                                             | クライアントを監視できるとあるのでおそらく可能                                                                                                            | https://www.hivemq.com/docs/hivemq-cloud/cluster-management.html#monitor-control-center                              |
| デバイスへのコマンド送信 | △                                             | サブスライブはできる。IoT Coreにように、Consoleから任意のコマンドを送信できるかは不明                                                                     |                                                                                                                      |
| デバイス接続認証         | ID、パスワード                                | ユーザID、パスワードの認証が基本。<br>HiveMQ Enterprise Security Extensionを利用すれば、LDAP、JWTなどにも対応可                                           | https://www.hivemq.com/docs/hivemq-cloud/cluster-management.html#access-management                                   |
| 公開鍵認証のアルゴリズム | ✕                                             | ユーザID、パスワードの認証なので、公開鍵認証には対応していない<br>※HiveMQ Enterprise Security Extensionを利用すれば対応可だが、アルゴリズムは読み取れず。 |                                                                                                                      |
| JWT認証方式              | ◯<br>※ライセンスが必要                        | HiveMQ Enterprise Security Extensionを利用                                                                                                                | https://www.hivemq.com/docs/ese/4.9/enterprise-security-extension/ese-intro.html                                     |
| 課金                     | $ 0.10 /device monthly<br/>$ 0.15 /GB monthly | 月額課金(1000デバイスまで) 。PAY AS YOU GOの場合                                                                                                          | https://www.hivemq.com/mqtt-cloud-broker/                                                                            |
| 展開方法                 | SaaS                                          | SaaS                                                                                                                                                      | https://www.hivemq.com/docs/hivemq-cloud/introduction.html#access-your-first-cluster                                 |
| 監視                     | ◯                                             | クライアントの監視あり                                                                                                                                    | https://www.hivemq.com/docs/hivemq-cloud/cluster-management.html#monitor-control-center                              |
| Pub/Sub連携              | ◯<br>※ライセンスが必要                        | Pub/Subとの連携可<br/>Kafka、Oracle、MongoDBなど                                                                                                          | https://www.hivemq.com/docs/google-cloud-pubsub/4.9/google-cloud-pubsub-extension/google-cloud-pubsub-extension.html |
| 日本語サポート           | ✕                                             | 日本語サポートの文言は見当たらない。                                                                                                                      | https://www.hivemq.com/support/                                                                                      |
| リージョン               | 不明                                          | 展開先はAWSとAzureから選択できるが、リージョン指定可否は不明                                                                                              |                                                                                                                      |

## おわりに
今回は2つのサービスを比較してみました。
標準プランでも機能が多いEMQX、追加のアドオンで機能を追加できるHive MQと、どちらも一長一短ありますので、デバイスが対応している認証方式、接続台数などで選択する感じでしょうか。<br>
本記事が、皆様のプロダクトの選定のお役に立てますと幸いです。