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