Soracom

Users

ドキュメント

制限事項と注意事項

SORACOM Beam の制限事項と注意事項について、ご案内します。

各エントリポイント共通

  • 転送先サーバーが自己署名証明書またはプライベートな認証局で署名された証明書を使用している場合は証明書の検証ができないため接続に失敗します。

TCP → HTTP/HTTPS エントリポイント

  • HTTP(S) に変換時に TCP で送信したデータが分割されることがあります。大きなデータを送信する場合は、HTTP エントリポイントの利用をご検討ください。

MQTT エントリポイント

MQTT エントリポイント には以下の制限事項や注意事項があります。

  • MQTT 接続時 (connect コマンド) のオプションについて
    • connect の keepalive に設定できる値は、0 または 5 以上 から 1200 以下の整数です。それ以外の値を設定した場合、connect リクエストに NOT_AUTHORIZED コードを返却します。
    • Beam では session の状態の保存を行っていませんが、MQTT ブローカーには clean session のパラメータをそのまま転送します。
  • Publish 時
    • 接続先の MQTT ブローカーがサポートしていない QoS を指定した場合、コネクションが切断されたりエラーになったりする場合があります。
  • 無通信時の切断について
    • keepalive に 0 以外の値が設定されているとき、SORACOM Beam は keepalive の 1.5 倍の時間、通信がない場合に TCP コネクションを切断します。
    • keepalive が 0 に設定されている場合、SORACOM Beam は 30 分間通信がない場合に TCP コネクションを切断します。
  • MQTT 接続中にセルラー通信のセッションが切断された場合、SORACOM Beam との TCP セッションは不通となりますが、SORACOM Beam ではそれを検知できません。
    • 端末側で常時接続するユースケースの場合は、keepalive を有効化するか、クライアント側でセルラー通信のセッション断を検知して再接続する機構の導入を強く推奨します。
      keepalive に 5 以上 1200 以下の整数を指定すると、keepalive が有効となり、セッション断を検知できます。keepalive を有効化するとクライアントが指定された間隔で PINGREQ パケットを送出します。
    • セルラー通信の切断は、SORACOM ユーザーコンソールまたは SORACOM API で IoT SIM のセッション切断の操作を行うことで再現できます。
  • Azure IoT Hub、Google IoT Core、PubNub、Watson IoT Platform については、認証情報を設定することでそれぞれに合わせた形式でデータを転送します。詳しくは、Getting Started の以下のページを参照してください。
  • Beam 設定にて種別を「Azure IoT Hub」または「Google Cloud IoT Core」 にして接続する場合はトークンの有効期限が 1 時間で失効します。Azure の場合は X.509 証明書で認証した接続 の利用も検討してください。

プラットフォームバージョン 201509201912 の違い

プラットフォームバージョン 201509 は 2022 年 8 月 1 日にサポートを終了します

引き続き、プラットフォームバージョン 201509 は利用できますが、今後廃止され、動作が 201912 バージョンに統一される予定です (廃止日未定)。 プラットフォームバージョン変更時の注意事項 を確認いただき、すみやかに移行してください。

MQTT エントリポイントの動作はプラットフォームバージョンによって異なります。 プラットフォームバージョンには 201912 (推奨) と 201509 (サポート終了予定) の 2 つがあります。

課金対象メッセージ

デバイスと Beam、Beam と MQTT ブローカーの間でメッセージをやり取りしたときに、それぞれを個別に 1 リクエストとカウントし、リクエスト数に応じて課金されます (*1)。たとえば、クライアントからメッセージを 1 通 PUBLISH した場合、2 リクエストとカウントされます。

項目プラットフォームバージョン 201509プラットフォームバージョン 201912
デバイス → BeamSUBSCRIBE, UNSUBSCRIBE, PUBLISH, PINGREQSUBSCRIBE, UNSUBSCRIBE, PUBLISH
Beam → MQTT ブローカーSUBSCRIBE, UNSUBSCRIBE, PUBLISH, PINGREQSUBSCRIBE, UNSUBSCRIBE, PUBLISH
Beam ← MQTT ブローカーPUBLISHPUBLISH
デバイス ← BeamPUBLISHPUBLISH

MQTT のバージョンおよび仕様に関する違い

項目プラットフォームバージョン 201509プラットフォームバージョン 201912
Beam → MQTT ブローカーに接続する際の MQTT バージョンMQTT バージョン 3.1.1 で接続します。デバイスが指定する MQTT バージョンで接続します。
QoSQoS 0 のみ利用できます。(*1)接続先 MQTT ブローカーが対応する QoS 値を利用できます。たとえば、ブローカー側が QoS 1 に対応している場合は、QoS 1 を利用できます。
will利用できません。接続先 MQTT ブローカーが対応していれば、利用できます
  • (*1) QoS 1、2 を指定してメッセージを送ることはできますが、メッセージの到達性を保証しません。

転送先に接続するプロトコル

項目プラットフォームバージョン 201509プラットフォームバージョン 201912
証明書 (keycert) を利用している場合常に MQTTS プロトコルで転送先に接続されます。転送先に指定されたプロトコルで接続します。
証明書 (keycert) を利用していない場合転送先に指定されたプロトコルで接続します。転送先に指定されたプロトコルで接続します。

MQTT エントリポイントのプラットフォームバージョン変更時の注意事項

プラットフォームバージョンを 201509 から 201912 へ変更する際に、各バージョンの仕様の違いに依存した問題が発生する可能性があります。運用中のデバイスでプラットフォームバージョンを変更する際には、事前の動作確認をお願いいたします。

たとえば、以下のようなケースで、201912 へ変更後に接続エラーが発生することが報告されています。

クライアントが接続時に MQTT バージョンの指定をしていない場合 (特に Azure IoT Hub、Google IoT Core を利用している場合)

MQTT バージョンを確認してください

MQTT ブローカーによっては、MQTT バージョン 3.1 で接続すると、接続エラーが発生します。デバイスが MQTT バージョン 3.1.1 で接続していることを確認してください。MQTT バージョンの変更方法については MQTT クライアントやデバイスの取扱説明書を参照してください。

プラットフォームバージョン 201509 においては、クライアントが指定している MQTT バージョンに関わらず、ソラコムプラットフォームが MQTT バージョン 3.1.1 を使用して MQTT ブローカーに接続していました。

プラットフォームバージョン 201912 においては、アーキテクチャの変更によって、常にクライアントが指定する MQTT バージョンを使用して接続するように変更されました。そのため、クライアントが MQTT ブローカーが対応していない MQTT バージョン (3.1) を指定して接続した場合、接続エラーが発生します。また、デフォルトの MQTT バージョンが 3.1 になっている MQTT クライアントやデバイスが複数確認されています。

Azure IoT Hub または Google IoT Core を利用している場合

Azure IoT Hub または Google IoT Core は MQTT バージョン 3.1 をサポートしていないことを確認しています。 これらを利用している場合は、クライアントが接続時に MQTT バージョン 3.1.1 を指定していることを事前に必ず確認してください。

なお、MQTT バージョンの変更方法については MQTT クライアントやデバイスの取扱説明書を参照してください。

転送先に接続するプロトコルに MQTT を指定した状態で証明書を利用していた場合

プラットフォームバージョン 201509 においては、証明書 (keycert) を利用している場合、転送先に接続するプロトコルの設定に関わらず MQTTS プロトコルで転送先に接続されます。

プラットフォームバージョン 201912 においては、証明書の利用有無に関わらず、転送先に指定されたプロトコルで接続します。

転送先のプロトコルが正しく設定されているかを事前に確認ください。