前提
現在ESP32C3マイコン搭載基板でAWSに信号を送信するプログラムを作っています。
githubのソースコード
実現したいこと
AWSへ送信した信号にタイムスタンプを付けてDynamoDBに蓄積したいです。
発生している問題・エラーメッセージ
AWS Core IoTで受信した信号をルール設定でDynamoDBの用意したテーブルに転送するようにしました。
しかし、
DynamoDBのテーブルでアイテムのスキャンを実行すると、Core IoTで受信した最新の信号が表示されるのですが、最新の1個しか表示されず、過去のデータは出てきません。
結果をcsv出力でダウンロードしてみても1個しか入っていないです。
これは、DynamoDBの設定の間違いがあるからでしょうか?
データを蓄積する方法を教えて下さい。
よろしくお願いします。
テーブルに保存された1個だけのデータ内容
client_id | payload | timestamp |
---|---|---|
MAL_CONFIG_AP_023 | {"SIGNAL_NAME":{"S":"Button_D2"},"onoff_event":{"S":"EVENT_OFF"},"THINGNAME":{"S":"MAL_CONFIG_AP_023"},"alart_type":{"S":"ALART_SIG"}} | 1666388042207 |
core IoTで受信できているmqtt信号内容
mqttのテスト受信ではこの表に受信できています。
データ内容に問題があるとかありますか?
試したこと
IoT coreの”メッセージのルーティング”で設定したIAMロールの内容も掲載します。
ポリシーARN arn:aws:iam::********:policy/service-role/aws-iot-rule-sensor_data2Dynamodb-action-1-role-IoT2DynamoDBRole
json
1{ 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Sid": "VisualEditor0", 6 "Effect": "Allow", 7 "Action": [ 8 "dynamodb:DeleteItem", 9 "dynamodb:RestoreTableToPointInTime", 10 "dynamodb:PurchaseReservedCapacityOfferings", 11 "dynamodb:CreateTableReplica", 12 "dynamodb:UpdateContributorInsights", 13 "dynamodb:UpdateGlobalTable", 14 "dynamodb:CreateBackup", 15 "dynamodb:DeleteTable", 16 "dynamodb:UpdateTableReplicaAutoScaling", 17 "dynamodb:UpdateContinuousBackups", 18 "dynamodb:PartiQLInsert", 19 "dynamodb:CreateGlobalTable", 20 "dynamodb:EnableKinesisStreamingDestination", 21 "dynamodb:ImportTable", 22 "dynamodb:DisableKinesisStreamingDestination", 23 "dynamodb:UpdateTimeToLive", 24 "dynamodb:BatchWriteItem", 25 "dynamodb:PutItem", 26 "dynamodb:PartiQLUpdate", 27 "dynamodb:StartAwsBackupJob", 28 "dynamodb:UpdateItem", 29 "dynamodb:DeleteTableReplica", 30 "dynamodb:CreateTable", 31 "dynamodb:UpdateGlobalTableSettings", 32 "dynamodb:RestoreTableFromAwsBackup", 33 "dynamodb:RestoreTableFromBackup", 34 "dynamodb:ExportTableToPointInTime", 35 "dynamodb:DeleteBackup", 36 "dynamodb:UpdateTable", 37 "dynamodb:PartiQLDelete" 38 ], 39 "Resource": "*" 40 } 41 ] 42}
解決したときの設定画像(10/23追記)
とりあえず、解決が付きました。AWS IoTのルールアクションの設定で、”パーティションキー”の設定を端末の名称の"device_id"に設定していることが原因だったことがわかりました。
端末名称の”MAL_CONFIG_AP_023”の信号が受信する度に、その名称が固定キーになっていて、その内容を上書き保存動作していたようです。
ログ内容を蓄積させるには、パーティションキーをタイムスタンプにすればよいことがわかりました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/23 06:08 編集