如何解决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 行。我认为应该有一些方法可以将模板文件切成碎片以便于维护。
我尝试过的方法
- 我根据不同的端点将模板文件切碎
- 我编写了一个具有以下操作的脚本:
- 在每个模板文件中(例如 UserResource.yaml 定义了 User CRUD 端点),我使用 S3 存储桶中的 zip 文件指定了 CodeUri
- 在主模板文件中,我使用 AWS::Include 从 S3 存储桶导入合并的资源文件
结果
我尝试的方法非常有效。它可以像以前一样成功部署资源,最终得到一个不到 300 行的 template.yaml 和一堆切碎的 yaml 文件。
问题
即使我的解决方案有效,我也不认为这是最佳实践,因为每次我想在更改后部署时,我都必须运行脚本来上传资源。我想知道管理资源的最佳做法。
我是 AWS 新手,非母语人士,如果我没有说清楚或犯了一些愚蠢的错误,请多多包涵,谢谢!
解决方法
正如您所指出的,创建并管理第三方脚本以将您的 CFN 模板拼接在一起并不是一个好的做法。
您必须记住,CFN 不是您可能习惯的编程语言。重复是它的自然组成部分。话虽如此,您可以考虑以下 CFN 原生解决方案:
-
nested stacks - 重用和参数化公共资源的常用方法
-
将您的模板拆分为逻辑分离的模板,例如网络堆栈、API 堆栈和数据库堆栈。然后您通过 Exporting stack output values
重新使用它们 -
还有 CFN macros 和 custom resources 可以作为 CFN 中缺少循环的替代品。
如果这还不够,那么 CFN 可能根本不适合您的用例。然后,您必须查看更强大的 IoC 工具,例如 Terraform 或 CDK(CDK 来自 AWS 并且“符合”CFN)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。