2018年9月にPublic Previewと同時に開発キットを手に入れることができるようになり、誰でも試すことができるAzure Sphere。
発表当初から、ずーーーーーーーーーーーーーーーーーーーっと追っていますが、いまひとつ盛り上がっていない(利用されていない)と感じています。盛り上がっているのはわたしだけ?
そんなちょっぴり悲しいもったいないAzure Sphereですが、いまの状況と思うところを書いておこうと思います。
Azure Sphereとは?

公式ドキュメントでは、
毎年数十億ものデバイスが新たに接続されているため、お客様側のセキュリティ保護はかつてないほど重要です。Azure Sphere セキュリティ サービスを使用して、データ、プライバシー、物理的な安全性、インフラストラクチャを保護することができます。これは、ハードウェア、ソフトウェア、クラウド サービスにおける Microsoft の何十年にも及ぶ経験を基に構築されており、IoT デバイスのためのターンキー セキュリティ ソリューションが提供されます。
とあります。ちょっと分かりにくいですね。
以前、英語の公式ドキュメントには、次のように書かれていました。
A solution for creating highly secured, connected MCU-powered devices
ようするに、Azure Sphereとは「ソリューション」です。ここで「サービス」ではなく「ソリューション」と言っている点が大事です。
どんなソリューションかというと、「高いセキュリティレベルのIoT機器」を「作るための」ソリューションです。これは、Azure Sphereというソリューションに乗っかれば、細かいことは考えなくても!?セキュリティ対策したIoT機器を開発、運用できるということを表しています。
Azure Sphereソリューションは、次の3つのサービス・機器で高いセキュリティを維持します。

- Certified chips (Azure Sphere Certified Chips)
マイクロソフトのセキュリティテクノロジが組み込まれた専用のMCUチップを使います。 - Operating system (Azure Sphere OS)
アプリケーション保護やセキュリティ更新などが組み込まれた専用のOSを使います。 - Cloud security (Azure Sphere Security Service)
OSのセキュリティ更新やアプリケーション配布を提供します。
MCUチップ、OS、クラウドサービスの3つを協調して使うことで、高いセキュリティを実現しています。
技術的にもっと詳しく知りたい方は、The Seven Properties of Highly Secure Devicesをご参照ください。
Azure Sphere Certified Chips - MT3620
現在、入手可能なAzure Sphere Certified ChipsはMediaTekのMT3620のみです。
ペリフェラルはGPIO, PWM, UART, SPI, I2C, I2S, ADCを内蔵しています。GPIO, UART, SPI, I2Cがあれば、大抵のことは事足りるでしょう。
インターネット接続は2.4GHz/5GHzに対応したWi-Fiを内蔵しています。オプションの基板を追加することで有線Ethernetを使うこともできます。

Azure Sphereアプリケーション開発
マイクロソフトからWindowsとLinuxの開発手順が提供されています。
Azure Sphere Certified Chips上で動かすアプリケーションは、C言語で開発します。C++ではないです。C言語です。他の言語で開発したものをリンクして動かすことはできますが、自己責任になります。アプリケーションはLinux Kernel上で動きます。そのため、OS周辺の操作はLinuxシステムコールを使います。

ここがすごいぞ! Azure Sphere!
Azure Sphereのセキュリティ機能ばかりが宣伝されていましたが、3年間使ってみて、ようやく素晴らしさが分かってきました。
Linux Kernelの採用(★★★)
MCUにWi-Fi付けてTCP/IP通信するのはもはや珍しくもなんともないのですが、実際にWi-Fi付き(やWi-Fi外付け)のMCUやライブラリを使っていると様々なバグに遭遇します。証明書の扱いをミスっていたり、高負荷なLANだとハングしたり、、、マジで辛いし、よく出会います。会いたくないけど。
Azure SphereはLinux Kernelを採用して、Linux向けドライバを使用しています。すでに多くのユーザーや開発者にもまれたコードなので、かなりの安定感。また、デバッグの安定感もすばらしいです。(Azure Sphere内部にGDB Serverを立てて、TCPで通信しています)
継続的なセキュリティ更新(★★★)
マイクロソフトがほぼ毎月、セキュリティ更新をリリースしてくれます。
「OS再起動するなんてけしからん」とか「毎月動作確認するのかよコラ」などの否定的意見もありますが、セキュリティ情報をキャッチアップして開発、リリースすることを考えると、とても自力では運用維持できないと思います。
アプリケーション配布(★★★)
Azure Sphere Security ServiceからMCUのアプリケーションを更新することができます。
この機能も「まぁOTAだよね。」とサラッと流れがちですが、、、Azure Sphere OSとAzure Sphere Security Serviceによって提供された機能なので、自身のアプリケーションに手を加えることなく、アプリケーション配布をすぐに利用することができます。
開発ツール(★★☆)
一般的に、組み込みアプリケーション開発は開発環境を整備するのが一苦労です。デバッギングまで出来るようにしようとすると、デバッグアダプタを入手して結線して、必要なツールをダウンロードして、場合によってはツールをソースからコンパイルしないといけないこともあります。(まぁまぁある)
Azure Sphereは、マイクロソフトが複数のツールをワンパックにしたSDKを提供しているので、あちこち取ってきて組み合わせてセットアップするといった煩わしさがありません。また、デバッギング機能も使えるようになっているので、組み込み開発に不慣れな人でも取り掛かりやすいです。
オールインワンチップ(★☆☆)
Microprocessor, Wi-Fi, Flash, RAM, Pluton(Security subsystem)全てがワンチップに入っています。
量産することを考えると、使用する部品が少ないのは助かります。
ここが残念。あじゅーるすふぃあ。
一方で、もう少し改善すればもっと利用してもらえるんじゃないか?と思うところもあります。
Wi-Fiセットアップ(★★★)
製品として出したときに、エンドユーザーにWi-Fiアクセスポイントをどうやってセットアップしてもらうかという課題があります。
よくあるWi-Fiデバイスでは、一時的にWi-Fiアクセスポイントになって、セットアップ用のWebページを表示しますが、現在のAzure Sphereではこのような振る舞いを実装できません。
リクレーム(★★☆)
「クレーム」をリセットやAzure Sphere Tenant間移動できない。
客先納品したデバイスで不具合が起きたときに手元のAzure Sphere Tenantに移動して動作確認できない、といったケースがあります。
モジュールへの書き込み(★☆☆)
試作と量産の間の、モジュール使用に対するケアが弱い気がします。
デバイスが数十台規模となったときに、開発キットでは大げさ&コスト高、チップでは開発コストが高くなってしまいます。そこで、一般的には「モジュール」と呼ばれる、小さいStamper基板にチップを載せた製品を使います。MT3620が載ったモジュールは数社から出ていて、技適OKのものもありますが、残念なことに、このモジュールへ書き込むための書き込み装置(プログラマ)が販売されていません。J-Linkのような汎用アダプタも使うことができないため、自作しなければいけないです。
ペリフェラルが弱い(番外)
ちょー個人的見解。
他のMCUに比べて、一部ペリフェラルの機能が少なく、希望する機能を実装できないときがありました。たとえば、I2Sマスターとか。
また、ペリフェラルの操作方法がわかるデータシートが公開されていないため、Cortex-M4コアでガンガンにリアルタイム処理するぞーというのも現時点ではやりにくいです。
まとめ
いま感じていることを書きましたが、だいぶまとまりのない文章になってしまいました。
こうやって書いてみると、だいぶ粗削りでチャレンジングなソリューションだなぁと感じます。
賞賛・訂正・異論・反論・質問など、大歓迎です。コメント欄に気楽に書いてもらえると嬉しいです。
質問・要望
よく聞く、質問・要望と現在の状況です。
Q1.何年後まで使えるの?
Azure SphereはAzure Sphere Security Serviceが終了すると動かなくなってしまいます。厳密には、ネットに通信できなくなります。今後何年間使うことができるか気になるところです。
Azure Sphereの価格ページによると、
- Azure Sphere OSのサポートとセキュリティ更新は、2031年7月まで。
- Azure Sphere Security Serviceは、ずっと。(ずっと?)
のようです。
さすがにAzure Sphere Security Serviceが未来永劫ずっと提供され続けるのは考えにくいので、、、Azure Sphereソリューションは2031年7月まで、約10年後までは確実に使えると解釈しておいたほうがいいでしょう。
なお、MT3620がいつまで提供されるのかは、公開されている情報は見つかりませんでした。情報提供求む。
Q2.お高いの?
Azure Sphere Certified Chips(MT3620)
MT3620は~1002.4円です(Azure Sphereの価格ページ)。「~」と表現されているのは、たくさん買うと安くなるんでしょうね。MT3620の販売は(マイクロソフトではなく)アヴネットです。秋葉原の店頭などでは売っていません。MT3620は1個だけ購入とかは出来ません。
すぐにお試ししたい人向けに、SeeedからMT3620が載った開発キットが販売されています。こちらは国内電子部品販売店で購入することができます。価格は1万円程度。
Azure Sphere OS
Azure Sphere OSは、マイクロソフトによって継続的にセキュリティ更新が提供されますが、無料です。
サポートに関しては、マイクロソフトのプレミアサポートサービスで行っているようです。こちらはそれ相応な額になります。
Azure Sphere Security Service
Azure Sphere Security Serviceは、デバイス認証やOS配布、アプリケーション配布といったサービスが提供されますが、無料です。
トータルコスト
コストを列挙すると、
- Azure Sphere Certified Chips(MT3620) ... ~1002.4円(or 開発キット 1万円程度)
- Azure Sphere OS ... 無料
- Azure Sphere Security Service ... 無料
と、MCUチップを購入すれば、10年間、追加費用が発生しないです。
OSセキュリティ更新、OS配布、アプリケーション配布には一切の費用がかかりません!(もちろん、他のAzureサービスを利用した場合は、都度、費用がかかります。)
Q3.Azureサービスにしか接続できないのでは?
いいえ、マイクロソフト以外のクラウドサービスにも接続できます。
HTTP/HTTPS Webサービスであればlibcurlライブラリを使って接続することができます。それ以外のプロトコルは、wolfSSLライブラリを使うことができるので、(プロトコルをがんばって実装すれば)接続することができます。
ただし、Azureサービスを一切使わない運用はできません。セキュリティを担保するために、Azure Sphere Security Serviceと通信して認証しないとインターネットへ通信することが出来ない仕組みになっています。
Q4.一度使ったデバイスを他人に譲渡できないよね?
はい、現在もリクレームはできません。
Azure Sphere Certified Chipsを最初に使用する前に、Azure Sphere Security Service(のAzure Sphere Tenant)と紐づけする「クレーム」という操作が必須ですが、このクレーム操作をリセットもしくは他人のAzure Sphere Tenantへ移すことができません。
もちろん、当初から多くのユーザーが「リセットもしくは移せるようにしてほしい。」とリクエストしていますが、技術的になのか、工数的になのか、現在も出来ないです。情報提供求む。
Q5.Azure Active Directoryを立てるの面倒なんだけど。
現在はAzure Active Directoryの用意は不要になりました。
当初は、Azure Sphere TenantとAzure Active Directoryを紐づけが必要だったので、Azure Sphere Tenant毎にAzure Active Directoryを用意する必要がありました。
現在はこのあたりの仕組みが変更されて、個別にAzure Active Directoryを用意する必要はありません。(面倒だったので、地味にうれしい)
Q6.アプリケーション開発はWindows限定ですよね?
いいえ、現在はWindowsとLinuxで開発可能です。(MacOSXでも可能なのか?)
当初はAzure Sphere SDKがVisual Studio拡張で提供されていたことから、Windowsでしか開発できませんでした。
現在はCMakeでコンパイルする仕組みに変更されて、WindowsとLinuxで開発できるツールと手順が提供されています。
Q7.Linuxなんだよね?PythonやShellは動く?
いいえ、動きません。
Linux Kernelを採用していますが、PythonやShellは提供されていません。
C言語で開発、コンパイルした実行ファイルのみ動かすことができます。
Q8.OSやアプリの更新は無停止?
いいえ、OSが再起動します。
クラウドからOSやアプリの配布ができますが、更新時に次のような影響があります。
- OSやアプリのイメージダウンロードで、アプリの動作が遅くなる
- OSやアプリの入れ替えでOSが再起動する
残念ながら、これを無くすことはできません。
更新が発生する前提で、アプリケーションやデバイス全体を設計してください。
なお、不意に再起動してしまうのを防ぐために、更新を遅延する方法があります。
Q9.OSやアプリ配布をAzureポータルで操作できないか?
そのようなWebページは用意されていません。
マイクロソフトからは、Azure Sphere CLIによるコマンドライン操作と、REST APIのAzure Sphere Public API、Visual Studio Code拡張のAzure Sphere UIが提供されています。
非公式でよければ、わたしが作ったWindowsアプリ「Azure Sphere Explorer」があります。(推し)
参考リンク
スライド
2018/8/24 Azure Sphereコミュニティ勉強会
2018/10/1 Azure Sphere MCU
2018/11/17 Azure Sphere MCU
2019/4/6 Azure Sphereの今
2020/2/6 Azure Sphereのマルチコア
2020/4/25 Azure Sphereって実際どうなの?
2020/7/2 Azure Sphere開発する前に知っておくこと
2020/7/3 Azure Sphereリアルタイム処理
2020/7/27 これからAzure Sphereで開発する方へ
ビデオ
2020/6/17-7/17 de:code 2020 X02 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介
2020/7/27 【オンライン】Azure Sphere技術セミナー!最新のIoTセキュリティソリューションとは!
ハードウェア
MT3620開発キット(RDB)
本体
- Azure Sphere MT3620 Development Kit_JP Version
- Azure Sphere MT3620 Development Kit_US Version
- Azure Sphere MT3620 Development Kit_EU Version
オプション
- MT3620 Grove Shield
- Grove Starter Kit for Azure Sphere MT3620 Development Kit
- MT3620 G Shield
- MT3620 Ethernet Shield v1.0