AWS RDS Stack更新始终替换数据库集群

时间:2019-09-04 05:42:12

标签: amazon-cloudformation amazon-rds amazon-rds-aurora

我首先使用带有云形成模板的群集快照还原了Aurora RDS群集。然后删除快照标识符,更新密码并执行堆栈更新,以使CFT中的所有其他内容保持不变。但是堆栈始终会打印

  

请求的更新需要创建新的物理资源;   因此创建一个。

消息并开始创建新集群。这是我的群集CFT。

"DatabaseCluster": {
  "Type": "AWS::RDS::DBCluster",
  "DeletionPolicy": "Snapshot",
  "Properties": {
    "BackupRetentionPeriod": {
      "Ref": "BackupRetentionPeriod"
    },
    "Engine": "aurora-postgresql",
    "EngineVersion": {
      "Ref": "EngineVersion"
    },
    "Port": {
      "Ref": "Port"
    },
    "MasterUsername": {
      "Fn::If" : [
        "isUseDBSnapshot",
        {"Ref" : "AWS::NoValue"},
        {"Ref" : "MasterUsername"}
      ]
    },
    "MasterUserPassword": {
      "Fn::If" : [
        "isUseDBSnapshot",
        {"Ref" : "AWS::NoValue"},
        {"Ref" : "MasterPassword"}
      ]
    },
    "DatabaseName": {
      "Fn::If" : [
        "isUseDBSnapshot",
        {"Ref" : "AWS::NoValue"},
        {"Ref" : "DBName"}
      ]
    },
    "SnapshotIdentifier" : {
      "Fn::If" : [
        "isUseDBSnapshot",
        {"Ref" : "SnapshotIdentifier"},
        {"Ref" : "AWS::NoValue"}
      ]
    },
    "PreferredBackupWindow": "01:00-02:00",
    "PreferredMaintenanceWindow": "mon:03:00-mon:04:00",
    "DBSubnetGroupName": {"Ref":"rdsDbSubnetGroup"},
    "StorageEncrypted":{"Ref" : "StorageEncrypted"},
    "DBClusterParameterGroupName": {"Ref" : "RDSDBClusterParameterGroup"},
    "VpcSecurityGroupIds": [{"Ref" : "CommonSGId"}]
  }
}

根据AWS RDS CFT doc MasterUserPassword更新,不需要更换群集。

我的CFT是否有问题,还是AWS的问题?

1 个答案:

答案 0 :(得分:1)

如果仅希望更新数据库实例的密码,则不应删除Snapshot标识符。我了解,如果要还原快照,您可能会担心丢失数据。

但是,Cloudformation并非如此。 Cloudformation精确检查您所做的更改并执行相关操作。如果仅更改密码,那么它将不会篡改您的数据-处于任何状态。

但是,如果删除快照标识符,则意味着要更改数​​据库并从中删除快照。因此它将替换您的数据库实例。

检查以下链接,以获取有关更改每个参数的详细信息。 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbcluster.html#cfn-rds-dbcluster-snapshotidentifier

它明确指出快照标识符中的任何机会都将导致替换