📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の5版が非表示)
103行目: 103行目:


== パブリックMQTTブローカーサービス (無料 / 有料) ==
== パブリックMQTTブローカーサービス (無料 / 有料) ==
* HiveMQ Cloud (無料枠あり)
==== HiveMQ Cloud (無料枠あり) ====
*: 100台までのデバイス接続可能。
運用・保守では、クラウドサービスであるHiveMQ Cloudの方が管理の手間は少ない。<br>
*: TLS暗号化対応。
<br>
*: 10[KB]/秒までのデータ転送可能。
MQTT機能のみに集中して学習する場合や直感的な管理画面を求める場合は、HiveMQが適している可能性がある。<br>
<br>
https://www.hivemq.com/pricing/<br>
<br>
===== 無料版 =====
* 料金
*: 無料
* デバイス接続数
*: 100台までのデバイス接続可能
* 転送速度
*: 10[KB]/
* データトラフィック
*: 10[GB]データトラフィック/月
* プロトコル
*: MQTT 3.1 / 3.1.1 / 5.0
* SSL / TLS暗号化
*: MQTT over TLS/SSL
* 基本認証ルール
* Websocketサポート
<br>
===== 有料版 =====
* 料金
*: 1時間 $0.34
* デバイス接続数
*: 無制限
* 転送速度
*: 最大1[MB]/秒
* データトラフィック
*: 10[GB]データトラフィック/月
* プロトコル
*: MQTT 3.1 / 3.1.1 / 5.0
* SSL / TLS暗号化
*: MQTT over TLS/SSL
* クライアント証明書認証
* Websocketサポート
* REST API
<br>
 
==== EMQX MQTT (無料枠あり) ====
フルマネージドMQTTサービスである。<br>
複数のクラウドプロバイダ (AWS、GCP、Azure) に対応している。<br>
<br>
SSL / TLS暗号化にも対応している。<br>
<br>
* サーバーレスプラン
*: 1000台までのデバイス接続が可能。
*: シングルノード構成であり、データ転送速度は1[TPS] (Transaction Per Second) までとなっている。
*: <br>
*: <br>
* CloudMQTT (現在はUpstashの一部)
* 専用プラン (料金 : $263 / 月)
*: 専用のクラウド環境内で完全に管理されたMQTTブローカーである。
*: 無料14日間トライアル付き
*: VPCピアリング、NATゲートウェイ、ロードバランシング等の階層オプションを提供している。
*: 40以上のクラウドサービスとのアウトオブボックス統合を提供している。
*: 24時間体制のグローバルな技術サポート付き。
*: <br>
* Premiumプラン (価格 : カスタム価格)
*: Everything in Dedicated Plan (専用プランの全ての機能を含む)
*: マルチアベイラビリティゾーンによる専用ストレージのサポート
*: 専用データベースに保存される永続的なセッション
*: クラスターリンクによるクロスリージョン通信
*: ネイティブKafkaプロトコルサポート
<br>
EMQXでは、KafkaおよびWebhookコネクタの機能が使用できる。<br>
<br>
コネクタ機能により、IoTデバイスのデータを他のシステムとの連携、リアルタイムなデータ処理やイベント監視、サーバーレス環境でも外部システムとの統合が容易になる。<br>
例えば、- デバイスから送信されたセンサーデータをKafkaに転送して分析、デバイスの接続/切断イベントをWebhookで監視システムに通知、メッセージの受信をWebhookでアプリケーションサーバに通知する等。<br>
<br>
* Kafkaコネクタ
*: EMQXで受信したMQTTメッセージをApache Kafkaに自動的に転送できる。
*: MQTT -> Kafka方向のデータ連携が可能。
*: これは、IoTデバイスからのデータをKafkaのトピックに送信して、ストリーム処理やデータ分析に活用できる。
*: <br>
* Webhookコネクタ
*: MQTTのイベント (接続、切断、メッセージの発行等) をHTTP/HTTPSのWebhookとして外部システムに通知できる。
*: 特定のイベントが発生した時、指定したURLにHTTPリクエストを送信する。
*: 外部のWebアプリケーションやサービスと連携可能である。
<br>
個人学習用途では、EMQXサーバーレスを推奨する。<br>
これは、デバイス接続数が多いため様々な実験が可能であること、KafkaやWebhook等の連携が無料で使用できるためIoTシステム全体のアーキテクチャを学習できることが挙げられる。<br>
<br>
https://www.emqx.com/ja/pricing<br>
<br>
==== CloudMQTT (現在はUpstashの一部) ====
*: スモールスケール向けの無料プラン有り。
*: スモールスケール向けの無料プラン有り。
*: 管理画面が理解しやすい。
*: 管理画面が理解しやすい。
118行目: 198行目:
*: 他のAWSサービスと連携可能
*: 他のAWSサービスと連携可能
*: 従量課金制
*: 従量課金制
*: <br>
<br>
* test.mosquitto.org (テスト向けは無料)
==== test.mosquitto.org (テスト向けは無料) ====
*: <u>テストや学習用</u>
<u>テストや学習用に使用される</u><br>
*: セキュリティの保証が無いため、本番環境での使用は非推奨である。
セキュリティの保証が無いため、本番環境での使用は非推奨である。<br>
<br><br>
<br><br>


176行目: 256行目:
* 可能な限り、SSL/TLS通信を使用することを推奨する。
* 可能な限り、SSL/TLS通信を使用することを推奨する。
* 定期的にログを確認して、不正なアクセスがないか監視すること。
* 定期的にログを確認して、不正なアクセスがないか監視すること。
<br>
==== OpenSSL 3を使用する場合 ====
OpenSSL 3を使用して、Mosquittoで通信することは可能である。<br>
ただし、いくつか注意点がある。<br>
<br>
Mosquitto 2.0以降では、OpenSSL 3.0との互換性が確保されている。<br>
ただし、古いバージョンのMosquittoを使用している場合は、OpenSSL 3.0との互換性の問題が発生する可能性がある。<br>
<br>
これは、OpenSSL 3.0で非推奨となった古い暗号化アルゴリズムやAPIの使用に関連している。<br>
<br>
これを解決するには、以下に示すような方法が挙げられる。<br>
* Mosquittoを最新バージョンにアップグレードする。(推奨)
* Mosquittoをソースコードからビルドする時に、-DWITH_TLS_PSKオプションをNOに指定する。
* OpenSSL 3.0のレガシープロバイダを有効にする。<br>これは、/etc/ssl/openssl.cnfファイルの設定が必要となる。
<br>
# /etc/ssl/openssl.cnfファイル
# OpenSSLのレガシープロバイダを有効にする場合
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
[provider_sect]
default = default_sect
legacy = legacy_sect
[default_sect]
activate = 1
[legacy_sect]
activate = 1
<br>
<br>
==== MQTTブローカーのインストール ====
==== MQTTブローカーのインストール ====
311行目: 423行目:
  # 51883ポート : 匿名ユーザを許可
  # 51883ポート : 匿名ユーザを許可
  listener 51883  
  listener 51883  
  allow_anonymous false
  allow_anonymous true
   
   
  password_file /etc/mosquitto/passwd
  password_file /etc/mosquitto/passwd
606行目: 718行目:
*: 大量のメッセージを扱う場合はQoSレベルを適切に選択する。
*: 大量のメッセージを扱う場合はQoSレベルを適切に選択する。
*: リテインメッセージの使用は必要最小限に抑える。
*: リテインメッセージの使用は必要最小限に抑える。
<br><br>
== 接続の制限 ==
mosquitto.confファイルでクライアント接続数を制限することができるが、デフォルトの設定では制限を課していない。<br>
しかし、Linux OSでは制限を課しており、各ユーザに対して1024となっている。<br>
<br>
この制限は、許可されるオープンファイルの最大数である。<br>
<br>
==== コマンドラインからMosquittoを実行する場合 ====
これは、limits.confファイル (/etc/security/limits.conf) を編集することにより、各ユーザごとに変更できる。<br>
<br>
設定を反映させるため、PCを再起動する必要がある。<br>
<br>
PCを再起動した後、制限が変更されているかどうかを確認する。<br>
ulimit -Sn
# または
ulimit -Hn
<br>
ただし、上記の設定は、コマンドラインから起動したmosquittoにのみ影響する。<br>
<br>
==== SystemdサービスからMosquittoを実行する場合 ====
MosquittoをSystemdサービスとして起動する場合は、MosquittoのSystemdサービスユニットファイルに設定を追記する。<br>
# mosquitto.serviceファイル
[Service]
# 最大接続数を4000に設定する場合
LimitNOFILE=4000
<br>
設定を有効にするため、PCを再起動する。<br>
<br>
PCを再起動、および、Mosquittoサービスを実行した後、制限が変更されているかどうかを確認する。<br>
これは、プロセスIDを取得することにより確認できる。<br>
cat /proc/<PID>/limits
<br><br>
<br><br>