クラウドアダプタを利用してAWS IoTへデータを送信する
本ページでは、クラウドアダプタを利用して AWS IoT へデータを送信し、DynamoDB へ保存する一連の流れを説明します。
AWS の設定
モノの登録
まずは、AWS IoT コンソール を開き、AWS IoT の設定をします。
「管理>モノ>作成」から、使用するデバイスをモノ(Thing)として AWS 上に登録します。
「一つのモノを作成」を選択します。
名前を「raspi」としてモノを作成します。
次にモノに証明書を追加します。
ここでは「新しい証明書を自動生成(推奨)」を選択し「次へ」を選択します。
「モノを作成」を選択し、作成します。
下記の2つのファイルをダウンロードリンクよりダウンロードします。
- デバイス証明書
- プライベートキーファイル
特に「プライベートキーファイル」は後からダウンロードすることができないので注意して下さい。ダウンロードしたファイルは後ほど使用します。
ダウンロードが終わったら、「完了」を選択します。
次に、AWS IoT のコンソールに戻り「安全性>ポリシー>ポリシーの作成」からモノに割り当てるポリシーを作成します。
ここでは、特に制限のないポリシーを作成します。
下記のように入力し、ポリシーを作成します。
項目 | 入力値 |
---|---|
名前 | NotLimit |
アクション | * |
リソース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'
下記のように入力し、アクションを設定します。
項目 | 入力値 |
---|---|
アクション1 | DynamoDB |
テーブル名 | DeviceDataTable |
パーティションキー | DeviceID |
パーティションキーのタイプ | STRING |
パーティションキー値 | ${id} |
ソートキー(レンジキー) | Timestamp |
レンジキーのタイプ | NUMBER |
レンジキーの値 | ${timestamp} |
また「新しいロールを作成」を選択し、このアクションに割り当てる IAM ロールを作成します。
ここでは、IAM ロールの名前を分かりやすく「DynamoDB」とします。
ロールの作成が完了すると、IAMロールに作成したロールが自動的に選択されます。「次へ」を選択します。
作成確認画面が表示され、「作成」を選択します。
以上でAWS上の設定は完了です。
カスタムエンドポイントの確認
最後に、送信先となる「カスタムエンドポイント」を確認します。
「設定>カスタムエンドポイント」に記載されているエンドポイントを控えておきます。
後ほどコントロールパネル上で設定する際に使用します。
コントロールパネルの設定
次に、コントロールパネルからクラウドアダプタの設定をします。
画面の詳細については クラウドアダプタ画面 をご覧ください。
認証情報の設定
まずは認証情報を設定します。
「クラウドアダプタ>認証情報一覧>認証情報作成」から認証情報を作成します。
ここでは先ほど作成した認証情報を使用し、下記のように入力します。
「秘密鍵」及び「証明書」は、先ほどダウンロードしたファイルをテキストエディタなどで表示し、貼り付けて下さい。
項目 | 入力値 |
---|---|
認証情報種別 | AWS IoT(X.509認証書) を選択 |
認証情報名 | aws-iot |
秘密鍵 | (ランダムな文字列)-private.pem.key の内容 |
証明書 | (ランダムな文字列)-certificate.pem.crt の内容 |
以上で認証情報の設定は完了です。
転送/接続先の設定
次に、転送/接続先設定を作成します。クラウドアダプタでは以下のデータ転送方式があります。
- HTTP 転送
- MQTT 接続
デバイスシャドウや MQTT の subscribe など AWS からデータ受信が必要な場合は「MQTT接続」をご利用下さい。
HTTP 転送
「転送先一覧>転送先作成」から HTTP の転送設定を作成します。
下記のように入力し、転送先設定を作成します。
「転送先URL」には、控えておいた「カスタムエンドポイント」と指定した MQTT topic を入力します。
また「認証情報」は、先ほど作成した「aws-iot」の認証情報を選択します。
「デバイス選択」は使用するデバイスを適切に選択します。
項目 | 入力値 |
---|---|
転送先サービス | AWS IoT を選択 |
転送先名 | AWS IoT |
転送先URL | https://(ランダムな文字列).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
Respberry Pi からコマンドを使用してデータを送信します。
下記のコマンドを実行し、データを送信します。
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
Respberry Pi からコマンドを使用してデータを送信します。
Respberry Pi では、MQTT のクライアントは下記のようにインストール出来ます。
pi@raspberrypi:~ $ sudo apt install mosquitto-clients -y
下記のコマンドを実行し、データを送信します。デバイス 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 のサービスと連携することができます。
是非お試しください。