1 回答
- 最新
- 投票最多
- 评论最多
0
【以下的回答经过翻译处理】 你好,
对于你的第一个问题,是的,你的CloudFormation删除了旧表并创建了新表。这里有一篇很好的文章,它解释了发生了什么,以及一些防止此类情况再次发生的策略,包括如何利用堆栈策略和如何利用UpdateReplacePolicy。
https://www.alexdebrie.com/posts/understanding-cloudformation-updates/
同时,这是一篇我在网上发现的关于如何改变你的键结构的好文章,作者是Abhaya Ahauhan。注意:他还包括了一个链接,用于执行这些操作的代码。
https://www.abhayachauhan.com/2018/01/dynamodb-changing-table-schema/
1.创建一个新表(我们称之为NewTable),具有所需的键结构,LSI,GSI。
2.在原始表中启用DynamoDB Streams。
3.将Lambda与流相关联,将记录推入NewTable。 (该Lambda应修剪步骤5中的迁移标志)
4. [*可选*]在原始表上创建GSI以加速扫描项目。确保该GSI只有以下属性:主键和Migrated(参见步骤5)。
5.扫描先前步骤中创建的GSI(或整个表),并使用以下过滤器:
FilterExpression =“attribute_not_exists(Migrated)”
使用“Migrated”:{“S”:“0”}的迁移标志更新表中的每个项目,将其发送到DynamoDB Streams(使用UpdateItem API,以确保不存在数据丢失)。
**注意**您可能需要在更新期间增加表的写入容量单位。
6. Lambda将获取所有项目,修剪掉Migrated标志,并将其推入NewTable。
7.完成所有迁移后,重新将代码指向新表。
8.删除原始表和Lambda函数,一旦确认一切都正常。
希望这有所帮助!
Randy