【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた（その5）

前回 [【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた（その4）](https://qiita.com/tsumida/items/3a0cfd6d88b4cbb963ea)
の続きです。データストアを試してみたの最後です。


過去分
 [【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた（その3）]
(https://qiita.com/tsumida/items/e5d628cb2a34c4f0f6b5)
 [【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた（その2）](https://qiita.com/tsumida/items/dffb9dae72a862909f0d)
 [【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた（その1）](https://qiita.com/tsumida/items/c03cd6eef3341c7915e9)


#前提
+ [AWS IOT CORE 初級ハンズオン](https://aws-iot-core-for-beginners.workshop.aws/)を参考にしています。
+ 送信元デバイスは　NVIDIA Jetson Nano 開発者キット B01　を利用
+ AWS IoT Core のコンパネで「モノ」を作成して、「モノ」用の証明書も作成してデバイスに保存
+ デバイスにはAWS IoT Device SDK をインストール
+ クライアントプログラムは[AWS IOT CORE 初級ハンズオン](https://aws-iot-core-for-beginners.workshop.aws/)のダミーデバイス用プログラム(
device_main.py）を利用
+ デバイスからIoT Coreに向けてMQTTで30秒おきにデータ送信
+ データはこんな感じ

```json-doc
{
  "DEVICE_NAME": "jetson-nano-tsumida",
  "TIMESTAMP": "2021-03-17T22:03:48",
  "TEMPERATURE": 18,
  "HUMIDITY": 57
}
```

##2-1.データのストア先と使ったルール（アクション）
※試してみたいものをチョイスしたリスト

|#  | ストア先           |使ったルール（アクション）                               | 途中経由したサービス |
|:-:|:-                 |:-                                                      |:-                   |
|1  | S3                | Amazon Kinesis Firehose ストリームにメッセージを送信する|Amazon Kinesis Firehose |
|2  | DynamoDB          | Amazon Kinesis ストリームにメッセージを送信する         |Amazon Kinesis Data Streams,Lambda |
|3  | timestream        | Timestreamテーブルにメッセージを書き込む                |なし|
|4  | Elasticsearch     | Amazon Elasticsearch Serviceにメッセージを送信する|なし|
|5  | AWS IoT Analytics | IoT Analyticsにメッセージを送る|IoT Analytics内でchannel,pipeline,storageを経由|


今回はこの5 「IoT Analyticsにメッセージを送る」をやっていきます。

###2-2-5.  「IoT Analyticsにメッセージを送る」

AWS IoT AnalyticsIoT はデータをパイプラインでフィルターや変換処理することができたり、メタデータを付与したりすることができるAnalytics用のデータストアです。S3に入れて処理するよりAnalyticsで最初から処理してデータを取り込んだりすることで簡単に分析用のデータを管理できると思います。
MLの推論や複雑な分析をJupyter ノートブックと連携して行ったり、Amazon QuickSightと連携して可視化することもできます。

https://aws.amazon.com/jp/iot-analytics/


####① IoT Analytics リソースの作成

普通にやると

 + チャネル作成
 + パイプライン作成
 + データストア作成
 + データセット作成

の流れになるのですがリソースを一括で作成してくれる機能がありますので今回はそれでやってみます。

 + リソースプレフィックスにプレフィックス文字列を入れます（今回は`jetson_nano_tsumida`としました）プレフィックスは各リソース名の頭につくものです。

 + MQTTトピックオプションにIoT Coreのトピック名を入れます。（今回は`data/jetson-nano-tsumida` としました）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/1c456a66-2445-0fa2-5f23-b72117be195e.png)

リソースが一気に作成されていきますが、IoT Core Ruleは私が試した限りうまくできないです。同じオブジェクト名のものがあった場合も同様になりそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/d18b9638-c7ea-7120-55df-cdb5863f44c8.png)


一度他の画面に遷移すると、完了作成したリソースだけ成功しましたと表示されます。IoT Core RuleはIoT Coreで作成することにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/6ce0a129-ee89-66e2-f121-17ba35d97eb1.png)


####② IoT Core ルール アクションの設定
前回までと同様にルールとアクションを設定していきます。IoT Core IoT Core 左メニュー「ACT」の下にあるルールをクリックし、画面右上の「作成」をクリックします。

ルールの作成画面が出てくるのでルールに名前を付け、クエリを書きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/a928c279-3603-2b41-2814-14cf32a4c5fa.png)


 + ルール名は`jetson_nano_tsumida_anl`としました。クエリは以下です。

```SQL
　select * from 'data/jetson-nano-tsumida'
```



 + 次に「アクションの追加」をクリックして、「IoT Analyticsにメッセージを送信する」を選択して「アクションの設定」をクリックします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/2bfdc79e-1e46-a903-d3c4-2bd3ab5c0c82.png)


 + アクションの設定画面で、「IoT Analyticsのチャンネルとロールを手動で選択する」を選びます。
 + チャネル名は[① IoT Analytics リソースの作成](＃#① IoT Analytics リソースの作成) で作成したチャネルを選びます。（今回は`jetson_nano_tsumida_channel` を選びました。）
 + ロールも[① IoT Analytics リソースの作成](＃#① IoT Analytics リソースの作成) で作成したロールを選びロールの更新をおします。（今回は`jetson_nano_tsumida_role` を選びました。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/dc0e6ae4-3184-d00a-4874-15a58e35c84e.png)

 + アクションの追加、ルールの作成で作成完了です
 

####③ データを確認する
IoT Analyticsのコンソールでデータセットを選択し、[① IoT Analytics リソースの作成](＃#① IoT Analytics リソースの作成) で作成したデータセットを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/08312a00-7043-4cf2-b4f8-db055108eed6.png)

 + データセット画面で今すぐ実行をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/d2cb533f-b528-0d60-db55-13f314b9648b.png)

 + 「コンテンツ」タブをクリックして「名前」にできているリンクをクリックします。（できるまで少し時間がかかる場合があります。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/febfc61d-957d-9275-641e-a3bd108f977e.png)


 + 結果のプレビューが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001712/3ea4c27b-8787-e273-fdd7-74cd524bdebf.png)


IoT Analytics にデータを入れることができました。
※ノートブック機能でjyupyterノートブックを使い分析ができますが、今回は割愛します。


####④ 今回のまとめ（IoT Core →　ルール　→　IoT Analytics )

IoT Core に届いたデータを直接IoT Analyticsに入れてみました。
これも設定自体はとても簡単ですぐできました。
以前はチャネル、パイプライン、データストア、データセットそれぞれ作って言った記憶があるのでだいぶ楽になっています。
Quicksightと連携したい場合、S3 → Athena より簡単にやれるかもしれないです。
Sagemakerとの連携もできるようなので今後やっていこうと思います。


5記事に分かれてしまいましたが「【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた」では、IoT Core ルールアクションを使った色々なデータストア方法を書いてみました。