将RDS和应用程序的Cloudformation文档分开,但链接在一起

将我的数据库定义和我的应用程序服务器定义放在同一个云端文件中有优点和缺点:

优点:

  • DB主机名,用户名和密码可以提供给应用服务器而不会泄露
  • 单个文件来定义堆栈

缺点:

  • 将数据库主机名,用户名和密码传递给应用程序服务器有点麻烦,并且涉及难以读取用户数据的Fn :: Join和Fn :: GetAtt
  • 数据库的生命周期与堆栈的生命周期相关联

所以我现在正在以另一种方式 – 有一个定义RDS排列的云信息文档,以及一个定义我的应用程序层的单独的cloudformation文档。 也有利弊:

优点:

  • 数据库的生命周期与应用程序堆栈分离
  • 可以有多个应用程序堆栈使用相同的数据库堆栈

缺点:

  • 数据库堆栈必须手动编辑才能添加EC2安全组,因此应用程序堆栈可以访问数据库
  • 不再是定义我的堆栈的单个文档

它是困扰着我的第二种方法的第一个con – 必须在我的应用程序堆栈工作之前手动编辑我的数据库堆栈。 所以我不能在适当的时候进入一个新的应用程序堆栈,而不必在适当的时间进入,并进行必要的编辑。

有没有办法让我的应用程序堆栈重新configuration现有的数据库堆栈与必要的数据库安全组设置?

您可以在应用程序CF模板以及应用程序安全组中指定RDS所使用的安全组的入口/出口,尽pipeRDS CF堆栈的资源尚未由应用程序CF堆栈调配。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html

然后,您将拥有一个SecurityGroup资源ID的参数,您可以在入口中为参考GroupId以及从应用程序安全组(DestinationSecurityGroupId)出站。 (虽然你可以在那里硬编码的资源ID,如果你想这么做…..) http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html