Amazon cloudformation 云形成模板设计

Amazon cloudformation 云形成模板设计,amazon-cloudformation,Amazon Cloudformation,当人们决定编写一个大的CF模板,或者嵌套许多较小的模板时,他们会考虑哪些因素?我想到的用例是基于RDS的,我需要定义RDS实例、VPC安全组、参数和选项组,以及执行一些自定义lambda资源 我的直觉是,这应该被划分,也许是按资源类型划分,但我想知道在这方面是否有普遍接受的做法 我目前的经验法则是按部署单元划分资源-什么部署在一起,什么部署在一起 我希望拥有最小的可部署堆栈,因为如果出现问题,部署或失败都很快。我不虔诚地遵守这条规则。例如,我经常将Lambda分组在一起(即使是不相关的,也取决于

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


我的直觉是,这应该被划分,也许是按资源类型划分,但我想知道在这方面是否有普遍接受的做法

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

我希望拥有最小的可部署堆栈,因为如果出现问题,部署或失败都很快。我不虔诚地遵守这条规则。例如,我经常将Lambda分组在一起(即使是不相关的,也取决于项目的大小),因为它们只在代码/配置更改时更新,并且我倾向于在只有一个Lambda更改的地方推送小的更新

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


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

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

  • VPC堆栈:一个共享资源,每个区域有一个VPC,具有公共和私有子网、VPC端点、S3存储桶、NAT网关、ACL、安全组
  • RDS堆栈:我可以在一个VPC中有多个RDS集群,因此有必要将其分开。此外,这是在VPC之后创建的,因为它需要VPC资源,如专用子网、安全组。此群集由多个应用程序堆栈共享
  • 应用程序堆栈:部署API网关和Lambdas(基本上是一个无服务器应用程序),将上述RDS集群作为DB

所以,总的来说,我基本上遵循了@Milan Cermak所描述的。但在我的例子中,这些部署是在需要时完成的(不是CD的一部分),因此导出的参数存储在AWS Systems Manager的参数存储中

,这很有帮助,谢谢你,特别是关于部署方法与共享资源的评论。将导出的参数存储到Systems Manager也是我正在尝试的。很高兴看到其他人也使用这种方法。感谢您提供指向systems manager的指针。现在可能对我的需求没有用处,但将来肯定值得考虑。