AWS IoTについてまとめています。
AWS IoTとは
AWS IoTは、家庭や工場、商用のデバイスをクラウドに接続し、AWSと連携させるためのサービスです。具体的には、デバイスを接続する「デバイスソフトウェア」、デバイスを制御する「接続・コントロールサービス」、デバイスから収集したデータの「分析サービス」の3つから構成されています。
例えば、自動掃除機ルンバを販売するiRobotでは、ルンバ上に搭載されたAWS IoTデバイスウェアをAWSのサーバレスサービスLambdaをバックエンドとして連携させています。
【関連記事】
▶AWS Lambdaって何?サービス概要を初心者向けに解説
ルンバはクリスマスの贈り物として人気。プレゼントとして贈られたルンバは最初に使われるときにインターネット経由で一斉に通信をおこないます。結果として、通常時の20倍もの巨大なトラフィックの増加が発生しますが、AWSにてトラフィックのスパイクに柔軟に対応してくれるんですね。「贈り物イベント」ごとにサーバを増強したりサーバ側でパラメータを調整する必要がないということです。iRobotでは、AWS Lambda、AWS IoT Core、Amazon Kinesisといったサービスが使用されています。
AWS IoTの機能
デバイスソフトウェアとして、FreeRTOSとAWS IoT Greengrassが提供されています。FreeRTOSは、マイクロコントローラ用オペレーティング・システム。小型・低電力消費のエッジデバイスで、プログラミング、デプロイ、保護、接続、管理が可能になります。AWS IoT Greengrassは、デバイス上でローカルコンピューティング、メッセージング、データキャッシュ、同期、機械学習の推論といった機能を実行するソフトウェアです。
接続・コントロールサービスとして、AWS IoT Core、AWS IoT Device Defender、AWS IoT Device Managementが提供されています。AWS IoT Coreは、デバイスとクラウドアプリケーションやその他の通信を簡単・シンプルにおこなうためのミドルウェアです。AWS IoT Device Defenderは、IoTセットの継続的なモニタリングと監査をおこなうセキュリティチェック用のソフトウェアです。AWS IoT Device Managementはデバイス管理用のソフトウェア。大規模な IoT デバイスの登録、編成、モニタリング、リモート管理をおこなうことができるようになります。
分析サービスとして、AWS IoT Analytics、AWS IoT SiteWise、AWS IoT Events、AWS IoT Things Graphが提供されています。AWS IoT Analyticsは分析用ソフトウェア。IoTデータの準備をおこない、組み込みのSQLクエリエンジンにてIoTデータにクエリを発行・分析処理を行います。AWS IoT SiteWiseは、全てのIoTソースを監視し、一貫してデータを収集します。AWS IoT Eventsは、IoTからのイベントをハンドリングして処理をおこないます。AWS IoT Things Graphは、IoTアプリケーション構築のためのサービス。ワークフローを作成して、管理・モニタリングをおこないます。
AWS IoTの仕組み
IoTデバイスから収集されたデータをデータストアに蓄積し、分析者がクエリを発行するなどデータを操作することで、分析をおこないます。
関連)AWS IoTAnalyticsデータの視覚化-AWSIoT Analytics
AWS IoTで分析をおこなうための流れは、IoTデバイスのデータの送信先となる「チャネル」を作成し、送信されたデータのフィルタリングや加工をおこなう「パイプライン」を作成し、データストアにクエリを発行するという流れになります。AWS IoTの設定は、AWS CLIで操作が可能です。
【関連記事】
▶AWS CLIのインストール方法 AWSアクセスキーの登録と疎通確認
以下は、AWS CLIにてチャネルを作成する例です。
aws iotanalytics create-channel --channel-name mychannel
チャネルメッセージは、AmazonS3パケット、ユーザが管理するパケットのいずれかに保存できます。S3に保存する場合は、Amazon S3パケットでアクションを実行する権限を付与する必要があります。以下は、Amazon S3パケットの例です。s3:GetBucketLocation(バケットの場所を確認する)s3:PutObject(ストア)、s3:GetObject(読み取り)、 s3:ListBucket (再処理)を許可するという内容です。
{ "Version": "2012-10-17", "Id": "MyPolicyID", "Statement": [ { "Sid": "MyStatementSid", "Effect": "Allow", "Principal": { "Service": "iotanalytics.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::my-iot-analytics-bucket", "arn:aws:s3:::my-iot-analytics-bucket/*" ] } ] }
次に、チャネルに送信されたデータをフィルタリング・加工するパイプラインを作成します。以下は、チャネル「mychannel」に送信されたデータを、フィルタリングや加工なしでデータストア「mydatastore」に保存するパイプライン設定の例です。
{ "pipelineName": "mypipeline", "pipelineActivities": [ { "channel": { "name": "mychannelactivity", "channelName": "mychannel", "next": "mystoreactivity" } }, { "datastore": { "name": "mystoreactivity", "datastoreName": "mydatastore" } } ] }
分析用のデータセットを作成します。データストアのデータは巨大すぎるので分析用に小さな単位にデータを切り分けるんですね。具体的には、クエリを使ってデータセットを作成します。以下は、select * でデータ全体をデータセットとするmydataset.jsonの例です。
{ "datasetName": "mydataset", "actions": [ { "actionName":"myaction", "queryAction": { "sqlQuery": "select * from mydatastore" } } ] }
以下のAWSのコマンドを発行することで、データセットを作成します。
aws iotanalytics create-dataset-content --dataset-name mydataset
データセットにクエリを発行して分析をおこないます。
AWS IoTのまとめ
- AWS IoTは、IoT用のデバイス側ソフトウェアとクラウド側ソフトウェア
- デバイスで収集したデータをデータストアに蓄積し、分析をおこなう
- AWS IoTはマネージメントコンソールか、AWS CLIで設定・操作が可能