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,
    };