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

如何通过AWS CDK将DynamoDB备份恢复至重新部署的同名表

问题:AWS CDK部署DynamoDB表后的数据恢复困境

我通过AWS CDK在栈中部署了多个DynamoDB表,希望实现以下流程:

  • 表创建完成后先为其创建备份
  • 删除应用内所有栈并重新部署
  • 将备份数据恢复至新部署的表中

核心问题

DynamoDB的备份恢复操作只会创建新表,无法直接更新CDK部署的现有表。但我在CDK中依赖表引用来关联其他资源,因此必须将备份数据恢复到CDK新部署的现有表中。

尝试的解决方案及错误

我编写了以下Lambda函数,尝试通过备份ARN将数据恢复到新表:

async function restoreTableFromBackup(
  backupArn: string,
  targetTableName: string
): Promise<void> {
  try {
    const restoreParams = {
      BackupArn: backupArn,
      TargetTableName: targetTableName,
    };

    console.log(`Restoring from backup ${backupArn} to table ${targetTableName}`);
    await dynamoDBClient.send(new RestoreTableFromBackupCommand(restoreParams));
    console.log(`Successfully restored table ${targetTableName} from backup ${backupArn}`);
  } catch (error) {
    console.error(`Error restoring table ${targetTableName} from backup ${backupArn}:`, error);
    throw error;
  }
}

但由于目标表已存在,执行时触发了如下错误:

ERROR   Error restoring table CommonStack-MovementsTableCommonxxx from backup arn:xxx:table/CommonStack-MovementsTableCommonxxx/backup/xxx: TableAlreadyExistsException: Table already exists: CommonStack-MovementsTableCommonxxx

试过的不理想方案

  1. 先将原表备份恢复到临时表,再备份临时表,删除原表后将临时表恢复为原表名,最后删除临时表。但尝试后发现,栈检测到原表已被删除,即便新表同名也无法正常工作。

  2. 直接在DynamoDB控制台删除现有表(不通过CloudFormation),然后用原表名恢复备份,再在CloudFormation中检测漂移并手动修复。但该方案无效,因为即便创建了同名新表,CloudFormation仍会标记原表已被删除。

需求

需要一种在销毁栈时能够安全恢复所有数据的简单方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:31:05