如何通过AWS CDK将eu-south-2的DynamoDB副本设为主表并删除eu-west-1原表?
如何通过AWS CDK将DynamoDB副本表设为主表并删除原表
前提条件
- 确认eu-south-2区域的副本表已完成所有数据同步(可通过AWS控制台查看表的复制状态,或执行CLI命令:
aws dynamodb describe-table-replicas --table-name MyTable --region eu-west-1,确保所有副本状态为ACTIVE)。 - 手动终止原主表(eu-west-1)与副本表(eu-south-2)的复制关系,执行CLI命令:
aws dynamodb update-table --table-name MyTable --region eu-west-1 --replica-updates "[{\"Delete\": {\"RegionName\": \"eu-south-2\"}}]"。此时eu-south-2的表已成为独立的可读写表。
步骤1:将现有eu-south-2表导入CDK管理
由于该表已存在,需通过CDK的资源导入功能将其纳入栈的管理,避免CDK尝试重新创建或误删它。
以TypeScript为例,修改CDK代码:
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; import * as cdk from 'aws-cdk-lib'; const app = new cdk.App(); const stack = new cdk.Stack(app, 'MyDynamoDBStack', { env: { region: 'eu-south-2' } // 将栈的目标区域设为eu-south-2 }); // 导入eu-south-2区域的现有表 const existingTable = dynamodb.TableV2.fromTableAttributes(stack, 'ExistingTable', { tableArn: 'arn:aws:dynamodb:eu-south-2:YOUR_ACCOUNT_ID:table/MyTable', partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING } // 必须与现有表的schema完全一致 });
步骤2:移除原eu-west-1主表的CDK定义
删除原代码中关于eu-west-1区域主表的所有定义(包括全局表的replicas配置)。
步骤3:部署变更并验证
- 执行
cdk diff查看变更:确认CDK会删除eu-west-1的原表,同时接管eu-south-2的现有表。 - 执行
cdk deploy部署变更。 - 验证:登录AWS控制台,确认eu-west-1的表已被删除,eu-south-2的表正常运行且支持读写操作。
注意事项
- 数据安全:操作前务必备份eu-south-2表的数据,避免意外丢失。
- 应用适配:确保你的应用已将DynamoDB端点切换到eu-south-2区域,避免连接失效。
- Schema一致性:导入现有表时,
fromTableAttributes中指定的分区键、排序键等schema必须与现有表完全匹配,否则会导致CDK管理异常。
内容的提问来源于stack exchange,提问作者RobotWizard
相关产品推荐
相关产品推荐

