You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CDK TypeScript向DynamoDB表添加数据及设置分区键值?

使用TypeScript CDK向DynamoDB表添加数据及分区键数值指定方案

一、向DynamoDB表添加数据的两种方案

CDK核心能力是基础设施编排,默认不提供直接写入数据的功能,但可以通过以下两种方式实现数据写入:

1. 利用CustomResource在部署阶段写入数据

通过自定义资源绑定Lambda函数,在CDK部署表的同时执行数据写入逻辑,示例代码如下:

import * as cdk from 'aws-cdk-lib';
import { Table, AttributeType, BillingMode, TableClass } from 'aws-cdk-lib/aws-dynamodb';
import { Function, Runtime, Code } from 'aws-cdk-lib/aws-lambda';
import { CustomResource, Provider } from 'aws-cdk-lib/custom-resources';

export class DynamoDbDataStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 创建DynamoDB表(复用你的代码)
    const dynamoTable = new Table(this, "dynamoTable", {
      tableName: "dynamoTable",
      partitionKey: { name: 'viewer_id', type: AttributeType.STRING },
      billingMode: BillingMode.PAY_PER_REQUEST,
      tableClass: TableClass.STANDARD
    });

    // 创建写入数据的Lambda函数
    const putDataLambda = new Function(this, 'PutDataLambda', {
      runtime: Runtime.NODEJS_20_X,
      handler: 'index.handler',
      code: Code.fromInline(`
        const { DynamoDBClient, PutItemCommand } = require('@aws-sdk/client-dynamodb');
        const client = new DynamoDBClient({});

        exports.handler = async (event) => {
          if (event.RequestType === 'Create') {
            const params = {
              TableName: '${dynamoTable.tableName}',
              Item: {
                viewer_id: { S: '123' }, // STRING类型分区键赋值
                username: { S: 'test_user' }, // 自定义属性示例
                age: { N: '28' } // 数值类型属性示例
              }
            };
            await client.send(new PutItemCommand(params));
          }
          return { PhysicalResourceId: 'put-data-resource' };
        };
      `),
      environment: {
        TABLE_NAME: dynamoTable.tableName
      }
    });

    // 赋予Lambda写入表的权限
    dynamoTable.grantWriteData(putDataLambda);

    // 创建CustomResource触发Lambda执行
    const provider = new Provider(this, 'PutDataProvider', {
      onEventHandler: putDataLambda
    });

    new CustomResource(this, 'PutDataResource', {
      serviceToken: provider.serviceToken
    });
  }
}

2. 部署后通过AWS SDK写入数据

若无需在部署阶段写入,可在表创建完成后,通过独立脚本或业务代码使用AWS SDK写入数据,示例代码(基于AWS SDK v3):

import { DynamoDBClient, PutItemCommand } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient({ region: '你的AWS区域' });

async function putItem() {
  const params = {
    TableName: "dynamoTable",
    Item: {
      viewer_id: { S: '456' }, // STRING类型分区键赋值
      email: { S: 'test@example.com' }
    }
  };

  try {
    const response = await client.send(new PutItemCommand(params));
    console.log("数据写入成功", response);
  } catch (err) {
    console.error("写入失败", err);
  }
}

putItem();

二、STRING类型分区键指定数值的方法

当分区键类型为AttributeType.STRING时,只需将数值转换为字符串格式传入即可。比如要存储数值123,直接传入字符串"123",在DynamoDB中会以STRING类型存储。

在写入逻辑中,需遵循DynamoDB的数据格式规则:对应分区键的属性值用{ S: "数值的字符串形式" }表示(S代表STRING类型)。

内容的提问来源于stack exchange,提问作者RDagon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:54:14