如何通过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
试过的不理想方案
先将原表备份恢复到临时表,再备份临时表,删除原表后将临时表恢复为原表名,最后删除临时表。但尝试后发现,栈检测到原表已被删除,即便新表同名也无法正常工作。
直接在DynamoDB控制台删除现有表(不通过CloudFormation),然后用原表名恢复备份,再在CloudFormation中检测漂移并手动修复。但该方案无效,因为即便创建了同名新表,CloudFormation仍会标记原表已被删除。
需求
需要一种在销毁栈时能够安全恢复所有数据的简单方法。
内容的提问来源于stack exchange,提问作者David Diaz
相关产品推荐
相关产品推荐

