翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
チュートリアル: デバイスデータの DynamoDB テーブルへの保存
このチュートリアルでは、DynamoDB テーブルにメッセージデータを送信する AWS IoT ルールを作成する方法を示します。
このチュートリアルでは、架空の気象センサーデバイスから DynamoDB テーブルにメッセージデータを送信するルールを作成します。このルールは、多くの気象センサーからのデータをフォーマットして、単一のデータベーステーブルに追加できるようにします。
このチュートリアルで学習する内容
-
DynamoDB テーブルの作成方法
-
AWS IoT ルールから DynamoDB テーブルにメッセージデータを送信する方法
-
AWS IoT ルールで代替テンプレートを使用する方法
-
ルールSQLクエリステートメントで単純なクエリと関数を使用する方法
-
MQTT クライアントを使用して AWS IoT ルールをテストする方法
このチュートリアルの完了には 30 分ほどかかります。
このチュートリアルでは、次の作業を行います。
このチュートリアルを開始する前に、以下の要件を満たしていることを確認してください。
-
セットアップ AWS アカウント
このチュートリアルを完了するには、 AWS アカウント と AWS IoT コンソールが必要です。
-
クライアントでMQTT AWS IoT MQTTメッセージを表示する を確認したこと
MQTT クライアントを使用してトピックをサブスクライブして公開できることを確認してください。クライアントを使用してMQTT、この手順で新しいルールをテストします。
-
Amazon DynamoDB の概要を確認しました
これまで DynamoDB を使用したことがない場合は、DynamoDB の開始方法を確認して、DynamoDB の基本的な概念と操作に慣れてください。
ステップ 1: このチュートリアルの DynamoDB テーブルを作成する
このチュートリアルでは、これらの属性を持つ DynamoDB テーブルを作成し、架空の気象センサーデバイスのデータを記録します。
-
sample_time
はプライマリキーで、サンプルが記録された時間を記述します。 -
device_id
はソートキーで、サンプルを提供したデバイスを記述します -
device_data
は、デバイスから受信され、ルールクエリステートメントによってフォーマットされたデータです
このチュートリアルの DynamoDB テーブルを作成するには
-
DynamoDB コンソール
を開き、[Create table] (テーブルの作成) を選択します。 -
Create table (テーブルの作成) の
-
[Table name] (テーブル名) で、テーブル名
wx_data
を入力します。 -
[Partition key] (パーティションキー) で
sample_time
と入力し、フィールドの横にあるオプションリストでNumber
を選択します。 -
[Sort key] (ソートキー) で
device_id
と入力します。フィールドの横にあるオプションリストでNumber
を選択します。 -
ページの下部で、[Create] (作成) を選択します。
-
後で DynamoDB ルールアクションを設定するときに device_data
を定義します。
ステップ 2: DynamoDB テーブルにデータを送信する AWS IoT ルールを作成する
このステップでは、ルールクエリステートメントを使用して、架空の気象センサーデバイスからのデータをフォーマットし、データベーステーブルに書き込みます。
気象センサーデバイスから受信したサンプルメッセージペイロードは、次のようになります。
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
データベースエントリでは、ルールクエリステートメントを使用して、メッセージペイロードの構造を次のようにフラット化します。
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind_velocity": 22, "wind_bearing": 255 }
このルールでは、いくつかの 置換テンプレート も使用します。置換テンプレートは、関数およびメッセージデータから動的値を挿入することを可能にする式です。
DynamoDB テーブルにデータを送信する AWS IoT ルールを作成するには
-
AWS IoT コンソールの [Rules]
(ルール) ハブを開きます。または、 AWS Management Console 内で AWS IoT ホームページを開き、メッセージルーティング>ルール に移動できます。 -
[Rules] (ルール) で新しいルールの作成を開始するには、[Create rule] (ルールの作成) を選択します。
-
[Rule properties] (ルールのプロパティ) の
-
[Rule name] (ルール名) で
wx_data_ddb
と入力します。ルール名は AWS アカウント および リージョン内で一意でなければならず、スペースを含めることはできません。この名前にアンダースコア文字を使用して、ルールの名前の 2 つの単語を区切りました。
-
[Rule description] (ルールの説明) で、ルールを説明します。
わかりやすい説明を使用すると、このルールの動作と作成した理由を簡単に思い出すことができます。説明は必要なだけ長くすることができるので、できるだけ詳述してください。
-
-
[次へ] を選択して続行します。
-
SQL ステートメント で:
-
SQL バージョン で、 を選択します
2016-03-23
。 -
SQL ステートメント編集ボックスに、 ステートメントを入力します。
SELECT temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing, FROM 'device/+/data'
このステートメント:
-
トピックフィルターに一致する
device/+/data
トピックを含むMQTTメッセージをリッスンします。 -
wind
属性の要素を個々の属性としてフォーマットします。 -
temperature
、humidity
、およびbarometer
属性を変更せずに渡します。
-
-
-
[次へ] を選択して続行します。
-
[Rule actions] (ルールのアクション) で
-
このルールのルールアクションのリストを開くには、[Action 1] (アクション 1) で
DynamoDB
を選択します。注記
ルールアクションとして D ynamoDBv2 ではなく DynamoDB を選択してください。
-
[Table name] (テーブル名) で、前の手順で作成した DynamoDB テーブルの名前
wx_data
を選択します。[Partition key type] (パーティションキータイプ) および [Sort key type] (ソートキータイプ) のフィールドには、DynamoDB テーブルの値が入力されます。
-
[パーティションキー] に「
sample_time
」と入力します。 -
[パーティションキーの値] に「
${timestamp()}
」と入力します。これは、このルールで使用する 置換テンプレート の最初のものです。メッセージペイロードの値を使用する代わりに、timestamp 関数から返された値を使用します。詳細については、AWS IoT Core デベロッパーガイドの 「タイムスタンプ」を参照してください。
-
[Sort key] (ソートキー) に「
device_id
」と入力します。 -
[ソートキー値] に「
${cast(topic(2) AS DECIMAL)}
」と入力します。これは、このルールで使用する 置換テンプレート の 2 番目のものです。2 番目の要素の値を、キーの数値形式に一致するDECIMAL値にキャストした後、デバイスの ID であるトピック名に挿入します。トピックの詳細については、AWS IoT Core デベロッパーガイドの「トピック」を参照してください。または、キャスティングの詳細については、AWS IoT Core デベロッパーガイドの「キャスト」を参照してください。
-
[この列にメッセージデータを書き込む] に
device_data
と入力します。これにより、DynamoDB テーブルに
device_data
列が作成されます。 -
[オペレーション] は空白のままにします。
-
IAM ロール で、新しいロールの作成 を選択します。
-
[Create role] (ロールの作成) ダイアログボックスの [Role name] (ロール名) に [wx_ddb_role] と入力します。この新しいロールには、プレフィックスがaws-iot-rule「」のポリシーが自動的に含まれ、
wx_data_ddb
ルールが作成した DynamoDBwx_data
テーブルにデータを送信できるようになります。 -
IAM ロール で、 を選択します
wx_ddb_role
。 -
ページの最下部にある [Next] (次へ) を選択します。
-
-
[Review and create] (確認と作成) ページの最下部で、[Create] (作成) を選択して、ルールを作成します。
ステップ 3: AWS IoT ルールと DynamoDB テーブルをテストする
新しいルールをテストするには、MQTTクライアントを使用して、このテストで使用されるMQTTメッセージを公開およびサブスクライブします。
MQTT コンソールで AWS IoT クライアント
MQTT クライアントを使用してルールをテストするには
-
MQTT コンソール の AWS IoT クライアントで
、入力トピック をサブスクライブします device/+/data
。-
MQTT クライアントで、トピック をサブスクライブを選択します。
-
[Topic filter] (トピックフィルター) に、入力トピックフィルター
device/+/data
のトピックを入力します。 -
[Subscribe] (サブスクライブ) を選択します。
-
-
特定のデバイス ID
device/22/data
を使用して入力トピックにメッセージを発行します。ワイルドカード文字を含むMQTTトピックに公開することはできません。-
MQTT クライアントで、トピック に発行 を選択します。
-
[Topic name] (トピック名) に、入力トピックの名前
device/22/data
を入力します。 -
[Message payload] (メッセージペイロード) に、次のサンプルデータを入力します。
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
-
MQTT メッセージを発行するには、「発行」を選択します。
-
MQTT クライアントで、トピック にサブスクライブを選択します。[Subscribe] (サブスクライブ) 列で、
device/+/data
サブスクリプションを選択します。前のステップのサンプルデータがそこに表示されていることを確認します。
-
-
ルールが作成した DynamoDB テーブルの行を確認します。
-
AWS IoT コンソール の DynamoDB Tables ハブで
、wx_data を選択し、Items タブを選択します。 [Items] (アイテム) タブを既に開いている場合は、テーブルのヘッダーの右上にある更新アイコンを選択して、表示を更新する必要がある場合があります。
-
テーブルの sample_time 値はリンクであり、オープンであることに注意してください。最初のメッセージを送ったばかりの場合は、そのメッセージだけがリストに表示されます。
このリンクには、テーブルのその行のすべてのデータが表示されます。
-
device_data エントリを展開して、ルールクエリステートメントの結果のデータを表示します。
-
この表示で使用できるデータのさまざまな表現を詳しく確認します。このディスプレイでデータを編集することもできます。
-
このデータ行の確認が終了したら、加えた変更を保存するには [Save] (保存) を選択し、変更を保存せずに終了するには [Cancel] (キャンセル) を選択します。
-
正しい動作が確認できない場合は、トラブルシューティングのヒントを確認してください。
DynamoDB ルールのトラブルシューティング
想定する結果が表示されない場合に備えて、確認すべき事項をいくつかご紹介します。
-
エラーバナーが表示された
入力メッセージの発行時にエラーが発生した場合は、まずそのエラーを修正してください。次の手順は、このエラーを修正するのに役立つ場合があります。
-
MQTT クライアントに入力メッセージが表示されない
入力メッセージを
device/22/data
トピックに発行するたびに、手順で説明されているようにdevice/+/data
トピックフィルターにサブスクライブした場合、そのメッセージがMQTTクライアントに表示されるはずです。確認すべき事項
-
サブスクライブしたトピックフィルターを確認する
手順の説明に従って入力メッセージのトピックをサブスクライブした場合は、発行するたびに入力メッセージのコピーが表示されます。
メッセージが表示されない場合は、サブスクライブしたトピック名を確認し、発行したトピックと比較します。トピック名は大文字と小文字が区別されます。サブスクライブしたトピックは、メッセージペイロードを発行したトピックと同一である必要があります。
-
メッセージ発行機能を確認する
MQTT クライアントで、サブスクリプション で、デバイス/+/データ を選択し、発行メッセージのトピックを確認してから、トピック に発行 を選択します。トピックの下にある編集ボックスからメッセージペイロードがメッセージリストに表示されるのを確認できるはずです。
-
-
DynamoDB テーブルにデータが表示されない
まず、テーブルのヘッダーの右上にある更新アイコンを選択して、表示を更新します。探しているデータが表示されない場合は、以下を確認してください。
確認すべき事項
-
AWS リージョン MQTT クライアントの と作成したルールを確認する
MQTT クライアントを実行しているコンソールは、作成したルールと同じ AWS リージョンにある必要があります。
-
ルールクエリステートメントの入力メッセージのトピックを確認する
ルールが機能するには、ルールクエリステートメントの FROM句のトピックフィルターに一致するトピック名を含むメッセージを受信する必要があります。
ルールクエリステートメントのトピックフィルターのスペルを、MQTTクライアント内のトピックのスペルで確認します。トピック名では大文字と小文字が区別され、メッセージのトピックはルールクエリステートメントのトピックフィルターと一致する必要があります。
-
入力メッセージペイロードの内容を確認する
ルールが機能するには、SELECTステートメントで宣言されたメッセージペイロードのデータフィールドを見つける必要があります。
ルールクエリステートメントの
temperature
フィールドのスペルを、MQTTクライアント内のメッセージペイロードのスペルと照合します。フィールド名では大文字と小文字が区別され、ルールクエリステートメントのtemperature
フィールドはメッセージペイロードのtemperature
フィールドと同じである必要があります。メッセージペイロード内のJSONドキュメントが正しくフォーマットされていることを確認します。にカンマの欠落などのエラーJSONがある場合、ルールはそれを読み取ることができません。
-
ルールアクションで使用されるキー名とフィールド名を確認する
トピックルールで使用されるフィールド名は、公開されたメッセージのJSONメッセージペイロードにあるものと一致する必要があります。
コンソールで作成したルールを開き、 MQTTクライアントで使用されているルールアクション設定のフィールド名を確認します。
-
ルールによって使用されているロールを確認する
ルールのアクションには、元のトピックを受け取り、新しいトピックを発行するためのアクセス許可が必要です。
ルールにメッセージデータの受信と DynamoDB テーブルの更新を許可するポリシーは、使用されるトピックに固有のものです。ルールで使用されるトピックまたは DynamoDB テーブル名を変更した場合は、ルールアクションのロールを更新して、ポリシーが一致するように更新する必要があります。
これが問題であると疑われる場合は、ルールのアクションを編集し、新しいロールを作成します。ルールアクションによって作成された新しいロールは、これらのアクションを実行するために必要な権限を受け取ります。
-
ステップ 4: 結果と次のステップを確認する
このルールを使用して DynamoDB テーブルにいくつかのメッセージを送信した後、チュートリアルからいくつかの側面を変更すると、テーブルに書き込まれるデータにどのように影響するかを試してみてください。手始めにいくつかアイデアをご紹介します。
-
の変更
device_id
入力メッセージのトピックで、データへの影響を観察します。これを使用して、複数の気象センサーからのデータ受信をシミュレートできます。 -
ルールクエリステートメントで選択したフィールドを変更し、データへの影響を確認します。これを使用すると、テーブルに保存されたデータをフィルタリングできます。
-
再発行ルールアクションを追加して、テーブルに追加された各行のMQTTメッセージを送信します。これをデバッグに使用することができます。
このチュートリアルを完了したら、チュートリアル: AWS Lambda 関数を使用して通知をフォーマットする を確認してください。