有没有办法在使用CloudFormation创建RDS数据库实例时运行初始SQL?

Mik*_*gan 39 amazon-web-services amazon-rds aws-cloudformation

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

"Resources": {
        "myDB": {
            "Type": "AWS::RDS::DBInstance",
            "Properties": {
                "AllocatedStorage": "5",
                "DBInstanceClass": "db.m1.small",
                "Engine": "MySQL",
                "EngineVersion": "5.5",
                "DBName": "mydb",
                "MasterUsername": {
                    "Ref": "DBUser"
                },
                "MasterUserPassword": {
                    "Ref": "DBPassword"
                },
                "DBParameterGroupName": {
                    "Ref": "myRDSParamGroup"
                }
            }
        }

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

jam*_*ieb 9

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

  • 今天,使用Lambda函数+ CustomResource比EC2实例更有意义 (9认同)
  • @OdedNiv我试图做同样的事情.你介意分享lambda函数和自定义资源吗? (3认同)
  • 可惜这不是 RDS 的固有功能。无论您是通过 CLI、控制台、SDK、CloudFormation 还是 Beanstalk 创建数据库实例,都应该有一个选项来运行指定的脚本。就像您可以在 EC2 实例上运行用户数据脚本一样。 (3认同)

sig*_*ned 6

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