AWS IoT CoreデータのAmazon Timestreamへのデータ転送

# はじめに
前回の投稿でSiemensの産業向けエッジプラットプラットフォーム"Industrial Edge"から"AWS IoT Core"へ二酸化炭素濃度センサーで取得したデータの連携についてご紹介しました。
今回はそのデータをGrafana等のツールで使用できるよう、AWSのデータベースサービスであるAmazon Timestremeへ送信する手順についてまとめました。
# 構成
今回の構成およびデータフローを図1に示します。
![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/f2178715-3993-b43d-4177-803d69a152e2.png)
図1. 構成図
二酸化炭素濃度センサーからIoT Coreまでのデータ送信については以下のリンクをご参照ください。
※参考リンク
[エッジプラットフォームとAWS IoT Coreの連携](https://qiita.com/hrsakuma/items/1b972f22113b5d606acc "エッジプラットフォームとAWS IoT Coreの連携")

# 設定
#### Amazon Timestreamの設定
1. AWS Consoleにアクセスし、データベース → Amazon Timestreamをクリックします。
![01 AWS Console Home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/928d1d38-a1c4-ece5-6c76-ead7e163e3ff.png)
図2. AWS Console ホーム
1. センサーデータを保存するデータベースを作成します。ナビゲーションペインでデータベースをクリックします。
![02 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/ba33b54c-b680-9e1e-6d01-97a145512c9f.png)
図3. Amazon Timestream ダッシュボードホーム
1. データベースを作成をクリックします。
![03 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/0a79db71-afb8-b27a-ce8a-01252e482c5d.png)
図4. Amazon Timestream データベースホーム
1. 標準データベースを選択し、任意の名前を入力します。（今回はNETFC）名前を入力後データベースを作成をクリックします。
![04 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/b7e48521-44d9-2e86-adc7-7fe689b270eb.png)
図5. Amazon Timestream データベース作成画面
1. NETFCというデータベースが作成されました。ナビゲーションペインでテーブルをクリックします。
![05 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/8e0385b5-7caa-75d1-54ea-b73e3aebbc09.png)
図6. Amazon Timestream データベースホーム
1. テーブルを作成をクリックします。
![05-2 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/a38f2189-89d7-d11a-32f6-b1814d49a9b1.png)
図7. Amazon Timestream テーブルホーム
1. データベース名は先ほど作成したNETFCを選択します。テーブル名は任意の名前を指定します。今回はCarbon_dioxide_concentration_sensorとしました。スキーマの設定はデフォルトパーティショニングとしテーブルを作成をクリックます。
![06 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/faaacb81-8d52-a5cf-546e-65cfde0f2de7.png)
図8. Amazon Timestream テーブル作成画面
#### AWS IoT Coreの設定
1. AWS Consoleにアクセスし、IoT → IoT Coreをクリックします。
![07 AWS Console Home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/160c8239-79e9-781e-60cc-8aeaf3284ce8.png)
図9. AWS Console ホーム
1. IoT Coreで取得したデータをAmazon Timestreamに送信するルールを作成します。ナビゲーションペインで管理 → メッセージのルーティング → ルールをクリックします。
![08 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/8dce3c22-d051-f11f-6b22-8c4561514287.png)
図10. AWS IoT Coreホーム
1. ルールを作成をクリックします。
![09 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/58b74cf0-3d56-7ff4-6031-6a7fb069cac7.png)
図11. AWS IoT Core ルーティングルール画面
1. ルール名に任意の名前を指定します。今回はCarbon_dioxide_concentration_sensor_ruleとしました。
![10 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/29147df9-6630-3938-1a96-8dc4a5b414da.png)
図12. AWS IoT Core ルーティングルール作成画面
1. MQTTデータの指定を行います。CloudConnectorというトピック名でデータを取得しているのでSELECT * FROM 'CloudConnectr/'としました。CloudConnectorというトピックからすべてのデータ（*はワイルドカード）を取得するという意味になります。記述したら次へをクリックします。
![11 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/4e565d63-89fd-3279-d6fd-7f2522b74926.png)
図13. AWS IoT Core ルーティングルール作成画面
1. ルールを指定します。今回はAmazon Timestreamにデータ送信を行うのでTimestream tableを選択します。
![12 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/fbe633c8-482e-12fa-84dd-28ff6be385ad.png)
図14. AWS IoT Core ルーティングルール作成画面
1. ルールアクションの設定を行います。データを転送するデータベース（NETFC）とテーブル（Carbon_dioxide_concentration_sensor）を選択します。ディメンジョンは各メジャーレコードに書き込まれる時系列のメタデータ属性です。ディメンション名には任意の名前を指定します。（今回はDeviceID)、ディメンション値にはMQTTデータに含まれるClientIDを指定しました。IAMロールは自動的に作成可能です。新しいロールの作成をクリックします。
![13 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/32cac192-1bc2-518b-1c63-07bf30eaa42a.png)
図15. AWS IoT Core ルーティングルール作成画面
1. 任意のロール名を指定します。今回はNETFC_IoT_Core_Timestream_Roleとしました。入力したら作成をクリックします。
![14 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/9ca07b89-c4ad-fce9-e881-195226d8309a.png)
図16. AWS IoT Core ルーティングルールロール作成画面
1. IAMロールが作成され割り当てられました。次へをクリックします。
![15 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/083ac86b-a39e-187a-280d-b190fb88bd86.png)
図17. AWS IoT Core ルーティングルール作成画面
1. 作成をクリックします。
![16 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/924cc389-049a-4582-376c-64bfbb9afda1.png)
図18. AWS IoT Core ルーティングルール作成画面
1. ルーティングルールが作成されました。以上で設定は完了となります
![17 AWS IoT Core.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/4e49146d-268d-229b-2248-c51d46668a4b.png)
図19. AWS IoT Core ルーティングルール画面

# 動作確認
1. Amazon Timestreamでデータが受信できることを確認します。AWS Consoleにアクセスし、データベース → Amazon Timestreamをクリックします。
![18 AWS Console Home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/db1bdeb0-ad8e-9a2b-9138-5a694b9202ea.png)
図20. AWS Console ホーム
1. ナビゲーションペインからテーブルをクリックします。
![19 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/095e058c-f678-5a91-7909-5b0f7e1d332d.png)
図21. Amazon Timestream ダッシュボードホーム
1. データが格納されるテーブル（Carbon_dioxide_concentration_sensor）をクリックします。
![20 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/91890d2b-ce33-ea23-8b30-05a966fe6d21.png)
図22. Amazon Timestream テーブルホーム
1. 画面右上のアクション → クエリテーブルをクリックします。
![21 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/58dae3ad-57ac-fb15-f3e1-d81b7a7c8f62.png)
図23. Amazon Timestream テーブル画面
1. SQL文が自動で入力されているので、実行をクリックします。
![22 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/df663893-1ea1-d3fb-3b77-51dc43bcd655.png)
図24. Amazon Timestream クエリエディタ画面
1. 返された行に受信したデータが表示され、データを受信できていることが確認できました。
![23 AWS Amazon Timestream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/16f4875d-5a8f-1f1d-bd07-f025103be2fb.png)
図25. Amazon Timestream クエリエディタ画面

# おわりに
これでローカルのIoTデータをAWSクラウドへ送信し、Grafana等のAWSクラウド上で動作するアプリーケーションで使用できるようになりました。

※ SiemensおよびIndustrial Edgeは、Siemensの登録商標または商標です。