目次
- はじめに
-
IoT Coreが受信したデータをDynamoDBに保存する
前回までの手順で、「人を検知したときにSlackへ通知する機能」は完成しています。ただし、検知した情報はSlack上にしか残っておらず、少々不便です。
例えば「時間ごとの人が通過した回数をグラフ化して表示したい」「人の通過が多くなる要因を分析したい」といったユースケースに備えて、データをデータベースに保存しておくと良いでしょう。
今回はデータベースとして、AWSが提供する完全マネージド型key-valueおよびドキュメントデータベースであるDynamoDBを使用します。
DynamoDBの準備
データを保存するための
テーブルを事前に作成しておきます。DynamoDBのダッシュボードにアクセスし、「テーブルの作成」をクリックします。 以下の通り入力します。 項目名 入力値 テーブル名 check_points プライマリキー
(パーティションキー) clientid (文字列) ソートキーの追加 チェック プライマリキー
(ソートキー) timestamp (数値) デフォルト設定の使用 チェック 入力が完了したら「作成」をクリックしてください。 IoT Core(DynamoDBとの接続) IoT Coreのルールにアクセスして、「check_point」をクリックします。 「アクションの追加」をクリックします。 「DynamoDBテーブルにメッセージを挿入する」を選択して、「アクションの設定」をクリックします。 以下の通り入力します。 項目名 入力値 テーブル名 check_points Hash Keyのタイプ STRING パーティションキー値 ${clientid() レンジキー timestamp Range key type NUMBER レンジキーの値 ${timestamp()} 「ロールの作成」をクリックします。 「名前」に「iot-core-dynamodb」を入力して「ロールの作成」をクリックします。 「アクションの追加」をクリックします。 DynamoDBの閲覧 DynamoDBのダッシュボードにアクセスし、サイドメニューの「テーブル」をクリックします。 閲覧したいテーブル名をクリックします。表示されたタブのうち「項目」タブを選択すると、テーブルに格納されているデータを閲覧できます。 mockmockを利用して
クラウドアプリケーションをテストする ここまでの手順で「人を検知したときにSlackへ通知するIoTシステム」は完成です。しかし、システムを運用するにあたり、一定の品質を担保するためのテストが必要です。 ユニットテスト このシステムはデバイスがArduino言語(C/C++ベース)、クラウドのLambdaがRubyで実装されています。 デバイス上のソフトウェアのユニットテストは、実行環境やライブラリをシミュレートするといった工夫が必要となるものの、不可能ではないでしょう。 Rubyのソースコードはユニットテストフレームワークも多数あるので、それらを使えば容易にユニットテストが可能です。 本記事ではユニットテストの詳細については割愛します。 結合テスト 今回開発したシステムはそこまで大きなシステムではないため、デバイス・クラウドアプリケーションのそれぞれを結合してテストします。 多くの場合、ここで2つの問題が生じます。- デバイスのテストで「データを送信できたこと」を確認する必要があるが、送信先のサーバがない。
- クラウドのテストで「データを受信したときにSlack通知すること/DynamoDBにデータを格納すること」を確認する必要があるが、データを送信するデバイスがない。
- 複数(最大5万台)のmockを使った、クラウドアプリケーションの負荷テスト
- 周期10秒未満の高頻度なデータ送信によるテスト(High-end mock)
- 複数ユーザでのプロジェクトの共有(Organization)
- 実際のデバイスから送信したデータの蓄積・加工・再送(DataRecorder)
- SORACOMを利用したテスト(50台以下のmockであればオプション不要 / 51台以上は SORACOM Unlimited)
-
mockmockを利用して
クラウドアプリケーションをテストする - おわりに
はじめに
前回は、AWSを利用してセンサーが人を検知したときにSlackへ通知するクラウドアプリケーションの構築手順を解説しました。
今回は、このデータをデータベースに格納する方法と、mockmockを利用したテストの実施方法を解説します。
IoT Coreが受信したデータをDynamoDBに保存する
前回までの手順で、「人を検知したときにSlackへ通知する機能」は完成しています。ただし、検知した情報はSlack上にしか残っておらず、少々不便です。
例えば「時間ごとの人が通過した回数をグラフ化して表示したい」「人の通過が多くなる要因を分析したい」といったユースケースに備えて、データをデータベースに保存しておくと良いでしょう。
今回はデータベースとして、AWSが提供する完全マネージド型key-valueおよびドキュメントデータベースであるDynamoDBを使用します。
DynamoDBの準備
データを保存するためのテーブルを事前に作成しておきます。
DynamoDBのダッシュボードにアクセスし、「テーブルの作成」をクリックします。
以下の通り入力します。
| 項目名 | 入力値 |
|---|---|
| テーブル名 | check_points |
| プライマリキー (パーティションキー) |
clientid (文字列) |
| ソートキーの追加 | チェック |
| プライマリキー (ソートキー) |
timestamp (数値) |
| デフォルト設定の使用 | チェック |
入力が完了したら「作成」をクリックしてください。
IoT Core(DynamoDBとの接続)
IoT Coreのルールにアクセスして、「check_point」をクリックします。
「アクションの追加」をクリックします。
「DynamoDBテーブルにメッセージを挿入する」を選択して、「アクションの設定」をクリックします。
以下の通り入力します。
| 項目名 | 入力値 |
|---|---|
| テーブル名 | check_points |
| Hash Keyのタイプ | STRING |
| パーティションキー値 | ${clientid() |
| レンジキー | timestamp |
| Range key type | NUMBER |
| レンジキーの値 | ${timestamp()} |
「ロールの作成」をクリックします。
「名前」に「iot-core-dynamodb」を入力して「ロールの作成」をクリックします。
「アクションの追加」をクリックします。
DynamoDBの閲覧
DynamoDBのダッシュボードにアクセスし、サイドメニューの「テーブル」をクリックします。
閲覧したいテーブル名をクリックします。表示されたタブのうち「項目」タブを選択すると、テーブルに格納されているデータを閲覧できます。