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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:55:09