如何在TypeScript版CDK中为DynamoDB表添加属性
解决DynamoDB CDK代码中属性添加的问题
首先明确:DynamoDB是无Schema数据库,除了主键(分区键/排序键)、索引键之外,普通属性不需要在CDK中提前定义。你可以直接通过应用程序写入这些属性,不需要在表创建阶段声明。
针对你的需求,正确的CDK代码调整如下:
1. 保留主键和GSI的配置
你当前的主键和GSI配置是正确的,无需修改这部分逻辑。
2. 单独配置TTL(生存时间)
TTL不能作为普通属性添加,需要通过timeToLiveAttribute参数单独配置。
完整的TypeScript CDK代码
import * as cdk from 'aws-cdk-lib'; import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; export class MyCdkAppStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // 创建DynamoDB表 const table = new dynamodb.Table(this, 'MyTable', { tableName: 'ccd', partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING, }, // 配置TTL属性 timeToLiveAttribute: 'ttl', removalPolicy: cdk.RemovalPolicy.DESTROY, }); // 添加"ack"字段的全局二级索引 table.addGlobalSecondaryIndex({ indexName: 'ack-i', partitionKey: { name: 'ack', type: dynamodb.AttributeType.STRING, }, }); } }
关键说明:
- 普通属性(Go、ac、amt、cr等):不需要在CDK中定义,你Java代码里的
@DynamoDBAttribute已经完成了属性映射,写入数据时DynamoDB会自动存储这些属性,无需提前声明。 - 报错原因:
attributeDefinitions仅用于定义主键和索引键的属性,不能添加普通属性;而table.addAttributes并不是AWS CDK DynamoDB Table类的有效方法,因此IDE会报错。 - TTL配置:必须通过
timeToLiveAttribute指定TTL对应的属性名(此处为ttl),DynamoDB会自动根据该属性的值删除过期数据。
内容的提问来源于stack exchange,提问作者Web Nerd
相关产品推荐
相关产品推荐

