クラウドアダプタを使用してAWS IoTへデータを送信する

本ページでは、クラウドアダプタを使用してAWS IoTへデータを送信し、DynamoDBへ保存する一連の流れを説明します。

AWSの設定

モノの登録

まずは、AWS IoT コンソール を開き、AWS IoTの設定をします。
「管理>モノ>作成」から、使用するデバイスをモノ(Thing)としてAWS上に登録します。



「単一のモノを作成する」を選択します。



名前を「raspi」としてモノを作成します。



次にモノに証明書を追加します。
ここでは「証明書を作成」を選択し「1-Click 証明書」を作成します。



下記の2つのファイルをダウンロードリンクよりダウンロードします。

  • このモノの証明書
  • プライベートキー

特に「プライベートキー」は後からダウンロードすることができないので注意して下さい。
ダウンロードしたファイルは後ほど使用します。
また、「有効化」をクリックし証明書を有効化します。
通常はここで「ポリシーのアタッチ」を選択し、証明書に対してポリシーを割り当てますが、ポリシーは未作成の状態なのでここではそのまま「完了」を選択します。



次に、AWS IoTのコンソールに戻り「安全性>ポリシー>ポリシーの作成」からモノに割り当てるポリシーを作成します。



ここでは、特に制限のないポリシーを作成します。
下記のように入力し、ポリシーを作成します。

項目入力値
名前NotLimit
アクションiot:*
リソースARN*
効果許可 を選択



次に、作成したポリシーをモノの証明書へ紐付けます。
「安全性>証明書」を選択し、先ほど作成した証明書の右上の「…」から「ポリシーのアタッチ」を選択します。



先ほど作成した「NotLimit」のポリシーを選択し、ポリシーをアタッチします。

以上でAWS IoTへのモノの登録は完了です。

DynamoDBの設定

続いて、AWS IoTとAmazon DynamoDBを連携させ、AWS IoTに送信したデータをデータベースへ保存します。
まずは、DynamoDBのテーブルを作成します。
Amazon DynamoDB コンソール を開き「テーブルの作成」を選択します。



ここでは、下記のように入力しテーブルを作成します。
赤枠の箇所は初期値から変更している部分です。

項目入力値
テーブル名DeviceDataTable
パーティションキーDeviceID
パーティションキーのタイプ文字列 を選択
ソートキーの追加選択
ソートキーTimestamp
ソートキーのタイプ数値 を選択

以上でDynamoDBのテーブルの作成は完了です。

ルールの設定

次にAWS IoTへ戻り、作成したDynamoDBと連携するようにルールを設定します。
「ACT>ルールの作成」を選択し、ルールを作成します。



ルールの名前と説明を入力します。
ここでは分かりやすく「DynamoDB」と入力します。



ルールクエリステートメントを設定します。
今回は「device/data」というMQTT topicにpublishされたメッセージを全て、DynamoDBへ保存するよう、ルールクエリステートメントを入力します。
また「アクションの追加」を選択し、アクションを設定します。

SELECT * FROM 'device/data'



「DynamoDB テーブルにメッセージを挿入する」を選択し「アクションの設定」を選択します。



下記のように入力し、アクションを設定します。

項目入力値
テーブル名DeviceDataTable
パーティションキー値${id}
レンジキーの値${timestamp}

また「ロールの作成」を選択し、このアクションに割り当てるIAM ロールを作成します。



ここでは、IAM ロールの名前を分かりやすく「DynamoDB」とします。



ここまで入力できれば「アクションの追加」を選択します。



「ルールの作成」を選択します。

以上でAWS上の設定は完了です。

カスタムエンドポイントの確認

最後に、送信先となる「カスタムエンドポイント」を確認します。
「設定>カスタムエンドポイント」に記載されているエンドポイントを控えておきます。
後ほどコントロールパネル上で設定する際に使用します。



コントロールパネルの設定

次に、コントロールパネルからクラウドアダプタの設定をします。
画面の詳細については クラウドアダプタ画面 をご覧ください。

認証情報の設定

まずは認証情報を設定します。
「クラウドアダプタ>認証情報一覧>認証情報作成」から認証情報を作成します。



ここでは先ほど作成した認証情報を使用し、下記のように入力します。
「秘密鍵」及び「証明書」は、先ほどダウンロードしたファイルをテキストエディタなどで表示し、貼り付けて下さい。

項目入力値
認証情報種別AWS IoT(X.509認証書) を選択
認証情報名aws-iot
秘密鍵(ランダムな文字列)-private.pem.key の内容
証明書(ランダムな文字列)-private.pem.crt の内容

 

以上で認証情報の設定は完了です。

転送/接続先の設定

次に、転送/接続先設定を作成します。
クラウドアダプタでは、以下のデータ転送方式があります。

  • HTTP転送
  • MQTT接続

デバイスシャドウやMQTTのsubscribeなどAWSからデータ受信が必要な場合は「MQTT接続」をご利用下さい。

HTTP転送

「転送先一覧>転送先作成」からHTTPの転送設定を作成します。



下記のように入力し、転送先設定を作成します。
「転送先URL」には、控えておいた「カスタムエンドポイント」と指定したMQTT topicを入力します。
また「認証情報」は、先ほど作成した「aws-iot」の認証情報を選択します。
「デバイス選択」は使用するデバイスを適切に選択します。

項目入力値
転送先サービスAWS IoT を選択
転送先名AWS IoT
転送先URLhttps://(ランダムな文字列).iot.ap-northeast-1.amazonaws.com:8443/topics/device/data?qos=1
認証情報【AWS IoT(X.509証明書)】aws-iot を選択
デバイス選択使用するデバイスを選択

 

以上でコントロールパネル上の設定は完了です。

MQTT接続

「MQTT接続先一覧>MQTT接続先作成」からMQTTの接続設定を作成します。



下記のように入力し、接続先設定を作成します。
「接続先エンドポイント」には、控えておいた「カスタムエンドポイント」を入力します。
また「認証情報」は、先ほど作成した「aws-iot」の認証情報を選択します。
「デバイス選択」は使用するデバイスを適切に選択します。

項目入力値
接続先名AWS IoT
接続先エンドポイント(ランダムな文字列).iot.ap-northeast-1.amazonaws.com
認証情報【AWS IoT(X.509証明書)】aws-iot を選択
デバイス選択使用するデバイスを選択

以上でコントロールパネル上の設定は完了です。

デバイスからのデータ送信と受信確認

それでは実際にデバイスからデータを送信します。

HTTP

ラズベリーパイからコマンドを使用してデータを送信します。
下記のコマンドを実行し、データを送信します。

pi@raspberrypi:~ $ curl -i -X POST -H 'Content-Type: application/json' http://gw.iot.iij.jp/v1 -d '{}'
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 11 Dec 2019 03:40:40 GMT
Transfer-Encoding: chunked
Connection: keep-alive

コマンドを実行するとDynamoDBの「項目」にデータが表示され、保存されたのが分かります。
デバイスIDはマスクしています。

HTTP転送では、デバイスIDやタイムスタンプなどを自動付与することができます。

MQTT

ラズベリーパイからコマンドを使用してデータを送信します。
ラズベリーパイでは、MQTTのクライアントは下記のようにインストール出来ます。

pi@raspberrypi:~ $ sudo apt install mosquitto-clients

下記のコマンドを実行し、データを送信します。
デバイスIDはマスクしています。

pi@raspberrypi:~ $ mosquitto_pub -h gw.iot.iij.jp -d -t 'device/data' -m "{\"id\": \"dvc-xxxxxxxxxx\", \"timestamp\": $(date +%s)}"
Client mosqpub/2710-raspberryp sending CONNECT
Client mosqpub/2710-raspberryp received CONNACK
Client mosqpub/2710-raspberryp sending PUBLISH (d0, q0, r0, m1, 'device/data', ... (49 bytes))
Client mosqpub/2710-raspberryp sending DISCONNECT

コマンドを実行するとDynamoDBの「項目」にデータが表示され、保存されたのが分かります。

 

 

以上で説明は終了です。

この他にも「Lambda Function」の実行や「Amazon S3」への保存 等、様々なAWSのサービスと連携することができます。
是非お試し下さい。