是否可以在云形成脚本中更改RDS实例的逻辑ID?

时间:2018-07-10 16:04:10

标签: amazon-web-services amazon-cloudformation

我们的应用程序具有多个AWS堆栈(开发,测试,生产等)。这些都是使用Cloud Formation模板创建的。我之前有个聪明的人决定对其他产品使用不同的模板来制作产品。我想合并为只有一个Cloud Formation模板。

我已经完成了两个模板之间的文件比较,唯一的区别是RDS实例的逻辑ID。所以我们有这样的东西:

   "MyDbInstanceDev": {
      "Type": "AWS::RDS::DBInstance",
      "Properties": {
        "AllocatedStorage": "200",
        "CopyTagsToSnapshot" : true,
        "DBInstanceClass": "db.m3.medium",

经文:

   "MyDbInstance": {
      "Type": "AWS::RDS::DBInstance",
      "Properties": {
        "AllocatedStorage": "200",
        "CopyTagsToSnapshot" : true,
        "DBInstanceClass": "db.m3.medium",

但是,如果我将逻辑ID从“ MyDbInstanceDev”更改为“ MyDbInstance”,则云形成认为我要删除现有RDS实例,并在原始模板具有旧逻辑ID的堆栈中创建一个新实例。

是否可以通过某种方式更改逻辑ID,并使所有堆栈具有相同的模板而不会丢失数据库?

1 个答案:

答案 0 :(得分:2)

不。使用CFT不能做到这一点,因为CFT可以保持堆栈状态(尽管您看不到它)。即使重命名了DBInstance,如果尝试删除堆栈,也会遇到麻烦。

您可以使用DBInstanceIdentifier作为参数,并且每次要创建数据库时,都将创建新的堆栈部署,而不更新堆栈。除非您是Logical Id个资源,否则auto naming的CFT资源没有太大意义。

要修复您现有的部署,请执行以下操作:

  • 为使用以下工具部署的数据库拍摄快照 MyDbInstanceDev
  • 在中添加名为RestoreFromDBSnapshotIdentifier的参数 MyDbInstance CFT。
  • DBSnapshotIdentifier属性添加到MyDbInstance,并在RestoreFromDBSnapshotIdentifier不为空的情况下有条件地进行设置。
  • 部署。