当我们从Cloudformationconfiguration中移除SnapshotIdentifier会发生什么

当我们构buildCloudForms堆栈时,我们从快照中恢复了我们的DBCluster。 我们现在正在更新我们的堆栈。

如果我们从我们的configuration中删除SnapshotIdentifier项,Cloudformation将如何处理我们的DBCluster? 我们假设我们不使用堆栈策略。

文档显示更新该参数将导致replace。 但是,这不是我们想要的,我们不确定要做什么来防止这种情况发生。

谢谢!

这改变属性DBSnapshotIdentifier确实将导致AWS :: RDS :: DBInstance的替代。

CloudFormation(CFN)在后台存储所有资源的当前configuration。 在更新资源时,CFN会描述这些资源的调用,并将其与存储的值进行比较。

只有价值观实际上发生了变化,资源才会被更新。 也就是说,只要不更新DBSnapshotIdentifier属性,数据库就不应该被replace。

使用RDS,CFN的这种行为会引起恼人的问题,特别是如果RDSterminal发生变化。

这是我们目前认为的良好做法:

  1. build立一个自己的RDS栈,与其余的分离。 将RDS端点导出为“RDSEndpoint- $版本”。 将版本设置为参数。
  2. 将您的应用程序指向正确的RDS端点。 使用从以前的堆栈导出或使用Route53条目是最简单的。
  3. 如果您需要对导致replace的RDS实例进行更改,请在新的RDS堆栈上进行更改,将$ Version更改为其他值。
  4. 一切都好的 更改应用程序中的RDS端点(或更改Route53条目,无论最适合您的情况)。

常见的问题是:

  • 数据库之间数据迁移的持续时间 – 如果你的应用程序不支持这个,你可能会遇到问题。
  • RDS变更操作通常有点慢。 通常,运行mysqldump + mysql(在MySQL的情况下)而不是依赖于AWS​​实例会更快。
  • 在切换到新堆栈时丢失凭据(您应该logging凭据,但无论如何也要考虑这一点)。

如果您正在寻找针对您的特定问题的一次性解决scheme,则可以使用以下方法之一(可能的停机时间):

  1. 将您的应用程序设置为只读或维护模式(如果应用程序不支持此操作,则可能导致停机)。
  2. (手动或使用RDS快照)创build数据库的转储。
  3. 使用新的CloudFormation模板更新您的数据库
  4. 从您的转储还原。
  5. 切换您的应用程序到生产。 如果端点改变了,也切换。