Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Androidを中心に紐解くIoT

4,533 views

Published on

2016年3月12日に開催されましたABC2016 Spring (Android Bazaar and Conference)で講演した際の資料になります。

Published in: Services
  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Androidを中心に紐解くIoT

  1. 1. Androidを中⼼に紐解くIoT Keisuke Nishitani (@Keisuke69) Amazon Web Services Japan K.K.
  2. 2. Profile Keisuke Nishitani Solutions Architect, Amazon Web Service Japan K.K @Keisuke69 Keisuke69 ✤ AWSのソリューションアーキテクト ✤ Webサービス系 ✤ モバイル系 ✤ クラウドを使ったアプリ開発とかモバイル開発の話しをよくしてい ます ✤ モバイルニンジャ1号機 ✤ RESTおじさん ✤ Lambda Wizards ✤ 餃⼦の王将エヴァンジェリスト(⾃称) Keisuke69 Keisuke69Keisuke69x
  3. 3. Amazonの代表的なサービス
  4. 4. Amazonの代表的なサービス amazon.co.jp おなじみの通販サイト
  5. 5. Amazonの代表的なサービス amazon services 出品/出店サービス
  6. 6. Amazonの代表的なサービス amazon web services ITインフラサービス
  7. 7. 10年以上にわたるAmazon.comの ITインフラ運⽤ノウハウをサービスに! 2006年 AWSサービス開始 2011年 Tokyoリージョンサービス開始
  8. 8. はサーバや ストレージといったITリソースを 電気・ガス・⽔道と同じように 必要なときに、必要なだけ 使えるようにしたサービスです
  9. 9. もう少し具体的に… ✤初期費⽤不要で使った分だけの従量課⾦(⻑期契約不要) ✤スケールアウト/スケールアップ/スケールダウンが容易 ✤汎⽤的な技術で構成 ✤便利なマネージドサービスが豊富 ✤世界中のデータセンタ群を利⽤出来る スモールスタートが出来る! 急なサービス成⻑にも対応出来る! 効率的な利⽤でコスト削減も可能! 既存の技術知識で、すぐに始められる 少ない⼈数で効率的に運⽤出来る! グローバル展開も容易
  10. 10. 190カ国に及ぶ100万以上のお客様
  11. 11. ⽇本のお客様は20,000以上
  12. 12. 世界中のStartupも!
  13. 13. もちろん⽇本のStartupも!
  14. 14. モバイルアプリも!
  15. 15. AmazonでのIoTの取組み
  16. 16. AmazonでのIoTの取組み
  17. 17. Amazon Echo • ⾳声認識による操作が可能なスピーカー • Smart Home/Connected Homeの操作 も可能 カレンダ連携 アラーム ショッピング ⾳楽/News Q&A 機能の追加
  18. 18. Alexa Skill Kit (ASK) ✤ Amazon Echoで使われているクラウド ベースの⾳声認識サービス ✤ 独⾃の⾳声駆動の機能を簡単に開発する することが可能 ✤ スピーカー、マイクとインターネット接 続があるあらゆるデバイスが統合可能
  19. 19. Simple Beer Service ✤ ビールの流量をリアルタイムにカウントして表⽰
  20. 20. 本⽇のお話
  21. 21. ✤Androidを中⼼としたAWSのモバイルサービス ✤AWSのIoTサービス
  22. 22. 接続パターン
  23. 23. 接続パターン ✤ モバイルデバイスをゲートウェイとして 使⽤ ✤ センサーデバイスはゲートウェイとBLE によって接続 ✤ より⼩さいリソースと電⼒消費
  24. 24. 接続パターン ✤ モバイルデバイス⾃⾝をセンサーデバイスとして 利⽤ ✤ モバイルデバイスが備えるセンサーを利⽤するの で⾃由度には⽋ける ✤ 通知などのフィードバックを受け取ることもある
  25. 25. 接続パターン ✤ デバイスからのデータ収集、保存と処 理・分析 ✤ IoTシステムにおける肝の部分
  26. 26. 接続パターン ✤ 収集したデータを元にした可視化など ビューアや制御⽤端末としての利⽤ ✤ 故障予知など収集データの分析結果が通 知される場合も
  27. 27. モバイル開発における課題
  28. 28. 付加価値を⽣ま ない重労働
  29. 29. どうやって差別化するか
  30. 30. アプリ開発、とくに差別化のため の開発に集中したい
  31. 31. モバイル開発における課題 開発者が直⾯する課題 • 複数プラットフォーム • スケーラビリティの確保 • ⾼い運⽤管理コストと限られた予算 • ユーザエクスペリエンスの阻害 • ユニークなユーザIDの管理 モバイルアプリケーション アイデンティティの管理と認可 データ同期 アクティブなユーザの分析 エンゲージメントの分析 Push通知 イベントトリガー クロスプラットフォーム データのバリデーションと変換 ファイル/メディア保管⽤ストレージ データベース And More…. AWS Cloud Infrastructure
  32. 32. 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
  33. 33. AWS Mobile SDK ✤ 全てのサービスに共通の認証機構 ✤ オンライン・オフラインを⾃動でハンドリ ング ✤ クロスプラットフォームのサポート: Android, iOS, Fire OS, Unity, Xamarin ✤ Mobile OSへの最適化 例: ローカルオフラインキャシュを利⽤ するアーキテクチャ ✤ メモリフットプリントの削減 ✤ 各プラットフォームのエンハンスに追従 iOS Android Fire OS Unity Xamarin
  34. 34. 典型的なユースケース ユーザ ユーザ認証をしたい 適切な権限を与えたい ⾏動分析をしたい データ データの同期をしたい データベースを使いたい センサーデータを送りたい メディアファイル 画像/⾳楽を保存したい アセットを配信したい ロジック サーバサイドで処理したい 独⾃APIを⽤意したい メッセージ プッシュ通知を送りたい テスト 実機でテストしたい <TEST/>
  35. 35. 典型的なユースケース ユーザ データ メディアファイル ロジック メッセージ テスト <TEST/> Amazon Cognito AWS Identity and Access Management Amazon Mobile Analytics Amazon DynamoDB Amazon Kinesis Amazon CloudFront Amazon S3 Transfer Manager AWS Lambda API Gateway Amazon SNS Mobile Push AWS Device Farm Amazon Cognito
  36. 36. インフラ構築 ✤ インフラの運⽤管理 ✤ キャパシティ ✤ スケール ✤ デプロイ ✤ 耐障害性 ✤ モニタリング ✤ ロギング ✤ ビジネスの差別化には 直接つながらない機能のアプリ実装 ✤ 認証 ✤ スロットリング ✤ スケーラビリティの確保
  37. 37. インフラ構築 ✤ インフラの運⽤管理 ✤ キャパシティ ✤ スケール ✤ デプロイ ✤ 耐障害性 ✤ モニタリング ✤ ロギング ✤ ビジネスの差別化には 直接つながらない機能のアプリ実装 ✤ 認証 ✤ スロットリング ✤ スケーラビリティの確保 ✤ etc 不要 不要 不要 (各サービスが 適切にハンドリング)
  38. 38. いろいろあってよくわからないというあなたへ
  39. 39. 数多くのサービス 1. どのサービスを使うべきか? 2. どうやってそれらをつなぎ合わせるか? Identity Provider SDKs + = Example: Login screen & integration code + Amazon Cognito & SDK
  40. 40. AWS Mobile Hub
  41. 41. AWS Mobile Hub ✤ AWSの各モバイルサービスを、要件に応じて⼀括で設定してくれるプ ロビジョニングツール ✤ mBaaSではない ✤ 設定した内容で実際に動作するスターターアプリ(iOS, Android)を ⽣成し、ダウンロード可能 ✤ 最強のリファレンスコードで学習コストも削減 ✤ 開発環境のセットアップからコードの説明も ✤ 2016.03現在、東京リージョン未対応 ✤ スターターアプリだけでも利⽤の価値あり ✤ AWS Mobile Hub⾃体のご利⽤は無料 ✤ 利⽤する各サービスの費⽤はかかります
  42. 42. IoTのインターネット側
  43. 43. AWS利⽤時のデータ収集パターン
  44. 44. パターン1 ✤ アプリからセンサーデータをAmazon Kinesisのストリームに直接送信 ✤ メッセージの処理はKinesisアプリケーションをEC2上もしくはLambdaで⽤意して実施 ✤ 使いどころ: ✤ デバイスからAWSへの⼀⽅向通信のみの場合(センサーデータのアップロードのみ) ✤ 複雑なメッセージ処理が必要な場合 ✤ メッセージの順序性を保障したい場合 ✤ 扱うメッセージサイズが⼤きい場合(1MBまで) ✤ メッセージの⼀時保管が必要な場合(1~7⽇) Amazon S3 Amazon DynamoDB Amazon Redshift Amazon Kinesis HTTPS
  45. 45. Amazon Kinesis
  46. 46. 3つのKinesis Amazon Kinesis Streams Build your own custom applications that process or analyze streaming data Amazon Kinesis Firehose Easily load massive volumes of streaming data into Amazon S3 and Redshift Amazon Kinesis Analytics Easily analyze data streams using standard SQL queries
  47. 47. デバイスからのデータの流れ デバイス データ受信 アプリケーション
  48. 48. 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-time Dashboard] Data Sources Availability Zone Shard 1 Shard 2 Shard N Availability Zone Availability Zone Kinesis AWSEndpoint • ⽤途単位でStreamを作成し、Streamは、1つ以上のShardで構成される • Shardは、データ⼊⼒側 1MB/sec, 1000 TPS、データ処理側 2 MB/sec, 5TPSのキャパシティを持つ • ⼊⼒するデータをData Recordと呼び、⼊⼒されたData Recordは、24 時間かつ複数のAZに保管される • Shardの増加減によってスケールの制御が可能
  49. 49. Kinesis Client Libraryの動き 1. Kinesis Client LibraryがShardからData Recordを取得 2. 設定された間隔でシーケンス番号をそのワーカーのIDをキーにしたDynamoDB のテーブルに格納 3. 1つのアプリが複数Shardからデータを取得し処理を実⾏ Stream Shard-0 Shard-1 Kinesis アプリケーション (KCL) ワーカー シーケンス番号 Instance A 12345 Instance A 98765 Data Record (12345) Data Record (24680) Data Record (98765) DynamoDB Instance A (*)実際のKey, Attribute名は異なります。
  50. 50. パターン2 ✤ アプリからセンサーデータをAmazon API Gatewayに利⽤して公開するWeb APIにリクエ スト ✤ メッセージの処理はAPI GatewayのバックエンドとしてLambdaを実⾏ ✤ 使いどころ: ✤ データの送信時にレスポンスが必要な場合 ✤ 複雑なメッセージ処理が必要な場合 ✤ オープンなプラットフォームとする場合 ✤ ⾃前でサーバインフラを持ちたくない場合 Amazon S3 Amazon DynamoDB Amazon Redshift Amazon API Gateway AWS Lambda HTTPS
  51. 51. Amazon API Gateway
  52. 52. Amazon API Gateway v 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
  53. 53. Managed フルマネージドなサーバレスアーキテクチャ InternetMobile apps AWS Lambda functions AWS API Gateway cache Endpoints on Amazon EC2 Any other publicly accessible endpoint Amazon CloudWatch API Gateway Other AWS services AWS Lambda functions API GatewayAmazon CloudFront
  54. 54. AWS Lambda
  55. 55. Lambdaファンクション: ステートレス、トリガーベースのコード実⾏ AWS Lambda あらゆるスケールで⾼性能 費⽤対効果が⾼く効率的 インフラ管理不要 使った分だけの⽀払い リクエスト量に応じて⾃動的に キャパシティ調整 100ms単位のコンピュート課⾦ ⾃⾝のコードを持ち込み 標準的な⾔語でコードを実⾏ スレッド、プロセス、ファイル やシェルスクリプトも利⽤可能 インフラではなくビジネスロジック に集中可能 コードをアップロードするだけで、 Lambdaが全てをハンドリング
  56. 56. AWS Lambda ✤ インフラを⼀切気にすることなくアプリケーションコードを実⾏でき るコンピュートサービス ✤ 実⾏基盤は全てAWSが管理 ✤ AWSサービスと連携させることで簡単にイベントドリブンなアプリケーション を実装可能 ✤ コード実⾏時間に対しての課⾦でありコスト効率が⾮常に⾼い ✤ VPC内のリソースへのアクセスもサポート ✤ Lambda function ✤ JavaScript(Node.js)およびJava、Pythonで記述 ✤ サードパーティライブラリも利⽤可能
  57. 57. AWS Lambdaの利⽤例 ✤ S3に画像がアップロードされたときにサムネイルの⽣成やリサイズを 実⾏ AWS LambdaAmazon S3 Bucket イベント 元画像 サムネイル画像 1 2 3
  58. 58. イベントソース ✤ 現時点では以下の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
  59. 59. パターン3 ✤ MQTTを利⽤してデータを受け取って処理するだけでなくフィードバック (デバイス制御など)を実⾏ ✤ 使いどころ: ✤ デバイス/アプリケーションとの双⽅向通信をしたい場合 ✤ デバイスのリソース(CPUなど)が限られている場合 ✤ 簡単なメッセージ処理だけが必要な場合 ✤ 扱うメッセージサイズが⼩さい場合(128KBまで) アプリケーション AWSサービスなどMQTT WebSocket AWS IoT
  60. 60. AWS IoT
  61. 61. AWS IoT デバイスデータに対する いろいろなアクション セキュアでスケーラブルな デバイスとクラウドの 双⽅向接続 誰でも簡単に はじめられる さまざまなデバイスとAWSをセキュアに接続し、デバイスデータに対する処理 やアクションを実⾏したり、デバイスをリモートで制御・管理することが可能
  62. 62. AWS IoTの動作 デバイス メッセージ ブローカ メッセージ処理 デバイスステータス管理アプリケーション 他のAWSサービスとの連携 ex)データ保管、アラート送信など
  63. 63. AWS IoT 全体構成 デバイス SDK 接続、認証、メッセージ交換 を⾏なうための クライアントライブラリ デバイスゲートウェイ MQTTとHTTPを利⽤した デバイスとのコミュニケーション 認証と認可 セキュアな双⽅向の 認証と認可 ルールエンジン ルールベースの メッセージ変換と AWSサービスや 外部エンドポイント へのルーティング AWSサービス - - - - - その他のサービス デバイスシャドウ デバイスステータスの永続化 アプリケーション AWS IoT API デバイスレジストリ デバイスのアイデンティティ とマネージメント
  64. 64. デバイスゲートウェイ デバイスゲートウェイ
  65. 65. デバイスゲートウェイ スタンダードプロトコル (no lock-in) 数百万デバイスやアプリをMQTTや HTTP1.1プロトコルを使って通信が できる。(Websocketsも対応!) SDK以外にも汎⽤ライブラリが利⽤可能。 ⻑期間のセッション保持によるクラウド を介したメッセージ送受信 クライアント(デバイスやアプリ)は 制御信号やコマンドなどをクラウドから 受信することができる デフォルトのセキュリティ X509証明書とTLS1.2を使った相互認証 Topic Based Architecture (lights/thing-2/color) ハイスケーラブル メッセージブローカー
  66. 66. MQTTMQTT ✤ M2M/IoTで利⽤されるコミュニケーションプロトコル ✤ OASIS スタンダードプロトコル(v3.1.1) ✤ ライトウェイト ✤ Pub-Sub メッセージ交換モデル ✤ リソースや回線帯域が限られているデバイスで利⽤
  67. 67. MQTT Publish/Subscribe Publisher Publisher Publisher Broker Topic: sensor/temp Subscriber Subscriber Subscriber
  68. 68. シンプル&慣れた構⽂ ・SQL⽂を使ったトピックのフィルタ ・オプションのWHERE句で条件を 記述することが可能 ・JSONサポート メッセージ変換機能 ・⽂字列操作 (正規表現サポート) ・算術計算 ・コンテキストベースのヘルパー ・暗号 ・UUID, Timestamp, 乱数など. ルールエンジン SELECT * FROM ʻthings/thing-2/colorʼ WHERE color = ʻredʼ { “color”: “red” }
  69. 69. ルールエンジンのアクション RULES ENGINE Transform messages based on rules and route to AWS Services AWS Services - - - - - 3P Services AWS サービス - - - - - 外部サービス
  70. 70. 1. AWS サービス (直接連携可能) ルールエンジン アクション AWS Lambda Amazon SNS Amazon SQS Amazon S3 Amazon Kinesis Amazon DynamoDB Amazon RDS Amazon Redshift Amazon Glacier Amazon EC2 3. 外部のエンドポイント (Lambda and SNSを経由) AWS IoTからAWSサービス/ 外部のエンドポイントの 呼び出しを⾏なう 2. その他のAWS (Amazon Kinesis, AWS Lambda, Amazon S3など のサービスを経由) ルールエンジンのアクション
  71. 71. デバイス シャドウ Shadow ■デバイスの現在のステータス、アプリケーション から要求されたステータスを管理するJSON ドキュメント ■デバイスの影(シャドウ)として振る舞うことで クラウド上で仮想デバイス ■アプリケーションからの要求をデバイスに通知可能 (デバイスがオフラインでも次回オンライン時に デバイスに通知) ■ドキュメントはAWS IoT上で管理され、 APIやSDKで操作可能
  72. 72. デバイス シャドウの動作フロー Shadow Device SDK 1. デバイスが現在のステータスをレポート 2. ステータスはJSON形式で データストアに保管 3. アプリケーションが現在のデバイスの ステータスを取得 4. アプリケーションがデバイスの ステータス変更をリクエスト 5. アップデートされた ステータスを同期 (デバイス側でアプリケーションからの リクエストを処理) 6. デバイスが最新のステータスを レポート 7. デバイスのステータスが 変更されたことを確認 AWS IoT
  73. 73. MQTT over Websocketsに対応しました ブラウザデバイス AWS IoT (デバイスゲートウェイ) MQTT Websockets デバイスとブラウザ間で直接リアルタイム通信が可能!!
  74. 74. AWS IoTとKinesisの組み合わせ例 N:1 のインバウンドセンサーデータ (ノイズ除去) ルールエンジンで、フィルタと変換をセンサーデータに対してほどこしてからAmazon Kinesis にパブリッシュ Kinesis Streams からエンタープライズアプリケーションへ Kinesisで収集されたデータをデータベースやアプリケーション、その他のAWSサービスに送信 Ordered Stream
  75. 75. デバイスをただ インターネットに 繋ぐことが重要なのではない
  76. 76. 集めたデータで 何をするか
  77. 77. IoTで利⽤される代表的なAWSサービス 収集 処理 分析 保存 S3 Kinesis Kinesis Firehose DynamoDB Data Collection and Storage AWS Lambda KCL Apps Kinesis Analytics Event Processing EMR Redshift Machine Learning Data Processing Data Analysis QuickSight

×