CloudFormation:用于创建数据库,表,用户或加载架构的模板RDS Mysql

Lui*_*Lui 7 mysql amazon-web-services amazon-rds aws-cloudformation

使用CloudFormation,我试图弄清楚一些用例.

第一种情况是拥有现有的AWS RDS MySQL服务器,如何通过CloudFormation模板创建数据库,表和用户帐户.

在查看了Cloudformation文档后,我想可能有一个 AWS::RDS::DBInstance属性可以让我做这个动作; 但是,虽然我找不到如何指定允许的数据库主机源(或者我可能误读了它).

aws-properties-rds-database-instance

然后,从AWS查看Cloudformation RDS模板,我看到一个fn::join突出的命令.我的第一个案例会完成fn::join吗?

"UserData": { "Fn::Base64": { "Fn::Join": ["", [....
Run Code Online (Sandbox Code Playgroud)

接下来,在第二种情况下,我也很难找到如何使用现有的RDS MySQL服务器,从MySQL mysqldump加载一个方案.

我已经查看了上面链接中的文档以获得答案,但不太确定.我注意到AWS模板主要允许您创建资源.

最后,为了解决上述两种情况,我一直在阅读它可以或应该(?)使用两种工具方法,通过使用AWS CloudFormation模板和调用Chef来完成.

思考?

hue*_*ois 3

简短的回答是:现在您无法在实例创建时自动运行 SQL 查询(将来,谁知道呢......)。

我将使用以下方法来解决这个经典问题:

  • 使用 EC2 运行您需要的 MySQL 代码(不确定是否需要在 EC2 中放置“DependsOn”子句,因为您必须使用 GetAtt 引用 RDS 端点,这可能会放置隐式 DependsOn 子句) 。只要您以某种方式传递 RDS 端点,您就可以将其放入用户数据或任何您想要的脚本中。当然,您需要在 EC2 上安装 MySQL 客户端包。

正如您所写,CloudFormation 允许您创建 AWS 资源,但填充这些资源取决于您。再一次,MySQL 客户端将完成这个任务(因为 MySQL 转储只不过是文件中的 SQL 代码,与您最初的要求相同)。

仅使用 Chef 或 Puppet 并不能解决您的问题,因为两者都需要在 EC2 上安装代理,因此您无法在 RDS 服务器中运行代理。因此,您可以拥有一个使用 Chef 或 Puppet 代理的 EC2,这将依次启动 MySQL 脚本,但这不会为您提供比之前的解决方案更多的功能

  • 如今,使用 Lambda 函数 + CustomResource 比 EC2 实例更有意义 (4认同)