【GAになった!】一般提供開始のAWS IoT Analyticsを使ってデバイスデータを分析してみた

2018.05.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

まいど、大阪の市田です。
昨年のre:Inventで発表されていた新サービス「AWS IoT Analytics」が遂にGAになりました!!
そこで今回は、AWSドキュメントで公開されているクイックスタートガイドを通して基本的な動作を確認してみたいと思います。

AWS IoT Analytics Console Quickstart Guide - AWS IoT Analytics

AWS IoT Analyticsについては、下記を参照して頂ければと思います。

チャネルの作成

まずは、AWS IoT Analyticsを利用できるリージョンに移動しましょう。今回はオレゴンリージョンを使ってみます。

01-select-oregon

オレゴンリージョンに移動できたら、最初に「チャネル」を作成します。

02-prepare

チャネルIDは適当なものを設定(今回はmy_channel)しましょう。「rawデータを保持する期間の設定」は今回はデフォルトのまま進めます。

03-config-id-source

次にトピックフィルタを設定します。ここも適当なトピックを指定します。ドキュメントではupdate/environment/dht1を指定していましたが、今回はmyiot/analytics/testを指定しました。他意はありません。

04-topic

トピック名を入力したら「メッセージの表示」をクリックしてアクティブにしておきます。

05-topic-active

次にIoT Coreが作成したチャネルにメッセージを送るためのIAM Roleを作成します。今回は新規作成としました。

06-iamrole

ロール名を付けて作成します。

07-role

作成したIAM Roleを選択していることを確認して次に進みましょう。

08-done-role

これでチャネルの作成は完了です。

ちなみにチャネルはMQTTトピックからデータを収集するものなので、作成するとAWS IoT側で「メッセージをIoT Analyticsに送るルールアクション」が作成されます。

39-iot-rules

データストアの作成

次にデータストアの作成を行います。IoTデバイスから送られてきたメッセージ(データ)がここで作成したデータストアに蓄積されます。

マネジメントコンソールから「データストア」をクリックして移動しましょう。

09-select-data-store

「データストアを作成」をクリックして進めます。

10-make-data-store

データストアのIDを入力します。今回は「my_datastore」としました。「処理済みデータを保持する期間の設定」はデフォルトのまま次に進みます。適宜設定して下さい。

11-named-data-store

これでデータストアの作成は完了です。

パイプラインの作成

ここでは、作成したチャネルとデータストアをつなぐ為のパイプラインを作ります。
マネジメントコンソールから「パイプライン」を選択して「パイプラインの作成」をクリックします。

12-make-pipeline

これまでと同じようにパイプラインのIDを決めましょう。今回は「my_pipeline」にしました。

13-named-pipeline

その下にあるパイプラインソースから、最初に作成したチャネル(my_channel)を選択します。

14-select-channel

15-next

次にパイプラインアクティビティを定義します。
今回は指定したチャネルでデータを収集して、指定したデータストアにデータを送るだけのシンプルなパイプラインになるため、下記のようなアクティビティを定義したJSONファイルを用意します。

channelNamedatastoreNameは、これまでに作成した各ID名と合わせておきましょう。

[
    {
        "channel": {
            "name": "my_channel_activity",
            "channelName": "my_channel",
            "next": "my_datastore_activity"
        }
    },
    {
        "datastore": {
            "name": "my_datastore_activity",
            "datastoreName": "my_datastore"
        }
    }
]

適当な名前でこのファイルを保存したら、画面のリンクをクリックしてアップロードします。

16-json-upload

アップロードできたら次に進みましょう。

17-uploaded

次の「パイプラインアクティビティ」では、今回は何も指定せずにそのまま次に進みます。ここでLambdaを呼び出したりして、複雑な処理を実行することもできます。

18-activity

次にデータの送信先とするデータストアを指定します。

19-select-pipeline

先程作成したmy_datastoreを選択します。

20-select-my_datastore

「パイプラインの作成」をクリックして完了です。

21-make-pipeline

ここまでの作業で、「指定したチャネルで収集したデータをデータストアに保存」できるようになりました。次に保存したデータに対してクエリを実行して分析してみたいと思います。

データセットの作成

データセットとは、データストアに保存されたデータに対してSQLクエリの結果のことです。ここでは分析対象のデータストアとSQLクエリについて設定します。

22-dataset

データセットのIDを決めて、対象となるデータストアを選択します。

23-select-source

次に分析したい内容をSQLで記載します。今回は下記のようなSQLを実行してみたいと思います。
センサーデータとして「デバイスID、温度、湿度、時刻」を取得する想定です。

SELECT thingid, temperature, humidity, datetime FROM my_datastore

24-sql

尚、利用できるSQLクエリはAmazon Athenaと同じものが使えます。

SQL サポート - AWS IoT Analytics

スケジュール設定は「無し」とします。

25-make-dataset

ちなみに、下記のようにスケジュールを設定することが可能です。

26-schedule

これでデータセットの作成が完了しました。

SQLでデータを分析してみる

それでは、実際にSQLを使って分析してみたいと思います。AWS IoTのマネジメントコンソールに移動して、「テスト」をクリックします。

27-iot-test

Publishするトピックはチャネルで指定したもの(myiot/analytics/test)を入力しましょう。メッセージの内容は下記の様なメッセージとします。

{
    "thingid": "dht1",
    "temperature": 26,
    "humidity": 29,
    "datetime": "2018-01-26T07:06:01"
}

トピックとメッセージ内容が入力できたら「トピックに発行」をクリックしてメッセージをPublishします。

28-publish-topic

次に、先程作成したデータセットの画面に戻ります。作成したデータセットをクリックして下さい。

29-dataset-click

画面右上の「アクション」から「今すぐクエリを実行」をクリックします。

30-action-query

すると、画面左上のステータスが「作成中」に変わります。メッセージ数が1件だけなのですぐに終わると思います。

31-making

正常にデータセットの作成が完了すると先程のステータスが「成功」に変わります。またプレビューにSQLで抽出された内容が表示されています。

32-succeeded

結果はCSVでダウンロードすることも可能です。

33-download-csv

34-csv-detail

上記ではPublishしたデータが1つだけだったので、デバイスIDや温度などを変えてメッセージをいくつかPublishしてみます。

複数のデータをPublishできたら、WHERE句を使って「温度が30度以上」のデータを抽出してみます。

36-sample-query

先程と同様にクエリを実行します。

37-query

temperatureが30よりも大きいデータを正しく抽出できました。

38-result

最後に

今回は「何ができるのか」ということを簡単に追いかけてみました。この他にもSageMakerのノートブックインスタンスと連携したデータ分析や、QuickSightとの連携も可能です。
パイプラインアクティビティを使ったデータ処理もできるようなので、色々触って研究したいと思います!!

以上です。