DynamoDBClientの書き込みコマンドは、PutItemCommand、BatchWriteItemCommand があります。
PutItemCommand
参考
DynamoDBのテーブルはCKDなどで先に作成しておきます。今回は以下のようなテーブルとします。
パーティションキー 名前 pk 型 文字型 ソートキー 名前 sk 型 文字型
例 PutItemCommandを使った書き込み
import { DynamoDBClient, PutItemCommandInput, PutItemCommand } from '@aws-sdk/client-dynamodb';
import { marshall } from '@aws-sdk/util-dynamodb';
const getDynamoDBTableName = () => 'dynamodb-test-table';
const getConfig = () => ({ region: 'ap-northeast-1' });
const getDynamoDBClient = () => {
const config = getConfig();
const client = new DynamoDBClient(config);
return client;
}
interface TestItem {
pk: string;
sk: string;
count: number;
}
const putItem = async (item: TestItem, options?: PutItemCommand) => {
try {
const tableName = getDynamoDBTableName();
const client = getDynamoDBClient();
const params: PutItemCommandInput = {
TableName: tableName,
Item: marshall(item),
...options,
};
const command = new PutItemCommand(params);
const result = await client.send(command);
return result;
} catch (err) {
console.log(err);
throw err;
};
}
/**
* 実行方法
* npx ts-node WriteSample.ts
*/
(async () => {
const dt = new Date("2024-05-01T00:00:00.00Z");
for (let i = 0; i < 24*3; i++) {
const item: TestItem = {
pk: `東京都新宿区#${dt.toISOString().substring(0, 10)}`,
sk: dt.toISOString(),
count: (i + 1) * 100,
}
await putItem(item);
dt.setHours(dt.getHours() + 1);
}
})();
PutItemCommandのItem指定について
util-dynamoDBのmarshall関数を使用しない場合、PutItemCommandのItem指定は以下のような形式にする必要があります。
const params: PutItemCommandInput = {
TableName: tableName,
Item: {
["pk"]: { S: item.pk }, // DynamoDBClientの場合、パーティションキーをこのように指定する
sk: { S: item.sk },
count: { N: `${item.count}` },
},
...options,
};