Androidを中心に紐解くIoT
-
Upload
keisuke-nishitani -
Category
Services
-
view
3.196 -
download
3
Transcript of Androidを中心に紐解くIoT
Profile
Keisuke NishitaniSolutions Architect, Amazon Web Service Japan K.K
@Keisuke69 Keisuke69
✤ AWSのソリューションアーキテクト✤ Webサービス系✤ モバイル系
✤ クラウドを使ったアプリ開発とかモバイル開発の話しをよくしています✤ モバイルニンジャ1号機✤ RESTおじさん✤ Lambda Wizards
✤ 餃⼦の王将エヴァンジェリスト(⾃称)
Keisuke69 Keisuke69Keisuke69x
もう少し具体的に…✤初期費⽤不要で使った分だけの従量課⾦(⻑期契約不要)
✤スケールアウト/スケールアップ/スケールダウンが容易
✤汎⽤的な技術で構成
✤便利なマネージドサービスが豊富
✤世界中のデータセンタ群を利⽤出来る
スモールスタートが出来る!
急なサービス成⻑にも対応出来る!効率的な利⽤でコスト削減も可能!
既存の技術知識で、すぐに始められる
少ない⼈数で効率的に運⽤出来る!
グローバル展開も容易
Amazon Echo
• ⾳声認識による操作が可能なスピーカー• Smart Home/Connected Homeの操作
も可能
カレンダ連携
アラーム
ショッピング
⾳楽/News
Q&A
機能の追加
Alexa Skill Kit (ASK)✤ Amazon Echoで使われているクラウド
ベースの⾳声認識サービス✤ 独⾃の⾳声駆動の機能を簡単に開発する
することが可能✤ スピーカー、マイクとインターネット接
続があるあらゆるデバイスが統合可能
モバイル開発における課題
開発者が直⾯する課題
• 複数プラットフォーム• スケーラビリティの確保• ⾼い運⽤管理コストと限られた予算• ユーザエクスペリエンスの阻害• ユニークなユーザ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の各モバイルサービスを、要件に応じて⼀括で設定してくれるプ
ロビジョニングツール✤mBaaSではない
✤ 設定した内容で実際に動作するスターターアプリ(iOS, Android)を⽣成し、ダウンロード可能✤最強のリファレンスコードで学習コストも削減✤開発環境のセットアップからコードの説明も
✤ 2016.03現在、東京リージョン未対応✤スターターアプリだけでも利⽤の価値あり
✤ AWS Mobile Hub⾃体のご利⽤は無料✤利⽤する各サービスの費⽤はかかります
パターン1
✤ アプリからセンサーデータをAmazon Kinesisのストリームに直接送信✤ メッセージの処理はKinesisアプリケーションをEC2上もしくはLambdaで⽤意して実施✤ 使いどころ:
✤ デバイスからAWSへの⼀⽅向通信のみの場合(センサーデータのアップロードのみ)✤ 複雑なメッセージ処理が必要な場合✤ メッセージの順序性を保障したい場合✤ 扱うメッセージサイズが⼤きい場合(1MBまで)✤ メッセージの⼀時保管が必要な場合(1~7⽇)
AmazonS3
AmazonDynamoDB
AmazonRedshift
AmazonKinesis
HTTPS
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 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
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をセキュアに接続し、デバイスデータに対する処理やアクションを実⾏したり、デバイスをリモートで制御・管理することが可能
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
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