Azure IoT Hub によるデバイスからのファイルのアップロード

執筆者: Nicole Berdy (Program Manager II, Azure IoT)

このポストは、6 月 6 日に投稿された Upload files from devices with Azure IoT Hub の翻訳です。

 

このたび、IoT Hub を使用してデバイスからクラウドにファイルをアップロードする Azure IoT Hub の新機能が追加されました。これはユーザーの皆様から最もご要望の多かった機能の 1 つで、特にテレメトリ チャネルでは送信できない大きさのファイルを生成する既存のシステムを使用しているお客様から強いご要望が寄せられていました。

IoT Hub は、メッセージ ブローカーではなくディスパッチャーとして機能します。デバイスは IoT Hub に対して、アップロードするファイルに固有のストレージ トークンを要求します。その後、IoT Hub は有効期限の短い (1 日間) SAS URI をデバイスに返します。ストレージの SAS URI には有効期限が非常に長いものもありますが、このケースでは、万一デバイスがハッキングされた場合を想定し、ストレージに対するセキュリティ リスクを低減するために、有効期限を意図的に短く設定してあります。デバイスは SAS URI を使用してファイルをストレージにアップロードし、アップロードが完了すると IoT Hub に完了通知を送信します。IoT Hub はファイルがアップロードされたことを確認し、新しいサービス側ファイル通知メッセージング エンドポイントにファイルのアップロード通知を追加します。IoT Hub は通信中のすべてのファイルのアップロード要求を追跡し、IoT Hub がデバイスからアップロード通知を受信する前に SAS URI の有効期限が切れた場合にはログにエラーを記録します。IoT Hub から SAS URI を要求するメッセージと IoT Hub にファイルのアップロード完了を通知するメッセージは、メッセージ件数の制限に含まれ、その件数に応じて料金が発生します。

IoT Hub デバイス クライアント SDK (<https://github.com/Azure/azure-iot-sdks、英語>) を使用すると、デバイスからファイルを簡単にアップロードできます。ストレージ アカウントを IoT Hub に関連付けたら、デバイスから新しい UploadFromStringAsync API を呼び出すだけでファイルをアップロードできます。IoT Hub からファイルのアップロード通知を受信するように設定している場合、アップロードが完了すると、新しいエンドポイントの {iot hub}.azure-devices.net/messages/servicebound/filenotifications に通知が送信されます。

IoT Hub デバイス クライアント SDK を使用していない場合でも IoT Hub を使用してファイルをアップロードすることは可能ですが、操作は多少複雑になります。IoT Hub では、新しい 2 つの REST エンドポイントを使用してファイルをアップロードします。1 つはストレージの SAS URI を取得するためのもので、もう 1 つは IoT Hub にアップロード完了通知を送信するためのものです。デバイスは {iot hub}.azure-devices.net/devices/{deviceId}/files/{filename} の IoT Hub に GET を送信してファイルのアップロード処理を開始します。その後、IoT Hub はアップロードするファイルに固有の SAS URI と、アップロード完了後に使用される関連付け ID を返します。Azure Storage SDK を使用したストレージへのファイルのアップロードはデバイス側で行います。アップロードが完了すると、デバイスは最初に GET で受信した関連付け ID を使用して、{iot hub}.azure-devices.net/devices/{deviceId}/messages/files/notifications/{correlationId} の IoT Hub に POST を送信します。

IoT Hub の処理監視機能が更新され、新たに [File upload] カテゴリが追加されました。これにより、この機能を使用した場合にソリューションのデバッグを行うことができます。この新しいカテゴリは、IoT Hub との通信中に以下のようなエラーが発生した場合に使用されます。

  • デバイスが IoT Hub にファイルのアップロード失敗を通知した場合

 

  • デバイスが IoT Hub にアップロード完了を通知する前に SAS URI の有効期限が切れた場合

 

  • IoT Hub での通知メッセージの作成中にファイルがストレージ内に見つからない場合

 

  • IoT Hub が関連付けられたストレージ アカウントから SAS URI を作成できない場合 (キー ロールオーバーが完了していない場合など)

 

これまで、IoT ソリューションからファイルをクラウドにアップロードするためには大量のカスタム コードを作成する必要がありましたが、この新機能により作業は大幅に簡素化されました。アップロード エクスペリエンスが簡素化された以外に、IoT Hub にはファイルのアップロード完了通知とデバッグに役立つ新しい処理監視機能が追加されました。IoT ソリューションでファイルのアップロード機能を使用する方法の詳細については、こちらのドキュメントをご覧ください。IoT Hub のファイルのアップロード機能をご活用いただければ幸いです。