dynamoDBにデータが入りました!までは良かったんですけど、これをどうやって可視化したらいいのかサッパリ分かりませんで困っていたところ、dynamoDBじゃなくてAWS IoT Coreの「ルール」で「Amazon Elasticsearch Service にメッセージを送信する」アクションがあれば一発らしい&表示するだけならdynamoDBは不要らしいということが先人の皆さんからの投稿でわかりました。AWS lambda ってやつを噛ませないといけないとか色んな投稿が出てきたので、どうやらこんなラクになったのはAWS側がこの機能をつけてくれてからみたいです。
↓こちらの記事を参考にさせていただきました。
「AWS IoTのデータをKibanaに表示する」をやってみた。2017/3版
AWS IoTのデータをKibanaに表示する
基本的には@moritalous さんの2017/3版の通りやっていきます。
全体の流れ
- Elasticsearch Serviceを立ち上げる
- 登録済みの「ルール」に「アクション」を追加する
- ESからkibanaを開き、設定する
1. Elasticsearch Serviceを立ち上げる
いままでの私とAWSの関係性からすると「先に立ち上げたりとかすると失敗して、ルールの設定の中からやらないといけないのでは…?」と思ったのですが、何と今回はESを先に作っても大丈夫でした!本当に10分くらいかかるから出鼻をくじかれる。このステップを終えてからおトイレ行ったり飲み物を用意してもいいと思うくらいでした。
アクセスポリシーは「1つ以上のAWSアカウントまたはIAMユーザにアクセスを許可」にしました。この辺を複雑にすると色々うまくできませんでした。クラスター設定の「kibana認証」もなし。
※本当に大事なデータの場合はこんなゆるゆるアホ設定ではダメだと思います。
ESが立ち上がっているのを確認したら画面を閉じておきます。
2. 登録済みの「ルール」に「アクション」を追加する
既に作成済の「dynamoDBに書き込む」アクションをつけたルールがあるので、そのルールを「編集」で開いて「アクションの追加」を押し、「Amazon Elasticsearch Service にメッセージを送信する」を選択します!
ドメイン名のところで、1で立ち上げたESをプルダウンから選択。
その他に入力する値は、元記事の値をそのまま入れたら最終的にうまくいったので
${newuuid()} / timestamp / timestamp
でいきました。IAMロールはこの画面から新しく作成しました。
せっかくなのでdynamoDBに書き込むのはそのままにしておきます。
3. ESからkibanaを開き、設定する
ESのダッシュボードからドメインを選ぶと「概要」のところにkibanaのURLがあるのでそれをクリックします。
初期設定は元記事の通りでOKでした。
ちょっとハマったのは、私はセンサーデータを時系列で線グラフにしたかったんですけど、初期値が「count」になってるので絶妙にへんてこりんなグラフが誕生…。
X軸がタイムスタンプでY軸がセンサーデータ のグラフ
Metrics Y-Axis
Aggregation: Top Hit
Field: センサーデータ
Aggregate with: Max
Size: 1
Sort On: (元データのタイムスタンプ)
Buckets X-Axis
Aggregation: Terms
Field: (元データのタイムスタンプ)
Order By: Term
Size (ここで入れた値がX軸のデータポイント数)
Y軸の最大値・最小値の設定の仕方
上のタブのMetrics&Axesをクリックして、Y-AxesのAdvanced Options
Scale to Data Boundsを選ぶとデータの幅に合わせて自動で変わる
Set Axis Extentsを選ぶと固定値が入れられる
こんな感じの設定をして、いいかんじの線グラフを表示することができました!
このURLはPCのブラウザやiPadのSafariだと開けるのですが、iPhoneのSafariでは開けませんでした。チュートリアルで作ったページはiPhoneでも開けたのになんでだろう?と思ったのですが、チュートリアルではS3にバケットを作ってモバイルに対応したサイトをホスティングして、そこに可視化したデータを表示させる……みたいなことをしていたのではないかと思います。(ESのkibanaのURLを直接開いてるのではない)
なので次はチュートリアルのようなサイト(表示画面)を作れたらいいなーと思います。Raspberry Piはpythonの勉強もできるし、AWSとくっつけてAWSの勉強もできるし、楽しいですね!