AWS CloudFormation-在RDS实例就绪后创建表?

时间:2018-09-21 05:22:05

标签: amazon-web-services aws-lambda amazon-cloudformation amazon-rds

CloudFormation业余爱好者在这里。通过CloudFormation站起RDS实例后,一直在网上查找并找不到任何有关如何创建表的参考。是否可以指定Lambda来启动和创建所有表,或者可以指定要应用的SQL文件?这是什么标准模式?

2 个答案:

答案 0 :(得分:0)

创建RDS实例后,没有任何CloudFormation资源可以处理RDS实例的“内部”;它是一个黑匣子,希望您可以在CloudFormation之外配置(与用户,表和数据一起使用)。这有点令人难过,因为版本控制,管理和部署数据库模式是基础架构和应用程序之间边界上的经典部署问题,而这正是CloudFormation所在的位置(作为版本控制,管理和部署其他基础架构的工具)。

尽管它不是初学者级的功能,但是您可以做的是使用custom resource连接到RDS实例,然后创建它,并运行适当的SQL命令来创建用户和表。您在CloudFormation模板中定义架构(以SQL或更类似于DynamoDB AtributeDefinitions的结构化描述),然后将该架构传递到自定义资源lambda函数,该函数随后在数据库中运行查询。

如果您走这条路,您可能会做大量的工作来研究如何将“之前”和“之后”模式中的差异转换为ALTER TABLE SQL语句以向数据库触发。您的自定义资源lambda代码需要非常健壮,即使在出现错误的情况下,也始终将响应发送回CloudFormation。并且不要忘记,如果您的堆栈更新由于任何原因失败,CloudFormation会再次“反向”调用您的自定义资源(即,要求您将数据库从更新后架构改回到更新前架构)回滚过程。

如果您确实走这条路并且想出一本健壮的东西,请发布它,因为我相信很多人会对它感兴趣!我在网上快速浏览了一下,但找不到任何明显的预先存在的内容。

答案 1 :(得分:0)

不幸的是,CF模板无法直接运行安装脚本。一旦CF模板成功创建了RDS,您可以尝试使用Lambda来运行表设置,就像您提到的一样。 DependsOn attribute有帮助。您应该将凭据传递给Lambda来访问RDS。