将我的数据库定义和应用程序服务器定义放在同一个云信息文档中有利有弊:
优点:
- 数据库主机名、用户名和密码可以提供给应用服务器而不会泄露
- 单一文档定义堆栈
缺点:
- 将数据库主机名、用户名和密码传达给应用服务器有点混乱,并且涉及 Fn::Join 和 Fn::GetAtt,难以读取用户数据
- 数据库的生命周期与堆栈的生命周期相关
因此,我目前正在采用另一种方法 - 拥有一个定义 RDS 安排的云信息文档,以及一个定义我的应用层的单独云信息文档。优点和缺点如下:
优点:
- DB 的生命周期与应用程序堆栈分离
- 可以使用相同的数据库堆栈来创建多个应用程序堆栈
缺点:
- 必须手动编辑数据库堆栈以添加 EC2 安全组,这样应用程序堆栈才能访问数据库
- 不再是一个单一的文档定义我的堆栈
第二种方法的第一个缺点让我很困扰 - 我必须手动编辑数据库堆栈,然后应用程序堆栈才能工作。因此,我无法干净地启动新的应用程序堆栈,而必须在正确的时间进入并进行必要的编辑。
我的应用程序堆栈有没有办法使用必要的数据库安全组设置重新配置现有的数据库堆栈?
答案1
尽管应用程序 CF 堆栈尚未配置 RDS CF 堆栈的资源,您仍可以为应用程序 CF 模板中相关 RDS 使用的安全组以及应用程序安全组指定入口/出口。 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。