首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS CloudFormation创建新的RDS实例

AWS CloudFormation创建新的RDS实例
EN

Server Fault用户
提问于 2017-10-18 14:06:20
回答 1查看 3K关注 0票数 3

我已经创建了一个CloudFormation脚本,它支持我们现有AWS堆栈的一个克隆。我已经添加了一些信息,这样CloudFormation就可以根据现有RDS实例的快照创建RDS,或者用命名的数据库创建一个新实例。但是,当我试图将相同的脚本应用于现有堆栈(通过从现有堆栈创建一个新堆栈,然后尝试通过新脚本进行升级来验证)时,CloudFormation总是创建一个新的RDS实例。

CloudFormation脚本的提取部分如下所示。

代码语言:javascript
运行
复制
{
    "Parameters": {
        "liveDbName" : {
            "Default": "default",
                "Description" : "The live database name to create by default",
                "Type": "String",
                "MinLength": "1",
                "MaxLength": "64",
                "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*",
                "ConstraintDescription" : "must begin with a letter and contain only alphanumeric characters."
        },
        "liveDbSnapshotIdentifier" : {
            "Description" : "This overrides Default Production Db name",
            "Type": "String",
            "Default": ""
        },
    },
    "Metadata": {
        "AWS::CloudFormation::Interface": {
            "ParameterGroups": [
                {
                    "Label": {
                        "default": "Db Layer Configuration"
                    },
                    "Parameters": [
                        "webDbInstanceType",
                        "liveDbName",
                        "liveDbSnapshotIdentifier",
                        "dbTimeZone",
                        "dbMasterUser",
                        "dbMasterPassword"
                    ]
                }
            ]
        }
    },
    "Conditions": {
        "UseLiveDbSnapshot" : { "Fn::Not" : [{ "Fn::Equals" : [ {"Ref" : "liveDbSnapshotIdentifier"}, "" ] }] },
    }
    "Resources": {
        "WebDb": {
            "Type": "AWS::RDS::DBInstance",
            "DeletionPolicy": "Snapshot",
            "Properties": {
                "AllocatedStorage": "100",
                "AutoMinorVersionUpgrade": "true",
                "BackupRetentionPeriod": "30",
                "CopyTagsToSnapshot": "true",
                "DBName" : {
                    "Fn::If" : [ "UseLiveDbSnapshot", { "Ref" : "AWS::NoValue"}, { "Ref" : "liveDbName" } ]
                },
                "DBSnapshotIdentifier" : {
                    "Fn::If" : [ "UseLiveDbSnapshot", { "Ref" : "liveDbSnapshotIdentifier" }, { "Ref" : "AWS::NoValue"} ]
                },
                "DBInstanceClass": {
                    "Ref": "webDbInstanceType"
                },
                "DBParameterGroupName": {
                    "Ref": "WebDbParameterGroup"
                },
                "DBSubnetGroupName": {
                    "Ref": "DbSubnetGroup"
                },
                "Engine": "mysql",
                "MasterUsername": {
                    "Ref": "dbMasterUser"
                },
                "MasterUserPassword": {
                    "Ref": "dbMasterPassword"
                },
                "MultiAZ": "true",
                "PubliclyAccessible": "false",
                "StorageType": "gp2",
                "Tags": [
                    {
                        "Key": "Name",
                        "Value": "WebDb"
                    }
                ]
            }
        }
    }
}

当然还有脚本的其他部分,但这是处理我们的数据库部分的部分(完全“名称空间”,我相信)。

我的脚本做错了什么,有正确的方法吗?显然,我不希望CloudFormation恢复现有实例上的快照,但我也不希望它用命名的数据库创建一个新实例。

编辑:“现有”堆栈脚本包括

我添加了现有的堆栈脚本作为Dropbox的链接,因为文件太长,不能直接包含在这里:https://www.dropbox.com/s/313kmcnzk0pvyqi/sanitized-cloudformation.json?dl=0

EN

回答 1

Server Fault用户

发布于 2017-10-18 21:03:10

原始CloudFormation模板不包括DBNameDBSnapshotIdentifier属性。因此,RDS实例是在没有DBName的情况下创建的。任何由RDS实例保存的数据库都是在事实之后创建的,而不是由CloudFormation创建的。

根据输入参数的不同,新模板包括DBNameDBSnapshotIdentifier

根据CloudFormation资源的AWS::RDS::DBInstance引用文档,如果添加/更改/删除DBNameDBSnapshotIdentifier属性,那么将重新创建RDS实例。

来源:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html

我猜想,当您应用更新的模板时,您试图使用您在RDS实例中拥有的数据库名称作为liveDbName的值。但是,就CloudFormation而言,这是对RDS实例的更改,需要替换。

要应用模板更新,您需要修改它,使其既不应用DBName也不应用DBSnapshotIdentifier

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/879085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档