MakeStack - IPA · 楽しいIoTプロトタイピング •...

Post on 28-May-2020

0 views 0 download

Transcript of MakeStack - IPA · 楽しいIoTプロトタイピング •...

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 pi@192.168.88.67:.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