AWS CloudFormation:是否可以更新堆栈以在不丢失数据的情况下重新创建数据库资源

AWS CloudFormation: Is it possible to Update Stack to recreate DB resources without data loss

我有几个 CloudFormation 堆栈,它们由相同的模板组成,每个模板都包含几个 DynamoDB table。我最近需要更改 DynamoDB table 的 LSI。当为他们的数据库中没有任何数据的堆栈环境更新堆栈时,这很好,但是当我开始更新我们的共享开发堆栈时,我会遇到问题。 LSI 只能在 table 创建时创建,因此当堆栈更改 LSI 时,它必须删除并创建全新的资源,这将删除当前在 table.

中的所有数据

我们的共享开发环境已经包含一些用于演示和测试的数据,我不想打断它。有什么方法可以在更新堆栈时从不同版本的数据库复制数据?我不介意有点手动的过程,比如导出所有数据并在更新后导入,但是数据太多无法手动输入每个项目。如果我必须擦除数据,这不是世界末日,只是想知道是否有任何解决方法。

可以从管理控制台使用 DynamoDB import/export 功能 来实现此目的。

DynamoDB import/export 功能使用 AWS Data PipelineEMR 集群 将数据从 DynamoDB 移动到 S3,反之亦然相反。

AWS Data Pipeline 上有一个默认模板可用于执行此 activity。

完成操作(导出/导入)后,即可释放资源。

AWS DynamoDB Import and Export Blog

DDB Import

DDB Export

CloudFormation 不会自动处理这个问题 - 它只管理 AWS 资源,而不是其中的数据。

但是,有些解决方案允许您将数据从 DynamoDB 导出到 S3,然后再将其导回。例如,以下两个链接显示了如何使用 AWS Data Pipelines 执行此操作: