【AWS】IoT Core - DynamoDBv2チュートリアル

# IoT Core - DynamoDBv2チュートリアル

この記事では、AWS IoT Coreを使用してデバイスデータをDynamoDBv2テーブルに保存する方法について解説します。
具体的な手順を、DynamoDBとDynamoDBv2の違いを踏まえながら説明します。

## 目次
1. DynamoDBとDynamoDBv2の違い
2. ステップ 1: DynamoDB テーブル作成
3. ステップ 2: DynamoDB テーブルにデータを送信する AWS IoT ルールを作成
4. ステップ 3: AWS IoT ルールと DynamoDB テーブルをテスト


## DynamoDBとDynamoDBv2の違い

AWSのDynamoDBとDynamoDBv2では、データの格納形式に重要な違いがあります。
これらの違いを理解することは、データモデルの設計とクエリの最適化において重要です。

### DynamoDB

DynamoDBでは、データは主にJSON形式の文字列として格納されます。
これは、複数のデータポイントを一つのカラムに組み込むことが可能で、柔軟なデータモデルを提供します。
例えば、以下のような形式でデータが保存されます。

| sample_time | device_id | received_data              |
|-------------|-----------|----------------------------|
| 1           | 1         | {"barometer": 1013, ...}   |

ここでは、`received_data` カラムにJSON形式の文字列が格納され、複数のデータフィールドが一つのエントリーに含まれています。

### DynamoDBv2

一方で、DynamoDBv2では、各データポイントが個別のカラムに格納されます。
これにより、データのクエリや分析がより簡単になり、特定のデータポイントに対するアクセスが高速化します。
例として、以下のようなデータ構造があります。

| sample_time | device_id | barometer | humidity | temperature | wind_bearing | wind_velocity |
|-------------|-----------|-----------|----------|-------------|--------------|---------------|
| 1           | 1         | 1013      | 80       | 28          | 255          | 22            |

この形式では、`barometer`、`humidity`、`temperature` など、各データポイントが独立したカラムとして格納されています。
これにより、特定のデータフィールドに対して直接クエリを実行することが可能になります。



## ステップ 1: DynamoDB テーブル作成

以下は、DynamoDB コンソールでテーブルを作成する手順を見やすくまとめたものです。

### DynamoDB テーブル作成手順

1.**DynamoDB コンソールを開く**
- AWS管理コンソールにログインし、DynamoDBサービスを選択します

2.**テーブルの作成**
- DynamoDBのダッシュボードで、[Create table] (テーブルの作成) をクリックします

3.**テーブル名の設定**
- [Table name] (テーブル名) のフィールドに `wx_data` と入力します

4.**キーの設定**
- [Partition key] (パーティションキー) に `sample_time` を入力します
- [Sort key] (ソートキー) に `device_id` を入力します
- 両キーともにデータタイプは `Number` を選択します


5.**テーブルの作成**
- 全ての設定が完了したら、[Create] (作成) ボタンをクリックしてテーブルを作成します

## ステップ 2: DynamoDB テーブルにデータを送信する AWS IoT ルールを作成

以下は、AWS IoT ルールの作成とテストの手順を見やすくまとめたものです。

### AWS IoT ルールの作成手順

1.**ルールの設定**
- ルール名に `wx_data_ddbv2_tutorial` を入力します
- SQL のバージョンとして `2016-03-23` を選択します

2.**SQL ステートメントの設定**
- SQL ステートメントに以下を入力します
 ```
 SELECT sample_time, device_id, temperature, humidity, barometer, wind.velocity as wind_velocity, wind.bearing as wind_bearing FROM 'device/+/data'
 ```
- 「次へ」をクリックします

3.**アクションの選択**
- アクションとして DynamoDBv2 を選択します
- DynamoDBテーブルには `wx_data` を指定します
- IAMロールには新しく `wx_ddbv2_role` を作成します


## ステップ 3: AWS IoT ルールと DynamoDB テーブルをテスト


### IoT Core MQTTテストクライアントの使用手順

1.**サブスクライブ**
- IoT Core MQTTテストクライアントを開きます
- トピック `device/+/data` にサブスクライブします

2.**メッセージのパブリッシュ**
- トピック `device/22/data` に対して、以下のメッセージをパブリッシュします

```
{
  "sample_time": 1,
  "device_id": 1,
  "temperature": 28,
  "humidity": 80,
  "barometer": 1013,
  "wind": {
    "velocity": 22,
    "bearing": 255
  }
}
```

これにより、DynamoDBには以下の形式でデータが保存されます。

| sample_time | device_id | barometer | humidity | temperature | wind_bearing | wind_velocity |
|-------------|-----------|-----------|----------|-------------|--------------|---------------|
| 1           | 1         | 1013      | 80       | 28          | 255          | 22            |


## まとめ

このチュートリアルでは、AWS IoT CoreとDynamoDBv2を用いてデバイスデータの管理方法を学びました。
DynamoDBとDynamoDBv2の違いを理解し、それに基づいてデータを保存する方法を実践しました。

## 参考
* チュートリアル: デバイスデータの DynamoDB テーブルへの保存
    * [AWS IoT Core Tutorial](https://ap-northeast-1.console.aws.amazon.com/iot/home?region=ap-northeast-1#/test)
* DynamoDB公式ドキュメント
    * [AWS DynamoDB Documentation](https://aws.amazon.com/dynamodb/)
* AWS IoT Core公式ドキュメント
    * [AWS IoT Core Documentation](https://aws.amazon.com/iot-core/)

---
### 会社紹介

**株式会社 Mosaica**  
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。  

詳しくは [公式サイト](https://mosaica.co.jp/) までお気軽にご相談ください。
公式サイト： https://mosaica.co.jp/