makestack - ipa · 楽しいiotプロトタイピング •...

39
MakeStack ։ମʹݧΔIoT PaaS

Upload: others

Post on 28-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

MakeStack開発者体験に注力するIoT PaaS

怒田 晟也

Page 2: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

自己紹介

• 怒田 晟也 (ぬた せいや)

• 筑波大学 情報科学類 4年暗号・情報セキュリティ研究室

• 2016年度 未踏IT人材発掘・育成事業スーパークリエータ認定

Page 3: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

IoT開発の流れ

プロトタイピング 量産化デザイン

Page 4: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

プロトタイピング 量産化デザイン

Page 5: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

楽しいIoTプロトタイピング

• 画面の中だけでなく,物理世界に干渉できる刺激的な体験

• Webブラウザから遠隔操作したり監視したり

• アイデア次第で楽しく実用的な物も作れる

意味が分からない おー光った!

Page 6: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

ただひとつ致命的な問題が

Page 7: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

ひらすら面倒くさい

Page 8: MakeStack - IPA · 楽しい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のセットアップがやりたかったのではない

Page 9: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

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)

Page 10: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

「簡単にIoTデバイス開発できるよ」系サービス

Particle.io

RuffMongoose OS

Arduino CREATEresin.io

mbed

johny-fivePlatformIO

isaax

Page 11: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

悲しい現実

前時代的で楽しくない開発環境 快適な開発環境と,直感的で便利なAPIでデバイスの開発をしたい

インターネットデバイスをいじれない (一部サービス)

デバイスの初期設定を済ませたら,後は全てリモートから開発したい

OSのアップデートなんてものはない (一部サービス)

アプリのアップデートの面倒は見るがOSのアップデートは考えない

Page 12: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

IoTデバイスの構成

ハードウェア

マイコン

通信モジュール

センサー

アクチュエータ

ソフトウェア

ビジネスロジック

管理エージェント

OS

カーネル

自社サービス

Webサービス

データ蓄積

データ解析

デバイス操作

サーバ

デバイス管理

デバイス設定

アプリイメージ配布

OSイメージ配布

Page 13: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

IoTソフトウェアスタックの共通基盤を提供

ハードウェア

マイコン

通信モジュール

センサー

アクチュエータ

ソフトウェア

ビジネスロジック

管理エージェント

OS

カーネル

自社サービス

Webサービス

データ蓄積

データ解析

デバイス操作

サーバ

デバイス管理

デバイス設定

アプリイメージ配布

OSイメージ配布

Page 14: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

作りたいものに集中できるIoTプロトタイピングフレームワーク

Page 15: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

MakeStackA “batteries-included” IoT PaaS for super-rapid prototyping.

Page 16: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

セットアップからデプロイまで

Page 17: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

ユーザ登録

Page 18: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

デバイスにMakeStack OSをインストール

デバイスのセットアップはこれで終わり!

Page 19: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

アプリを新規作成

Page 20: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

デバイスを作ったアプリに追加

Page 21: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

連携する外部サービスを登録

Page 22: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

コードを書いて…

Page 23: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

クリックひとつでリモートデプロイ

Page 24: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

-完-

Page 25: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

色んな機能盛りだくさん

Page 26: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

みんな大好きCLI開発者ツール

Page 27: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

かんたん外部サービス連携

自前のサーバで自由に開発 サーバレスでサクッと作る

普段使っているサービスに繋げるデバイスからのデータをThingSpeakやDatadogに流す

Page 28: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

sakura.ioでLTEからリモート監視・デプロイ

デバイスを登録するだけ!

https://sakura.io

Page 29: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

Node-REDでIoTデバイスプログラミング

リモートのデバイスからのログもリアルタイムで見れます

Page 30: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

設計と実装

Page 31: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

アーキテクチャ

デバイス

MakeStackサーバ

ログ,センサーデータ

アップデート,設定, アプリデータ

連携

バックエンドサーバ経由で

コーディング・設定

開発者

Page 32: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

デバイスのソフトウェアスタック

ハードウェア

MakeStack Linux

アプリ

API エージェント

Linux

プラグイン

Node.js

アプリ実行環境

• アプリはZIPファイルとしてデプロイ(AWS LambdaのようにGoも使える)

• 独自Linuxディストリビューション

• initramfsに全て同梱

• カーネル含めて13MB

• エージェントがMakeStackサーバとの通信・アプリ管理を担当

• 通信プロトコルは独自 (後述)

• Raspberry Pi 3に対応

Page 33: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

SMMS: Simple Management/Messaging Protocol

• Type, Length, Valueが並ぶだけのシンプルな独自プロトコル • デバイスの状態,ログ,設定,アプリイメージなどなど

• 柔軟性・実装の簡単さを重視

• 下層レイヤに求めることは「データを送受信できる」こと

• UDPでもHTTPでもICMPでもDNSでも,SMMSを実装すればアプリから透過的に通信できる

Page 34: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

セキュリティ

Page 35: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

セキュリティ

ハードウェア

MakeStack Linux

アプリ

API エージェント

Linux

プラグイン

Node.js

アプリ実行環境

• telnet/sshなどの余計なものは一切無し

• アプリはAppArmorのアクセス制御下

• 通信はHTTPS/sakura.io (LTE閉域網)

• 通信内容はHMAC-SHA-256で認証(アプリ・OSのイメージも)

• 物理的接触が可能な場合は問題

• Wi-Fiの認証情報・HMACの秘密鍵の奪取が可能

• あきらめましょう

Page 36: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

ロードマップ

Page 37: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

ロードマップ

2017年12月 24/7全自動E2Eテスト

2017年2月 バイトコードVM

2017年4月 軽量OSカーネル

2017年5月 Wio LTE JP/ ESP-32サポート

2017年7月 安定版リリース

Page 38: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

利用プラン(料金)

Page 39: MakeStack - IPA · 楽しいIoTプロトタイピング • 画面の中だけでなく,物理世界に干渉できる刺激的な体験 • Webブラウザから遠隔操作したり監視したり

MakeStackは全てオープンですCC 0 (パブリックドメイン),MITのデュアルライセンス で公開されています

https://github.com/seiyanuta/makestack