IoT Hub の一時的なエラーの対処について

IoT Hub との通信において、サービス側のエラーとしてタイムアウト エラーや Internal Server Error などが稀に発生する場合があります。例えば、IoT デバイス上のアプリケーションから、IoT Hub へ HTTPS でメッセージを送信した際、これらのエラーを返すことがありますが、ほとんどの場合サービス側の一時的な負荷やネットワークの問題により発生する一過性の事象と考えられます。マイクロソフトではできる限りこうしたエラーを減らすようサービス品質の向上に努めていますが、ネットワークの状態およびその他の予測不能な要因のため、エラーを完全に防ぐことは現実的に困難です。   また、デバイスと IoT Hub の接続は多くの場合パブリックなインターネットを経由しており、インターネットもしくはオンプレミスのネットワークの状態によって一時的なエラーが発生する可能性も考えられるため、IoT デバイス側に何らかの再試行(リトライ) ロジックを実装していただくことを推奨しています。   この詳細について、以下のドキュメントにも記載がありますので、ご参考になりますと幸いです。   一時的な障害の処理 <https://docs.microsoft.com/ja-jp/azure/architecture/best-practices/transient-faults >   再試行パターン <https://docs.microsoft.com/ja-jp/azure/architecture/patterns/retry >   もし時間をおいて複数回リトライしても解消せず、継続してエラーが発生している場合は一時的な問題ではない可能性があるため、必要に応じてサポートまでお問い合わせください。   上記の内容がお役に立てば幸いです。   Azure IoT 開発サポートチーム 津田  


Device Provisioning Service のグループ登録で使用する証明書について

こんにちは。Azure IoT 開発サポートチームの中神です。 Device Provisioning Service では X.509 証明書を使ったデバイスの認証ならびにプロビジョニング (デバイスの登録) をサポートします。その方法としては以下の 2 種類があります。 [1] デバイスの自己署名証明書を使った個別登録 (Individual Enrollment) [2] ルート認証局 (Root CA) や中間認証局 (Intermediate CA) で署名された証明書を使うグループ登録 (Group Enrollment) 今回は [2] のグループ登録で使用する証明書とその注意点についてご紹介します。 X.509 証明書を使ったデバイス登録では、SSL / TLS での接続時にデバイスがクライアント証明書を Device Provisioning Service に対して提示します。Device Provisioning Service は提示された証明書を検証して、デバイス登録の可否および対象となる登録エントリを判断します。そして該当する登録エントリで指定された接続情報をデバイスに対して返すことにより、デバイスは IoT Hub に接続することが可能になります。 ここでグループ登録に使用される証明書は一般に以下のような証明書チェーンを構成しています。左端が Root CA の発行する自己署名証明書、右端がデバイス個別のクライアント証明書です。 また Device Provisioning Service における検証済みの証明書とは、Device Provisioning…


Azure IoT Edge の GA (一般提供) について

Azure IoT 開発サポートチームの S.M です。   2018 年 6 月 27 日に Azure IoT Edge が GA (一般提供) となりました。IoT Edge は主に直接インターネット経由で IoT Hub に接続できないデバイスに対してクラウドテクノロジーを提供するための製品になります。GA に伴い行われた主な更新は以下の通りになります。   ● IoT EdgeのソースコードはGitHubから入手いただけるようになりました。   ● IoT Edge のランタイムはオープンソースコンテナーの Moby でサポートされるようになりました。 *Docker CE and Docker EEも引き続き利用可能ですが、Microsoft はこれら製品の不具合などに対して修正ができないことから、Moby の利用を推奨しています。なお、Preview時に作成いただいた既存のDockerベースのモジュールは引き続きそのままご利用いただけます。   ● IoT Edge デバイスの Certification プログラムが開始されました。なお、IoT Edge デバイスCertification の取得は必須ではございません。   ●…


IoT Hub、IoT Edge のゲートウェイとリーフデバイスの時刻について

IoT Hub、IoT Edge のゲートウェイとリーフデバイスの時刻が一致しない場合、接続が行えなくなる事象が発生する場合があります。   IoT Edge のゲートウェイは、リーフデバイスの代わりに、IoT Hub とセキュアな接続を行うために、SAS トークンを使用します。 そして、このSAS トークンは、生成を行うクライアントの現在時刻を元に有効期限を設定しており、1 時間に1 回生成され直されます。 実際、edgeHub のログに以下のように、 “Getting new token from the client…” のログが定期的に表示されます。   [INF] – Attempting to connect to IoT Hub for client <リーフデバイス名> via AMQP… [INF] – Existing token not found for <リーフデバイス名>. Getting new token from the client… [INF] – Device connection removed for device <リーフデバイス名>   – SAS…


Azure Portal の IoT Hub ブレードが正常に表示されない場合の切り分け方法

Azure IoT 開発サポートチームの S.M です。 Azure Portal 上で IoT Hub (またはその他サービスのブレードも含め) の表示が正常に行われない現象が発生した場合の切り分け方法についてご案内いたします。この現象は、ブレード内の表示内容に更新 (新しいサービスのボタンが追加された等) が行われた場合、ブラウザが持つキャッシュ情報との整合性がとれないため発生する場合があります。この現象をご確認いただいた際は、切り分けのため、ブラウザのキャッシュをクリアしていただくか、キャッシュの影響を受けないブラウザの InPrivate モードをご利用いただき、表示が改善されるかご確認ください。 こちらのブログでは Internet Explorer と Google Chrome について対処策をご紹介いたします。この方法は IoT Hub に限らず Azure ポータルの表示で何か問題があった際に、最初の切り分けとしてご案内させていただくことが多いものとなりますため、他サービス含め今後もし同様の事象がありました際にお役に立ちましたら幸いです。 なお、こちらの切り分けを行っていただいても問題が解決されない場合は弊社サポートまでお問い合わせください。 ————————————————————————  1. InPrivate ブラウズ モードの起動方法 (Internet Explorer) ———————————————————————— InPrivate ブラウズ モードでは、既存のブラウザー キャッシュやセッションに影響されない通信が可能となります。 そのため、ブラウザーのキャッシュなどの影響を受けている事象について、回避が可能となります。   Internet Explorer を起動します。 Ctrl + Shift + P を押下し InPrivate ブラウズ モードを起動します。…


クラウド側から IoT Edge 上のモジュールの状態を監視する方法

クラウド側から IoT Edge 上のモジュールの状態を監視する方法をご案内します。 ただし、Azure IoT Edge は現在プレビューであるため、一般公開時には変更となる可能性がございます点にご留意ください。   1. Azure ポータルから状態を確認 ======================= 以下の手順でAzure ポータルよりご確認いただくことができます。   (1)         Azure ポータルのIoT Hub の左側のペインから [IoT Edge (preview)] をクリックし、右側のペインで IoT Edge デバイスの デバイス ID をクリックします。     (2)         [デバイスの詳細] 画面の下部の Deployed Modules タブで$edgeAgent と$edgeHub などの各モジュールのRUNTIME STATUS がrunning となっていることが確認できます。     2. プログラムから確認する手順 ======================= プログラムから監視する場合は、HTTP REST API を利用することでモジュール ツインから状態を取得可能です。  …


Azure IoT Edge で透過的なゲートウェイ デバイスを作成する手順の一例

(更新 2018/07/20) – IoT Edge の一般提供 (GA) 開始後の情報について追記しました。   IoT Edge は現在プレビューですが、「透過的なゲートウェイとして動作する IoT Edge デバイスを作成する – プレビュー」のドキュメントの具体的な手順に関するご質問をいただいておりますので、私の手元で確認した手順を一つの構成例としてご案内します。   弊社が公開している構成例として、すでに以下のようなページがありますが、今回ご案内する手順では、両方を参考にして、後者の、IoT Edge のゲートウェイをLinux (ローカルPC 上の仮想マシン)、IoT デバイスをRaspberry Pi 3 としています。   ・IoT Edge のゲートウェイがWindows、IoT デバイスがRaspberry Pi 3 の例   IOT EDGE PYTHON RASPBERRYPI CONNET TRANSPARENT GATEWAY < https://github.com/Azure-Samples/iot-edge-python-raspberrypi-connect-transparent-gateway >   ・IoT Edge のゲートウェイとIoT デバイスをともにLinux のAzure VM 1 つの中に持つ例…


IoT Edge ランタイムのバージョンアップの手順

IoT Edge ランタイムのバージョンアップの手順をご案内します。 ただし、Azure IoT Edge は現在プレビューであるため、一般公開時には変更となる可能性がございます点にご留意ください。   IoT Edgeランタイムのバージョンアップの手順   IoT Edge ランタイムには、Edge Agent とEdge Hub が含まれるため、それぞれのバージョンアップの手順をご案内いたします。   1-1.      Edge Agent のバージョンアップ手順   Edge Agent は、プレビュー段階では、クラウドからバージョンアップする方法はありません。そのため、IoT Edge 上で以下のコマンドを実行します。   (A)         すでに IoT Edge ランタイムがデプロイされており、その Edge Agent のバージョンアップを行う場合   sudo iotedgectl update –image microsoft/azureiotedge-agent:1.0.0-preview022   上記コマンドの「microsoft/azureiotedge-agent:1.0.0-preview022」の部分は、以下のサイトで公開されているレポジトリからお選びいただけます。   microsoft/azureiotedge-agent < https://hub.docker.com/r/microsoft/azureiotedge-agent/tags/ >   IoT Edge ランタイム実行中に上記コマンドを実行していただくことができます。…


IoT Edge ランタイムの再起動が必要な場合について

IoT Edge は現在プレビューですが、IoT Edge ランタイムの再起動(iotedgectl restart)が必要な場合についてのご質問と回答をご案内します。   Q. IoT Edge ランタイムが再起動が必要な場合とは、どのようなオペレーションを実施した場合でしょうか?例えば、運用中にIoT Edge 配下に新規デバイスを追加した場合、IoT Edge ランタイムの再起動が必要になりますでしょうか?   A. IoT Edge ランタイムの再起動が必要となる場合は、「iotedgectl setup」のようなランタイム自体の設定変更を行った場合です。例えば、Edge ランタイムの接続文字列(connection string) を変更したり、モジュールのレジストリの資格情報(container registry credential) を追加する場合などが挙げられます。   IoT Edge配下に新規デバイスを追加した際、すなわちIoT Edge ゲートウェイに新しいリーフデバイスをMQTT プロトコルで接続する時に、IoT Edge ランタイムの再起動は必要ありません。   Azure ポータルからの変更([Specify Routes] でルート変更する場合も含む) では、IoT Edge ランタイムを再起動する必要はありません。     上記の内容がお役に立てば幸いです。   Azure IoT 開発サポートチーム 津田  


タイムアウトエラーについて (MQTT / IoT Device SDK for Java)

今回は IoT Device SDK for Java で MQTT プロトコルを利用した時のタイムアウト値について説明いたします。 Device SDK for Java における MQTT プロトコルでは、IoT Hub とのキープアライブのタイムアウト値として 230 秒という値が設定されております。このキープアライブタイムアウト値はハードコードされており、デバイス アプリ側からは変更することができません。また、キープアライブのインターバル値も 230 秒で、こちらも変更できません。 これは SDK の MqttConnection.java に定義されています。     //mqtt connection options     private static final int KEEP_ALIVE_INTERVAL = 230; ソースコードはこちら https://github.com/Azure/azure-iot-sdk-java/blob/master/device/iot-device-client/src/main/java/com/microsoft/azure/sdk/iot/device/transport/mqtt/MqttConnection.java タイムアウトが発生すると、次のようなエラーメッセージが出力されます。 Timed out as no activity, keepAlive=230,000 lastOutboundActivity=2,623,682,362,159 lastInboundActivity=2,623,672,132,304 time=2,623,672,592,158 lastPing=2,623,672,362,159 [水 03…