云形成模板设计

时间:2019-03-11 15:12:03

标签: amazon-cloudformation

在决定编写1个大型CF模板或嵌套许多较小的CF模板时,人们会考虑哪些因素?我想到的用例是基于RDS的,需要定义RDS实例,VPC安全组,参数和选项组以及执行一些自定义Lambda资源。

我的直觉是应该按资源类型来拆分,但是我想知道是否对此有普遍接受的实践。

2 个答案:

答案 0 :(得分:2)

我目前的经验法则是按部署单元划分资源-一起部署,一起部署。

我想拥有最小的可部署堆栈,因为如果有问题,它可以快速部署或失败。我不虔诚地遵守这条规则。例如,我经常将Lambda组合在一起(甚至不相关的Lambda,也取决于项目的大小),因为只有在代码/配置发生更改时它们才会更新,并且我倾向于在只有一个Lambda发生更改的情况下推送小型更新。

我通常还会有一堆共享资源,这些共享资源会在其他所有栈中使用(Fn::Import-ed),例如KMS密钥,共享的S3存储桶等。

请注意,我为每个堆栈设置了CD进程,因此是规则。

答案 1 :(得分:2)

我当前的设置需要部署VPC(带有端点),RDS和应用程序(API网关,Lambda)。我把它们分解为

  • VPC堆栈:每个区域具有1个VPC的共享资源,其中包含公共和专用子网,VPC端点,S3存储桶,NAT网关,ACL,安全组。
  • RDS堆栈:我可以在一个VPC中拥有多个RDS群集,因此将其分开很有意义。另外,由于它需要VPC资源(例如专用子网,安全组),因此在VPC之后创建。该群集由多个应用程序堆栈共享。
  • 应用程序堆栈:这将使用上述RDS群集作为数据库来部署API网关和Lambda(基本上是无服务器的应用程序)。

因此,一般而言,我几乎遵循@Milan Cermak的描述。但就我而言,这些部署是在需要时完成的(不是CD的一部分),因此将导出的参数存储在AWS Systems Manager的参数存储中。