はじめに
このハンズオンでは、AWS DynamoDBで既存の要素を変更せずに新しい要素を追加する方法を紹介します。
UpdateItem APIとSETを活用し、DynamoDBのアイテムに効率的に新しいデータを追加する方法を解説します。
DynamoDBの基本操作を理解していれば簡単に実施できます。
前提条件
DynamoDBの基本的な知識がある(テーブル作成、アイテムの追加など)
環境構成
本ハンズオンの環境構成は以下の通りです。

1. テーブルの作成
AWS管理コンソールから「DynamoDB」の画面を開き、「テーブルの作成」を選択します。

DynamoDBのテーブルを用意します。今回は、サンプルとしてユーザーの情報を保存するDemoTableテーブルを作成します。以下を設定し、他の値はデフォルト値でテーブルを作成してください。
- テーブル名:
DemoTable - パーティションキー:
id

2. データの追加(初期設定投稿)
サンプルのデータを追加しておきます。「アクション」から「項目の作成」を選択します。

以下を入力して「項目の作成」を選択します。
| 属性名 | 値 | タイプ |
|---|---|---|
| id – パーティションキー | 00001 | 文字列 |
| created_at | 1730421073 | 数値 |
| name | hogehoge | 文字列 |
| price | 1000 | 数値 |

作成後、「DemoTable」をスキャンすると作成した項目が表示されます。

3. 新しい要素を追加するLambda関数の作成(既存の要素を変更せずに追加)
次に、DynamoDBで既存の要素を変更せずに新しい要素を追加する方法を紹介します。このハンズオンでは、Orders属性を追加していきます。
ランタイム:Node.Js 20でLambda関数を作成し、以下をコードを設定してください。
※利用するLambdaにアタッチするIAMロールにはDynamoDBの権限を付与してください。
import { DynamoDBClient, UpdateItemCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient({ region: "ap-northeast-1" });
const params = {
TableName: "DemoTable",
Key: {
"id": { "S": "00001" },
},
UpdateExpression: "SET #Orders = :newValue",
ExpressionAttributeNames: {
"#Orders": "orders",
},
ExpressionAttributeValues: {
":newValue": { N: "10" },
},
};
const command = new UpdateItemCommand(params);
try {
const result = await client.send(command);
console.log("orders added successfully:", result);
} catch (error) {
console.error("Error adding orders:", error);
}

コードの設定後、DeployをしてコードをLambda関数に反映させてください。
4. 動作確認
Lambda関数のテストタブからLambda関数を実行してください。

DynamoDBの画面からテーブルの項目を確認します。id:00001の項目に対し、orders:10が追加されています。

5. まとめ
このハンズオンで学んだ内容を活用すれば、既存のアイテムを変更することなく、新しい要素だけを安全に追加できます。データを更新しないように注意しながら、追加のみ行いたい場合に役立ちます。

