Cloudformation:切碎配置文件的最佳实践是什么?

问题描述

说明

我正在使用 AWS 开发 Web 应用程序,为了将我的端点和 lambda 函数部署到我的沙箱,我使用了 cloudformation 来帮助管理资源。但是随着项目的增长,我发现我的template.yaml文件中有太多重复的资源比如:

  createuserFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/function-user/
      Handler: app.create
      Environment:
        Variables:
           ...
      Policies:
        ...
      Events:
        xxxApi:
          Type: Api
          Properties:
            Path: /users
            Method: post

基本上我为每个端点创建了这种资源,template.yaml 的大小超过 2000 行。我认为应该有一些方法可以将模板文件切成碎片以便于维护。

我尝试过的方法

  1. 我根据不同的端点将模板文件切碎
  2. 我编写了一个具有以下操作的脚本:
  3. 在每个模板文件中(例如 UserResource.yaml 定义了 User CRUD 端点),我使用 S3 存储桶中的 zip 文件指定了 CodeUri
  4. 在主模板文件中,我使用 AWS::Include 从 S3 存储桶导入合并的资源文件

结果

我尝试的方法非常有效。它可以像以前一样成功部署资源,最终得到一个不到 300 行的 template.yaml 和一堆切碎的 yaml 文件

问题

即使我的解决方案有效,我也不认为这是最佳实践,因为每次我想在更改后部署时,我都必须运行脚本来上传资源。我想知道管理资源的最佳做法。

我是 AWS 新手,非母语人士,如果我没有说清楚或犯了一些愚蠢的错误,请多多包涵,谢谢!

解决方法

正如您所指出的,创建并管理第三方脚本以将您的 CFN 模板拼接在一起并不是一个好的做法。

您必须记住,CFN 不是您可能习惯的编程语言。重复是它的自然组成部分。话虽如此,您可以考虑以下 CFN 原生解决方案:

如果这还不够,那么 CFN 可能根本不适合您的用例。然后,您必须查看更强大的 IoC 工具,例如 Terraform 或 CDK(CDK 来自 AWS 并且“符合”CFN)。