58

我正在使用 CloudFormation 创建一个 RDS 实例:

“资源”: {
        “我的数据库”:{
            "类型": "AWS::RDS::DBInstance",
            “特性”: {
                “分配存储”:“5”,
                "DBInstanceClass": "db.m1.small",
                “引擎”:“MySQL”,
                “引擎版本”:“5.5”,
                "DBName": "mydb",
                “主用户名”:{
                    “参考”:“数据库用户”
                },
                “主用户密码”:{
                    “参考”:“数据库密码”
                },
                “DBParameterGroupName”:{
                    “参考”:“myRDSParamGroup”
                }
            }
        }

这一切都有效。但是我需要在创建数据库时在数据库上运行初始 SQL,以设置我的应用程序架构。我目前的方法是让应用程序自行迁移,但我想在 CloudFormation 定义中进行。这可能吗?

4

4 回答 4

15

不,这是不可能的。但是,您可以让 EC2 实例连接到您的 RDS 实例来执行此操作。我可能会在 S3 中存储一个 .sql 文件并在 EC2 实例上使用 cloud-init 脚本来下载文件并执行它。

于 2013-01-18T02:53:18.090 回答
7

也可以创建 CloudFormation 自定义资源。这里有一个关于如何使用 SNS 构建的很好的讨论;也可以使用 Lambda 构建一个。自定义资源本质上只是 RPC,因此创建一个以使用模式初始化数据库并不难。

于 2016-06-12T00:30:46.407 回答
3

CloudFormation 仍然没有为我们提供任何解决方案,但希望他们能尽快添加数据库迁移服务支持。

同时,如果您使用 CodePipeline,有一个很好的解决方案:创建一个迁移阶段,调用 Lambda 函数来运行您的迁移。我偶然发现了这个从 CodePipeline 调用 Lambda 的指南,这可能对那些不熟悉的人有帮助。

于 2017-04-27T01:07:50.973 回答
0

另一种选择是对 AWS::RDS::DBInstance 资源使用 DBSnapshotIdentifier 属性。唯一的问题是您首先需要在 AWS 中加载一个数据库才能创建快照。从那时起,您可以自动化您的 cloudformation 堆栈以使用它。

DBSnapshotIdentifier:用于还原数据库实例的数据库快照的名称 (ARN)。

如果该属性包含一个值(不是空字符串),AWS CloudFormation 会从指定的快照创建一个数据库。

使用 DBSnapshotIdentifier 属性还原数据库实例后,您必须为将来对数据库实例的任何更新指定相同的 DBSnapshotIdentifier 属性。当您为更新指定此属性时,数据库实例不会再次从数据库快照中恢复,数据库中的数据也不会更改。但是,如果您不指定 DBSnapshotIdentifier 属性,则会创建一个空数据库实例,并删除原始数据库实例。

从更多信息中查看文档: https ://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbsnapshotidentifier

于 2019-09-02T08:41:39.850 回答