デバイスに接続されたセンサーからのデータをAWS DynamoDBに保存するとき、MQTTでデータを受け取ってDynamoDBに記録する部分を紹介します。
この方法では、デバイスからはJSONで送りさえすれば、JSONのキーごとにバラしてDynamoDBに記録できます。デバイスに埋め込むプログラム側でキーを自由に決められるため、データ確認には便利です。
{
"key1": "value1",
"key2": "value2",
...
}
なお、AWSアカウントは開設済みで、AWSコンソールには AdministratorAccess のポリシーがアタッチされたIAMユーザでログインしていることが前提です。
DynamoDBテーブルの作成
センサデータを記録するための DynamoDB テーブルを作成します。
- DynamoDB コンソール を開き、Create Table をクリックする。
-
Create DynamoDB table において:
a. Table name を
dht22_ddb_table
と付ける。
b. Primary key は次のように入力する。-
Partition key に
device_id
と入力し、右側のリストからString
を選ぶ。 -
Add sort key にチェックの上で
server_timestamp
と入力し、右側のリストからNumber
を選ぶ。
c. ページの最下部の Create をクリックする。
-
Partition key に
IoT ルールの作成
パブリッシュされたメッセージをキーごとに分解して、DynamoDBテーブルの各列に記録できるようにします。
- AWS Iot コンソールで、Act > Rules を選ぶ。
- Create をクリックする。
-
Name を
dht22_ddb_rule
と付ける。 -
Rule query statement において、以下のように入力する。
SELECT '01' as device_id ,timestamp() as server_timestamp ,* FROM 'esp32/pub'
JSONのキーを使ってSQLを組み立てています。Partition key の device_id は、ここでは固定値にします。Sort key には、タイムスタンプを取得します。*
の部分がJSONのキーを表していますが、次のアクションの指定により、バラしてDynamoDBに記録してくれます。
Set one or more actions において、Add action をクリックし、Split message into multiple columns of a DynamoDB table (DynamoDBv2) を選ぶ。
Configure action をクリックする。
Table name で、先ほど作成した
dht22_ddb_table
を選ぶ。Choose or create a role to grant AWS IoT access to perform this action において、Create role を選ぶ。
Create a new role の画面で、Name を
dht22_ddb_role
と付けて、Create role をクリックする。Add action をクリックする。
Create rule をクリックする。
MQTT test client でのテスト
試しに esp32/pub にパブリッシュして、DynamoDB に記録できることを確認します。
- AWS Iot コンソールで、Test を選ぶ。
-
Topic name に
esp32/pub
と入力する。 -
Message payload は、デフォルトのまま:
{ "message": "Hello from AWS IoT console" }
にして、Publish をクリックする。
DynamoDB コンソール を開き、Tables を選ぶ。
dht22_ddb_table を選び、Items タブで "message" カラムに "Hello from AWS IoT console" が記録されていることが確認できる。