【问题标题】:Cloudformation: What's the best practice of chopping the configuration file?Cloudformation:切割配置文件的最佳实践是什么?
【发布时间】:2021-09-04 04:24:00
【问题描述】:

说明

我正在使用 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. 我编写了一个包含以下操作的脚本:
    • 端点资源合二为一,上传到S3存储桶
    • 压缩每个 lambda 函数并上传 zip 文件
  3. 在每个模板文件(例如 UserResource.yaml 中定义了用户 CRUD 端点)中,我使用 S3 存储桶中的 zip 文件指定了 CodeUri
  4. 在主模板文件中,我使用 AWS::Include 从 S3 存储桶中导入合并的资源文件

结果

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

问题

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

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

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢您的回答,我会试试看!
    • @xiaokeliu666 没问题。如果答案有帮助,我们将不胜感激。
    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多