在决定编写1个大型CF模板或嵌套许多较小的CF模板时,人们会考虑哪些因素?我想到的用例是基于RDS的,需要定义RDS实例,VPC安全组,参数和选项组以及执行一些自定义Lambda资源。
我的直觉是应该按资源类型来拆分,但是我想知道是否对此有普遍接受的实践。
答案 0 :(得分:2)
我目前的经验法则是按部署单元划分资源-一起部署,一起部署。
我想拥有最小的可部署堆栈,因为如果有问题,它可以快速部署或失败。我不虔诚地遵守这条规则。例如,我经常将Lambda组合在一起(甚至不相关的Lambda,也取决于项目的大小),因为只有在代码/配置发生更改时它们才会更新,并且我倾向于在只有一个Lambda发生更改的情况下推送小型更新。
我通常还会有一堆共享资源,这些共享资源会在其他所有栈中使用(Fn::Import
-ed),例如KMS密钥,共享的S3存储桶等。
请注意,我为每个堆栈设置了CD进程,因此是规则。
答案 1 :(得分:2)
我当前的设置需要部署VPC(带有端点),RDS和应用程序(API网关,Lambda)。我把它们分解为
因此,一般而言,我几乎遵循@Milan Cermak的描述。但就我而言,这些部署是在需要时完成的(不是CD的一部分),因此将导出的参数存储在AWS Systems Manager
的参数存储中。