2017-03-01 10 views
2

定期的にMQTTメッセージを送信するpythonスクリプトを作成しました。AWSはDynamoDBにMQTTメッセージを格納します

これは、バックエンドに送信されたJSON文字列です:バックエンド側で

{"Id": "1234", "Ut": 1488395951, "Temp": 22.86, "Rh": 48.24} 

、私はDynamoDBのテーブルにMQTTメッセージを保存したいです。

私はAmazonチュートリアルに従い、MQTTメッセージに含まれるデータはテーブルに格納されます。

私の問題はテーブルの列に関係しています。

  • ID:

    テーブルのみ3 columsを持っているソートキー

  • ペイロード:キー
  • ユタをパーティションMQTTメッセージが含まれています。

各キーの列をMQTTメッセージに含めることは可能ですか?

私はこのコラムを持っているでしょう: を - イド - ユタ - 温度 - 助けのためのRh

ありがとう!

+0

固定属性または属性が非常に動的である可能性がありますか?どちらの場合も、属性は個別に格納できます。しかし、JSONを解析し、それに応じて値を設定する必要があるかもしれません。 – notionquest

+0

jsonを解析してデータをdynamoDBに格納するラムダ関数を呼び出す必要がありますか?お返事ありがとう – Federico

答えて

1

はいできます。

DynamoDBでは、「列」と呼ばれるものを作成する必要はありません。成功したプット操作のための唯一の要件は、あなたの主属性(あなたのケースではIdUt)を提供することです。

docsから:

属性の名前/値ペアのマップ、属性ごとに1。 主キー属性のみが必要です。オプションで、項目の属性名と値のペアを別に指定することもできます。

はPythonでは、あなたは、(構文をチェックし、列の型を調整する必要があるかもしれません)これに似た何かを行うことができます:

import boto3 
client = boto3.client('dynamodb') 
response = client.put_item(
    TableName = 'Messages', 
    Item={ 
     'Id': { 
      'S': '1234' 
     }, 
     'Ut': { 
      'S': '1488395951' 
     }, 
     'Temp': { 
      'S': '22.86' 
     }, 
     'Rh': { 
      'S': '48.24' 
     } 
    } 
) 
+0

ありがとうございます。私は、メッセージプッシュがルールによって自動的にAWS IoTコンソールにトリガされることに言及しなかった。私のpythonスクリプトは、AWS MQTT BrokerにMQTTメッセージを送信します。このルールを設定してデータを分割することは可能ですか? – Federico

1

をはい、間違いなく。完全なペイロードを格納する代わりに、またはそれに加えて、DynamoDBテーブルに格納するカラムを作成できます。ステップ3.1後

:あなたはDynamoDBのコンソールであなたのテーブルを見れば、今

#Parse your JSON message and get out all your attributes 
id = message["Id"] 
ut = message["Ut"] 
temp = message["Temp"] 
rh = message["Rh"] 

response = table.put_item(
    Item={ 
     'id': id, 
     'ut': ut, 
     'temp': temp, 
     'rh': rh 
    } 
) 

...あなたはすべてのあなたのアイテムの詳細を含むようにput_itemコードを更新してしまう、this tutorialからあなたを新しいアイテムを作成します。追加の属性用に新しい列が作成されています。

0

私はあなたのメッセージをDynamoDBテーブルに格納するIoT Gatewayルールを思いついていると思います。残念ながら、IoTルールでは複数の列にデータを格納することはできません。ペイロード(またはそのサブセット)を1つの列にのみ格納できます。現在、ペイロードから複数の異なる列にプロパティを抽出する規定はありません。

この唯一の方法は、他の答えと同様のコードを実行するラムダ関数を呼び出すことです。

関連する問題