Androidを中心に紐解くIoT

84
Android を中⼼に紐解く IoT Keisuke Nishitani (@Keisuke69) Amazon Web Services Japan K.K .

Transcript of Androidを中心に紐解くIoT

Androidを中⼼に紐解くIoTKeisuke Nishitani (@Keisuke69)

Amazon Web Services Japan K.K.

Profile

Keisuke NishitaniSolutions Architect, Amazon Web Service Japan K.K

@Keisuke69 Keisuke69

✤ AWSのソリューションアーキテクト✤ Webサービス系✤ モバイル系

✤ クラウドを使ったアプリ開発とかモバイル開発の話しをよくしています✤ モバイルニンジャ1号機✤ RESTおじさん✤ Lambda Wizards

✤ 餃⼦の王将エヴァンジェリスト(⾃称)

Keisuke69 Keisuke69Keisuke69x

Amazonの代表的なサービス

Amazonの代表的なサービス

amazon.co.jpおなじみの通販サイト

Amazonの代表的なサービス

amazon services出品/出店サービス

Amazonの代表的なサービス

amazon web servicesITインフラサービス

10年以上にわたるAmazon.comのITインフラ運⽤ノウハウをサービスに!

2006年 AWSサービス開始

2011年 Tokyoリージョンサービス開始

はサーバやストレージといったITリソースを電気・ガス・⽔道と同じように

必要なときに、必要なだけ使えるようにしたサービスです

もう少し具体的に…✤初期費⽤不要で使った分だけの従量課⾦(⻑期契約不要)

✤スケールアウト/スケールアップ/スケールダウンが容易

✤汎⽤的な技術で構成

✤便利なマネージドサービスが豊富

✤世界中のデータセンタ群を利⽤出来る

スモールスタートが出来る!

急なサービス成⻑にも対応出来る!効率的な利⽤でコスト削減も可能!

既存の技術知識で、すぐに始められる

少ない⼈数で効率的に運⽤出来る!

グローバル展開も容易

190カ国に及ぶ100万以上のお客様

⽇本のお客様は20,000以上

世界中のStartupも!

もちろん⽇本のStartupも!

モバイルアプリも!

AmazonでのIoTの取組み

AmazonでのIoTの取組み

Amazon Echo

• ⾳声認識による操作が可能なスピーカー• Smart Home/Connected Homeの操作

も可能

カレンダ連携

アラーム

ショッピング

⾳楽/News

Q&A

機能の追加

Alexa Skill Kit (ASK)✤ Amazon Echoで使われているクラウド

ベースの⾳声認識サービス✤ 独⾃の⾳声駆動の機能を簡単に開発する

することが可能✤ スピーカー、マイクとインターネット接

続があるあらゆるデバイスが統合可能

Simple Beer Service✤ ビールの流量をリアルタイムにカウントして表⽰

本⽇のお話

✤Androidを中⼼としたAWSのモバイルサービス✤AWSのIoTサービス

接続パターン

接続パターン✤ モバイルデバイスをゲートウェイとして

使⽤✤ センサーデバイスはゲートウェイとBLE

によって接続✤ より⼩さいリソースと電⼒消費

接続パターン✤ モバイルデバイス⾃⾝をセンサーデバイスとして

利⽤✤ モバイルデバイスが備えるセンサーを利⽤するの

で⾃由度には⽋ける✤ 通知などのフィードバックを受け取ることもある

接続パターン✤ デバイスからのデータ収集、保存と処

理・分析✤ IoTシステムにおける肝の部分

接続パターン✤ 収集したデータを元にした可視化など

ビューアや制御⽤端末としての利⽤✤ 故障予知など収集データの分析結果が通

知される場合も

モバイル開発における課題

付加価値を⽣まない重労働

どうやって差別化するか

アプリ開発、とくに差別化のための開発に集中したい

モバイル開発における課題

開発者が直⾯する課題

• 複数プラットフォーム• スケーラビリティの確保• ⾼い運⽤管理コストと限られた予算• ユーザエクスペリエンスの阻害• ユニークなユーザIDの管理

モバイルアプリケーションアイデンティティの管理と認可

データ同期アクティブなユーザの分析

エンゲージメントの分析Push通知

イベントトリガークロスプラットフォーム

データのバリデーションと変換ファイル/メディア保管⽤ストレージ

データベースAnd More….

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK✤ 全てのサービスに共通の認証機構✤ オンライン・オフラインを⾃動でハンドリ

ング✤ クロスプラットフォームのサポート:

Android, iOS, Fire OS, Unity, Xamarin✤ Mobile OSへの最適化

例: ローカルオフラインキャシュを利⽤するアーキテクチャ

✤ メモリフットプリントの削減✤ 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケースユーザユーザ認証をしたい適切な権限を与えたい⾏動分析をしたい

データデータの同期をしたいデータベースを使いたいセンサーデータを送りたい

メディアファイル画像/⾳楽を保存したいアセットを配信したい

ロジックサーバサイドで処理したい独⾃APIを⽤意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

<TEST/>

典型的なユースケースユーザ データ メディアファイル

ロジック メッセージ テスト

<TEST/>

Amazon Cognito

AWS Identity and Access Management

Amazon Mobile Analytics

Amazon DynamoDB

Amazon Kinesis

Amazon CloudFront

Amazon S3Transfer Manager

AWS Lambda

API Gateway

Amazon SNS Mobile Push AWS Device Farm

Amazon Cognito

インフラ構築✤ インフラの運⽤管理

✤ キャパシティ✤ スケール✤ デプロイ✤ 耐障害性✤ モニタリング✤ ロギング

✤ ビジネスの差別化には直接つながらない機能のアプリ実装✤ 認証✤ スロットリング✤ スケーラビリティの確保

インフラ構築✤ インフラの運⽤管理

✤ キャパシティ✤ スケール✤ デプロイ✤ 耐障害性✤ モニタリング✤ ロギング

✤ ビジネスの差別化には直接つながらない機能のアプリ実装✤ 認証✤ スロットリング✤ スケーラビリティの確保✤ etc

不要

不要

不要(各サービスが

適切にハンドリング)

いろいろあってよくわからないというあなたへ

数多くのサービス1.どのサービスを使うべきか? 2.どうやってそれらをつなぎ合わせるか?

Identity Provider SDKs+

=

Example:

Login screen & integration code+

Amazon Cognito & SDK

AWS Mobile Hub

AWS Mobile Hub✤ AWSの各モバイルサービスを、要件に応じて⼀括で設定してくれるプ

ロビジョニングツール✤mBaaSではない

✤ 設定した内容で実際に動作するスターターアプリ(iOS, Android)を⽣成し、ダウンロード可能✤最強のリファレンスコードで学習コストも削減✤開発環境のセットアップからコードの説明も

✤ 2016.03現在、東京リージョン未対応✤スターターアプリだけでも利⽤の価値あり

✤ AWS Mobile Hub⾃体のご利⽤は無料✤利⽤する各サービスの費⽤はかかります

IoTのインターネット側

AWS利⽤時のデータ収集パターン

パターン1

✤ アプリからセンサーデータをAmazon Kinesisのストリームに直接送信✤ メッセージの処理はKinesisアプリケーションをEC2上もしくはLambdaで⽤意して実施✤ 使いどころ:

✤ デバイスからAWSへの⼀⽅向通信のみの場合(センサーデータのアップロードのみ)✤ 複雑なメッセージ処理が必要な場合✤ メッセージの順序性を保障したい場合✤ 扱うメッセージサイズが⼤きい場合(1MBまで)✤ メッセージの⼀時保管が必要な場合(1~7⽇)

AmazonS3

AmazonDynamoDB

AmazonRedshift

AmazonKinesis

HTTPS

Amazon Kinesis

3つのKinesis

Amazon Kinesis Streams

Build your own custom applications

that process or analyze streaming

data

Amazon Kinesis

FirehoseEasily load massive

volumes of streaming data into Amazon S3

and Redshift

Amazon Kinesis

Analytics Easily analyze data

streams using standard SQL queries

デバイスからのデータの流れ

デバイス データ受信 アプリケーション

Kinesis Streamの構成Data

Sources

App.4

[Machine Learning]

App.1

[Aggregate & De-Duplicate]

Data Sources

Data Sources

Data Sources

App.2

[Metric Extraction]

S3

DynamoDB

Redshift

App.3

[Real-timeDashboard]

Data Sources

Availability Zone

Shard 1Shard 2Shard N

Availability Zone

Availability Zone

Kinesis

AWS

Endp

oint

• ⽤途単位でStreamを作成し、Streamは、1つ以上のShardで構成される• Shardは、データ⼊⼒側 1MB/sec, 1000 TPS、データ処理側 2 MB/sec, 5TPSのキャパシティを持つ• ⼊⼒するデータをData Recordと呼び、⼊⼒されたData Recordは、24 時間かつ複数のAZに保管される• Shardの増加減によってスケールの制御が可能

Kinesis Client Libraryの動き

1. Kinesis Client LibraryがShardからData Recordを取得2. 設定された間隔でシーケンス番号をそのワーカーのIDをキーにしたDynamoDB

のテーブルに格納3. 1つのアプリが複数Shardからデータを取得し処理を実⾏

StreamShard-0

Shard-1

Kinesisアプリケーション

(KCL)

ワーカー シーケンス番号

Instance A 12345

Instance A 98765

Data Record(12345)

Data Record(24680)

Data Record(98765)

DynamoDBInstance A

(*)実際のKey, Attribute名は異なります。

パターン2

✤ アプリからセンサーデータをAmazon API Gatewayに利⽤して公開するWeb APIにリクエスト

✤ メッセージの処理はAPI GatewayのバックエンドとしてLambdaを実⾏✤ 使いどころ:

✤ データの送信時にレスポンスが必要な場合✤ 複雑なメッセージ処理が必要な場合✤ オープンなプラットフォームとする場合✤ ⾃前でサーバインフラを持ちたくない場合

AmazonS3

AmazonDynamoDB

AmazonRedshift

AmazonAPIGateway AWS Lambda

HTTPS

Amazon API Gateway

Amazon API Gatewayv Web APIの作成・保護・運⽤と公開

を簡単にv OS、キャパシティ等インフラの管理

不要v バックエンドとしてLambda、既存

Webシステムを利⽤可能v スロットリング/キャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 / Amazon Elastic

Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda

functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

APIGatewayOther AWS

services

AWS Lambda functions

APIGatewayAmazonCloudFront

AWS Lambda

Lambdaファンクション: ステートレス、トリガーベースのコード実⾏

AWS Lambda

あらゆるスケールで⾼性能費⽤対効果が⾼く効率的

インフラ管理不要

使った分だけの⽀払いリクエスト量に応じて⾃動的に

キャパシティ調整100ms単位のコンピュート課⾦

⾃⾝のコードを持ち込み

標準的な⾔語でコードを実⾏スレッド、プロセス、ファイルやシェルスクリプトも利⽤可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけで、Lambdaが全てをハンドリング

AWS Lambda✤ インフラを⼀切気にすることなくアプリケーションコードを実⾏でき

るコンピュートサービス✤実⾏基盤は全てAWSが管理✤AWSサービスと連携させることで簡単にイベントドリブンなアプリケーション

を実装可能✤コード実⾏時間に対しての課⾦でありコスト効率が⾮常に⾼い✤VPC内のリソースへのアクセスもサポート

✤ Lambda function✤ JavaScript(Node.js)およびJava、Pythonで記述✤サードパーティライブラリも利⽤可能

AWS Lambdaの利⽤例✤ S3に画像がアップロードされたときにサムネイルの⽣成やリサイズを

実⾏

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像1

2

3

イベントソース✤ 現時点では以下のAWSサービスをサポート

✤Amazon S3✤Amazon Kinesis✤Amazon DynamoDB Streams(Preview)✤Amazon Cognito✤Amazon SNS✤Alexa AppKit✤Amazon SWF✤Amazon SES inbound mail✤Amazon CloudWatch Logs✤Amazon Connected Home (Preview)✤AWS IoT

パターン3

✤ MQTTを利⽤してデータを受け取って処理するだけでなくフィードバック(デバイス制御など)を実⾏

✤ 使いどころ:✤ デバイス/アプリケーションとの双⽅向通信をしたい場合✤ デバイスのリソース(CPUなど)が限られている場合✤ 簡単なメッセージ処理だけが必要な場合✤ 扱うメッセージサイズが⼩さい場合(128KBまで)

アプリケーション

AWSサービスなどMQTT

WebSocket

AWSIoT

AWS IoT

AWS IoT

デバイスデータに対するいろいろなアクション

セキュアでスケーラブルなデバイスとクラウドの

双⽅向接続

誰でも簡単にはじめられる

さまざまなデバイスとAWSをセキュアに接続し、デバイスデータに対する処理やアクションを実⾏したり、デバイスをリモートで制御・管理することが可能

AWS IoTの動作

デバイス

メッセージブローカ

メッセージ処理

デバイスステータス管理アプリケーション

他のAWSサービスとの連携ex)データ保管、アラート送信など

AWS IoT 全体構成

デバイス SDK接続、認証、メッセージ交換

を⾏なうためのクライアントライブラリ

デバイスゲートウェイMQTTとHTTPを利⽤した

デバイスとのコミュニケーション

認証と認可セキュアな双⽅向の

認証と認可

ルールエンジンルールベースの

メッセージ変換とAWSサービスや

外部エンドポイントへのルーティング

AWSサービス- - - - -

その他のサービス

デバイスシャドウデバイスステータスの永続化

アプリケーション

AWS IoT API

デバイスレジストリデバイスのアイデンティティ

とマネージメント

デバイスゲートウェイ

デバイスゲートウェイ

デバイスゲートウェイスタンダードプロトコル (no lock-in)数百万デバイスやアプリをMQTTやHTTP1.1プロトコルを使って通信ができる。(Websocketsも対応!)SDK以外にも汎⽤ライブラリが利⽤可能。

⻑期間のセッション保持によるクラウドを介したメッセージ送受信クライアント(デバイスやアプリ)は制御信号やコマンドなどをクラウドから受信することができる

デフォルトのセキュリティX509証明書とTLS1.2を使った相互認証

TopicBasedArchitecture(lights/thing-2/color)

ハイスケーラブルメッセージブローカー

MQTTMQTT✤ M2M/IoTで利⽤されるコミュニケーションプロトコル✤ OASIS スタンダードプロトコル(v3.1.1)✤ ライトウェイト✤ Pub-Sub メッセージ交換モデル✤ リソースや回線帯域が限られているデバイスで利⽤

MQTT Publish/Subscribe

Publisher

Publisher

Publisher

BrokerTopic:sensor/temp

Subscriber

Subscriber

Subscriber

シンプル&慣れた構⽂・SQL⽂を使ったトピックのフィルタ・オプションのWHERE句で条件を

記述することが可能・JSONサポート

メッセージ変換機能・⽂字列操作 (正規表現サポート)・算術計算・コンテキストベースのヘルパー・暗号・UUID, Timestamp, 乱数など.

ルールエンジン

SELECT * FROM ʻthings/thing-2/colorʼ WHERE color = ʻredʼ

{ “color”: “red” }

ルールエンジンのアクション

RULESENGINETransformmessagesbasedonrulesandroutetoAWS

Services

AWSServices- - - - -

3PServices

AWSサービス- - - - -

外部サービス

1. AWS サービス(直接連携可能)

ルールエンジン

アクション

AWSLambda

AmazonSNS

AmazonSQS

AmazonS3

AmazonKinesis

AmazonDynamoDB Amazon RDS

Amazon Redshift

Amazon Glacier

Amazon EC2

3. 外部のエンドポイント(Lambda and SNSを経由)

AWS IoTからAWSサービス/外部のエンドポイントの呼び出しを⾏なう

2. その他のAWS(Amazon Kinesis, AWS Lambda, Amazon S3などのサービスを経由)

ルールエンジンのアクション

デバイス シャドウ

Shadow

■デバイスの現在のステータス、アプリケーションから要求されたステータスを管理するJSONドキュメント

■デバイスの影(シャドウ)として振る舞うことでクラウド上で仮想デバイス

■アプリケーションからの要求をデバイスに通知可能(デバイスがオフラインでも次回オンライン時にデバイスに通知)

■ドキュメントはAWS IoT上で管理され、APIやSDKで操作可能

デバイス シャドウの動作フロー

Shadow

DeviceSDK

1. デバイスが現在のステータスをレポート

2. ステータスはJSON形式でデータストアに保管

3. アプリケーションが現在のデバイスのステータスを取得

4. アプリケーションがデバイスのステータス変更をリクエスト5. アップデートされた

ステータスを同期(デバイス側でアプリケーションからのリクエストを処理)

6. デバイスが最新のステータスをレポート

7. デバイスのステータスが変更されたことを確認

AWSIoT

MQTT over Websocketsに対応しました

ブラウザデバイスAWS IoT

(デバイスゲートウェイ)

MQTT Websockets

デバイスとブラウザ間で直接リアルタイム通信が可能!!

AWS IoTとKinesisの組み合わせ例

N:1 のインバウンドセンサーデータ (ノイズ除去)ルールエンジンで、フィルタと変換をセンサーデータに対してほどこしてからAmazon KinesisにパブリッシュKinesis Streams からエンタープライズアプリケーションへKinesisで収集されたデータをデータベースやアプリケーション、その他のAWSサービスに送信

OrderedStream

デバイスをただインターネットに繋ぐことが重要なのではない

集めたデータで何をするか

IoTで利⽤される代表的なAWSサービス収集 処理 分析

保存

S3

KinesisKinesisFirehose

DynamoDB

Data Collectionand Storage

AWSLambda

KCLApps

KinesisAnalytics

EventProcessing

EMR Redshift

MachineLearning

DataProcessing

Data Analysis

QuickSight