makestack - ipa · 楽しいiotプロトタイピング •...
TRANSCRIPT
MakeStack開発者体験に注力するIoT PaaS
怒田 晟也
自己紹介
• 怒田 晟也 (ぬた せいや)
• 筑波大学 情報科学類 4年暗号・情報セキュリティ研究室
• 2016年度 未踏IT人材発掘・育成事業スーパークリエータ認定
IoT開発の流れ
プロトタイピング 量産化デザイン
プロトタイピング 量産化デザイン
楽しいIoTプロトタイピング
• 画面の中だけでなく,物理世界に干渉できる刺激的な体験
• Webブラウザから遠隔操作したり監視したり
• アイデア次第で楽しく実用的な物も作れる
意味が分からない おー光った!
ただひとつ致命的な問題が
ひらすら面倒くさい
IoTプラットフォームあるある 「まずRaspbianをインストール」
$ wget https://downloads.raspberrypi.org/raspbian_lite_latest $ unzip *.zip $ dd if= 2017-01-11-raspbian-jessie-lite.img of=/dev/disks2 bs=4m $ nmap 192.168.88.0/24 $ scp ~/.ssh/id_rsa.pub [email protected]:.ssh/authorized_keys $ ssh 192.168.88.67 -l pi
$ sudo passwd $ sudo apt-get update && sudo apt-get upgrade $ sudo apt install -y node i2c-tools $ # Install the IoT platform stuffs $ sudo raspi-config$ sudo reboot
Linuxのセットアップがやりたかったのではない
Arduino業界あるある 「ひたすら冗長なコード」
// connect to host const char* host = "192.168.12.1"; int port = 443; if (client.connect(host, port)) { Serial1.print("Connection to "); Serial1.print(host); Serial1.println(" established."); // check the fingerprint of the SSL cert verifyFingerprint(); // send GET request Serial1.println("Sending a message to the server:"); client.print(String("GET /") + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n" + "\r\n"); Serial1.println(String("GET /") + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n" + "\r\n"); blinkSent(); delay(500); // get response int success = 0; failcounter = 10000; while (client.connected()) {
何が悲しくてこんなに長い冗長なコードを書いているのか
https://https://github.com/pinae/ESP8266-Dashより (GPLv2)
「簡単にIoTデバイス開発できるよ」系サービス
Particle.io
RuffMongoose OS
Arduino CREATEresin.io
mbed
johny-fivePlatformIO
isaax
悲しい現実
前時代的で楽しくない開発環境 快適な開発環境と,直感的で便利なAPIでデバイスの開発をしたい
インターネットデバイスをいじれない (一部サービス)
デバイスの初期設定を済ませたら,後は全てリモートから開発したい
OSのアップデートなんてものはない (一部サービス)
アプリのアップデートの面倒は見るがOSのアップデートは考えない
IoTデバイスの構成
ハードウェア
マイコン
通信モジュール
センサー
アクチュエータ
ソフトウェア
ビジネスロジック
管理エージェント
OS
カーネル
自社サービス
Webサービス
データ蓄積
データ解析
デバイス操作
サーバ
デバイス管理
デバイス設定
アプリイメージ配布
OSイメージ配布
IoTソフトウェアスタックの共通基盤を提供
ハードウェア
マイコン
通信モジュール
センサー
アクチュエータ
ソフトウェア
ビジネスロジック
管理エージェント
OS
カーネル
自社サービス
Webサービス
データ蓄積
データ解析
デバイス操作
サーバ
デバイス管理
デバイス設定
アプリイメージ配布
OSイメージ配布
作りたいものに集中できるIoTプロトタイピングフレームワーク
MakeStackA “batteries-included” IoT PaaS for super-rapid prototyping.
セットアップからデプロイまで
ユーザ登録
デバイスにMakeStack OSをインストール
デバイスのセットアップはこれで終わり!
アプリを新規作成
デバイスを作ったアプリに追加
連携する外部サービスを登録
コードを書いて…
クリックひとつでリモートデプロイ
-完-
色んな機能盛りだくさん
みんな大好きCLI開発者ツール
かんたん外部サービス連携
自前のサーバで自由に開発 サーバレスでサクッと作る
普段使っているサービスに繋げるデバイスからのデータをThingSpeakやDatadogに流す
sakura.ioでLTEからリモート監視・デプロイ
デバイスを登録するだけ!
https://sakura.io
Node-REDでIoTデバイスプログラミング
リモートのデバイスからのログもリアルタイムで見れます
設計と実装
アーキテクチャ
デバイス
MakeStackサーバ
ログ,センサーデータ
アップデート,設定, アプリデータ
連携
バックエンドサーバ経由で
コーディング・設定
開発者
デバイスのソフトウェアスタック
ハードウェア
MakeStack Linux
アプリ
API エージェント
Linux
プラグイン
Node.js
アプリ実行環境
• アプリはZIPファイルとしてデプロイ(AWS LambdaのようにGoも使える)
• 独自Linuxディストリビューション
• initramfsに全て同梱
• カーネル含めて13MB
• エージェントがMakeStackサーバとの通信・アプリ管理を担当
• 通信プロトコルは独自 (後述)
• Raspberry Pi 3に対応
SMMS: Simple Management/Messaging Protocol
• Type, Length, Valueが並ぶだけのシンプルな独自プロトコル • デバイスの状態,ログ,設定,アプリイメージなどなど
• 柔軟性・実装の簡単さを重視
• 下層レイヤに求めることは「データを送受信できる」こと
• UDPでもHTTPでもICMPでもDNSでも,SMMSを実装すればアプリから透過的に通信できる
セキュリティ
セキュリティ
ハードウェア
MakeStack Linux
アプリ
API エージェント
Linux
プラグイン
Node.js
アプリ実行環境
• telnet/sshなどの余計なものは一切無し
• アプリはAppArmorのアクセス制御下
• 通信はHTTPS/sakura.io (LTE閉域網)
• 通信内容はHMAC-SHA-256で認証(アプリ・OSのイメージも)
• 物理的接触が可能な場合は問題
• Wi-Fiの認証情報・HMACの秘密鍵の奪取が可能
• あきらめましょう
ロードマップ
ロードマップ
2017年12月 24/7全自動E2Eテスト
2017年2月 バイトコードVM
2017年4月 軽量OSカーネル
2017年5月 Wio LTE JP/ ESP-32サポート
2017年7月 安定版リリース
利用プラン(料金)
MakeStackは全てオープンですCC 0 (パブリックドメイン),MITのデュアルライセンス で公開されています
https://github.com/seiyanuta/makestack