「AWS IoTのデータをKibanaに表示する」をやってみた。2017/3版

[AWS IoTのデータをKibanaに表示する](http://qiita.com/hideyuki/items/eb4a87243eaeafa74c04)を実際にやってみました。

記事の投稿以降、AWS IoTが直接Elasticsearch Serviceと連携できる様になったとのことで、そのあたりも試しました。

【アップデート】 AWS IoT が Elasticsearch Service と CloudWatch に連携できるようになりました
https://aws.amazon.com/jp/blogs/news/aws-iot-update/

なんと、サーバー側はノンコーディングです。

## Elasticsearchインスタンスを立ち上げる
[元記事](http://qiita.com/hideyuki/items/eb4a87243eaeafa74c04)と基本的に同じです。
まずは、立ち上がりが遅いElasticsearchを先に立ち上げておきましょう。
Domain nameを `plant-sensor`、Instance typeは`t2.micro.elasticsearch`が選べなかったので`t2.small.elasticsearch (Free tire eligible)`、Instance countは `1`、Strage typeは `EBS` に設定します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/aba2bf87-4ee1-6b69-21ac-32bef4cb3207.png)

Kibana のURLをクリックするとKibana4の画面が表示されます。EndpointのURLはAWS IoTで使います（自動で設定されます）。

## AWS IoTでThingやRuleを作成
[元記事](http://qiita.com/hideyuki/items/eb4a87243eaeafa74c04)の通りしようとしても、画面構成が違うのか、メニューが見つかりません。なので、順を追って解説します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/8771e2b3-e3dc-9c01-e236-20a26ee885c2.png)
（こんな感じでしたっけ？）

「Get started」を押します。そして、左メニューの[Registory]->[Things]を選択します。
「Register a thing」を押します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/f99c51b3-4440-da4b-0ce5-216bbdb91761.png)


`plant-sensor` という名前のThingを作成。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/ed4cf6b5-c1e8-3122-c507-672c9f61f698.png)

左メニューの[Security]を選び、「Create certificate」を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/756e3275-eae9-2540-80f3-1a68bcd007df.png)

色々ダウンロードできますので、一旦すべてダウンロードした後、「Activate」を押します。

ダウンロードできるもの

* A certificate for this thing
* A public key
* A private key
* A root CA for AWS IoT

続いてPolicyを作成。トップ画面の左メニューの[Policies]を選び、「Create a Policy」を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/6077853b-904e-9371-4df6-57717000062f.png)

名前をつけ、とりあえずActionは`iot:*`としました。Resource ARNについてですが、キャプチャでは`topic/replaceWithATopic`となってますが、`plant/sensors`または`*/*`などに変えましょう。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/0a4424ea-3953-4a16-bc02-9acb82da2951.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/41574/a41b0a37-3f85-5b6e-7bc0-7bf246a20164.png)

certificateとPolicyの紐付け
左メニューの[Certificates]を再度選び、先程作成したceritificateを選択。「Actions」メニューの「Attatch policy」を選ぶ。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/5dab1829-a8fd-8e4d-82e9-ca63bd4c4146.png)

同様に、「Attatch thing」も行います。

最後にRuleを作成します。トップ画面の左メニューの[Rules]を選び、「Create a rule」を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/22167edf-20e3-0ba4-7428-9eda52958fab.png)

今回は `plant/sensors` というトピック名でデータを飛ばそうと思うので、Topic filterに `plant/sensors` を設定します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/08dc8911-78db-0e1b-6971-f356fc140c4c.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/d418bb8c-9fc3-81e1-9ab0-c8c9be5e9fc7.png)

Actionの指定は、「Add Action」ボタンを押して行います。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/9369077f-d289-4d33-a456-f7161ff6d3ff.png)

2017/3/14時点で以下のActionが選べます。一番下の「Elasticsearch Service」を選びます。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/7f646eae-47eb-12c9-d126-484fcaf755fe.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/41574/c7633b3c-2076-aef8-e344-e44528a93fdd.png)

Elasticsearch Service用の設定画面が出ます。
IDに`${newuuid()}`、Indexに`timestamp`、Typeに`timestamp`と指定し、IAMロールも追加します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/ecb36541-76ce-c831-e77e-9071ebae6e83.png)


これで、Thing, Certificate, Policy, Ruleが作成できました。[元記事](http://qiita.com/hideyuki/items/eb4a87243eaeafa74c04)のように一覧では表示されないようです。

## 仮想的なIoTデバイスを作成

[元記事](http://qiita.com/hideyuki/items/eb4a87243eaeafa74c04)の通り、plant-sensor.jsを作成します。
そして実行です。

実行してみましょう。

```Terminal
$ npm init
$ npm install --save aws-iot-device-sdk
$ node plant-sensor.js
connect
{"timestamp":"2017-03-14T15:19:47.401Z","humidity":45,"temperature":19,"lux":32701,"moisture":309}
{"timestamp":"2017-03-14T15:19:48.405Z","humidity":43,"temperature":19,"lux":33473,"moisture":309}
{"timestamp":"2017-03-14T15:19:49.406Z","humidity":44,"temperature":19,"lux":30713,"moisture":295}
{"timestamp":"2017-03-14T15:19:50.408Z","humidity":42,"temperature":20,"lux":31499,"moisture":296}
{"timestamp":"2017-03-14T15:19:51.414Z","humidity":46,"temperature":20,"lux":30687,"moisture":315}
{"timestamp":"2017-03-14T15:19:52.417Z","humidity":46,"temperature":20,"lux":31960,"moisture":302}
{"timestamp":"2017-03-14T15:19:53.420Z","humidity":45,"temperature":20,"lux":30782,"moisture":301}
```

## Kibanaでダッシュボードを作成する

Kibanaを起動すると、エラー画面のような形となりますが、初期設定ができていないからだと思います。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/f0c51484-6151-085f-5e7a-07273ed750e4.png)

`Index name or pattern`のところに`timestamp`といれると、設定できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/22d32b66-5306-5b30-2b18-b22ae2203149.png)

Discoverタブを見てみると、ちゃんとデータが来ているのを確認できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/59afd6ac-f6e0-343f-2cd6-7027bfb2ffab.png)

では、チャートを作ってみましょう。Visualizeタブで、以下の様な感じでグラフを作成します。

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/f1c563ee-e223-02a1-04b3-66a356fcf076.png)

最後にダッシュボードを作成します。Dashboardタブを選択して、Add visualization で先ほど作成したチャートをポンポンと選択していくだけです！

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/f161b823-a1d8-8f72-f1e5-237f7815f613.png)

# 終わりに

[元記事](http://qiita.com/hideyuki/items/eb4a87243eaeafa74c04)を作成された、@hideyuki さん、勝手に更新版を投稿してしまいました。ありがとうございます。