LoginSignup
2
0

More than 1 year has passed since last update.

【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた(その2)

Last updated at Posted at 2021-06-28

前回 【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた(その1)

の続きです。

前提

  • AWS IOT CORE 初級ハンズオンを参考にしています。
  • 送信元デバイスは NVIDIA Jetson Nano 開発者キット B01 を利用
  • AWS IoT Core のコンパネで「モノ」を作成して、「モノ」用の証明書も作成してデバイスに保存
  • デバイスにはAWS IoT Device SDK をインストール
  • クライアントプログラムはAWS IOT CORE 初級ハンズオンのダミーデバイス用プログラム( device_main.py)を利用
  • デバイスからIoT Coreに向けてMQTTで10秒おきにデータ送信 → 30秒おきに変更
  • データはこんな感じ
{
  "DEVICE_NAME": "jetson-nano-tsumida",
  "TIMESTAMP": "2021-03-17T22:03:48",
  "TEMPERATURE": 18,
  "HUMIDITY": 57
}

2-1.データのストア先と使ったルール(アクション)

※試してみたいものをチョイスしたリスト

# ストア先 使ったルール(アクション) 途中経由したサービス
1 S3 Amazon Kinesis Firehose ストリームにメッセージを送信する Amazon Kinesis Firehose
2 DynamoDB Amazon Kinesis ストリームにメッセージを送信する Amazon Kinesis Data Streams,Lambda
3 timestream Timestreamテーブルにメッセージを書き込む なし
4 Elasticsearch Amazon Elasticsearch Serviceにメッセージを送信する なし
5 AWS IoT Analytics IoT Analyticsにメッセージを送る IoT Analytics内でchannel,pipeline,storageを経由

今回はこの2 「Amazon Kinesis ストリームにメッセージを送信する」 でLamdaでDyanamoDBに保存するをやっていきます。

2-2-2. 「Amazon Kinesis ストリームにメッセージを送信する」 でLamdaでDyanamoDBに保存する

Dyanamo DBはアプリケーションが参照するためのNoSQL データストアです。
kinesis Data Streams に流すことで大量データのリアルタイム処理が効率的に行えます。

① Amazon Kinesis Data Streamsの作成

まずKinesis streams コンソールでストリームを作成します。

データストリームの作成を押して
image.png

データストリーム名に名前をつけます。(今回はjetson-nano-tsumidaと入れました。)
開いているシャード数は1にします。シャード数分コストはかかりますが処理性が上がります。

image.png

ステータスがアクティブになれば完了です。

image.png

② DynamoDB テーブルの作成

次にDyanamoDBのテーブルを作ります。

テーブルの作成を押します。
image.png

DyanamoDB テーブルの作成画面で
テーブル名に名称(今回はjetson-nano-tsumida-yyyymmddと入力)
パーティションキーに deviceid と入力、ソートキーの追加にチェックして timestamp を入力
これでテーブルを作ります。

image.png

これはすぐできると思います。
image.png

③ IAMロールの作成

Lambda用のロールと、AWS IoT 用のロールを作ります。

まずLambda用のロールです。
IAM のロールメニューで「ロールの作成」を押します。

image.png

一般的なユースケースのLambdaを選んで次の「ステップ:アクセス権限」を押します。
image.png

以下の3つにチェックを入れ「次のステップ:タグ」を押します。

  • AWSLambdaBasicExecutionRole
  • AmazonKinesisReadOnlyAccess
  • AmazonDynamoDBFullAccess

※今回はセキュリティ面で絞るべきところは考慮外とします。

image.png

image.png

image.png

タグは付けずに次に行きます。
ロール名に名前を付け(今回はjetson-nano-tsumida-lambda とつけました)
ポリシーにチェックした3つが入っているかを確認してロールの作成を押します。

image.png

次にAWS IoT 用のロールです
同様にIAMのロール画面でIoTを選び、「次のステップ:アクセス権限」を押します。

image.png

標準で必要な3つのポリシーがついてるのでそのまま次に行きます。
image.png

タグは付けずに次に行きます。
ロール名に名前を付け(今回はjetson-nano-tsumida-iot とつけました)ロールの作成を押します。

④ Lmabdaの設定

次はLambdaを設定していきます。

関数の作成を押す
image.png

一から作成を選ぶ
関数名に名前を付ける(今回は jetson-nano-tsumida-yyyymmdd とつけました。)
ランタイムはpython3.8を選択

image.png

デフォルトの実行ロールの変更 を押し、既存のロールを使用する にチェックをして
③ IAMロールの作成で作成したLambda用のロールを選び、関数の作成を押します。
image.png

次にトリガーを追加します。「+トリガーを追加」ボタンを押します。
image.png

トリガーの選択でKinesisを選びます。
image.png

Kinesis ストリームは、① Amazon Kinesis Data Streamsの作成 で作成したストリームを選びます。

image.png

次にコードをタブでコードを書きます。
image.png

lambda_function.pyをダブルクリックしてコードを書きます。

※今回のlambdaのコードは、AWS IoT ハンズオン用に用意されているここを参照してください。

Deployを押します。
image.png

次にこのpythonのコードが使う環境変数(Dynamoテーブルなど)を設定します。
上タブの設定、左メニューの環境変数を選び編集を押す。
image.png

キーに TABLE_NAME
値に②DynamoDB テーブルの作成で作ったテーブル名を入れ保存する
image.png

これで Kinesis → lambda → DynamoDBの部分の設定完了です。
次にIoT Coreのルールとアクションを設定します。

⑤ IoT Core ルール アクションの設定

前回と同様にルールとアクションを設定していきます。
左メニュー「ACT」の下にあるルールをクリックし、画面右上の「作成」をクリックします。

ルールの作成画面が出てくるのでルールに名前を付け、クエリを書きます。
image.png

ルール名はjetson_nano_tsumida_kinesisとしました。クエリは以下です。

 select * from 'data/jetson-nano-tsumida'

次に「アクションの追加」をクリックして、
「Amazon Kinesis ストリームにメッセージを送信する」を選択して「アクションの設定」をクリックします。

image.png

アクションの設定画面が表示されるので
ストリーム名に ① Amazon Kinesis Data Streamsの作成 で作ったもの
パーティションキーに ${newuuid()} を入力
ロールは③ IAMロールの作成 で作ったAWS IOT 用のロールを選び「ロールの更新」を押します。
image.png

アタッチされたポリシーと表示されたらアクションの追加を押します。
image.png

元の画面に戻るので「ルールの作成」を押します。

⑥ データを確認する

AWS IOT CORE 初級ハンズオンのダミーデバイス用プログラム(device_main.py)でAWS IoT Coreに向けてデータを送り続けた状態にしています。※前回と変更して30秒おきに送っています。

  • Kinesis Data streams に流れたデータ確認

kinesis のコンソールで 作成したデータストリームのストリームメトリクスを見てみます。
レコードを取得 -合計(数)とput レコード - 合計(バイト)が増えていれば、データが流れている という事になります。

image.png
image.png

  • DynamoDB にたまったデータの確認

Dynamo のコンソールのテーブルで作成したテーブルをクリックし、「項目」タブを選ぶと送信されたデータが確認できます。
ちゃんと届入れいれば、1件ごとに1行表示されます。
image.png

データをクリックするとこんな感じで中が見れます。
image.png

DyanamoDBへの溜め方は以上です。

⑤ 今回のまとめ(IoT Core → ルール → kinesis Data Streams → Lambda → DyanamoDB)

IoT Core に届いたデータをKinesis Data streams を経由してDynamoDBへ入れてみました。
IoT CoreからDyanamoへは直接データを入れることもできますが、Kinesis Data Streams とLambdaを使うことで
DyanamoDBへストアする際に並列処理をしたりできるので、処理性能を上げることができます。

次回は
timestream とElastic Searchへ入れてみた を書きます。

追記:次回分リンク。長くなったのでElasticsearchはさらに次回に
【AWS IoT】AWS IoT Core ルールを使ったデータストアを試してみた(その3)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0