CloudFormation 模板在模板大小中会计入空格...
Source: Dev.to
背景
我们遇到了 AWS CloudFormation 模板大小 1 MB 的限制,导致向 alpha、staging 和 production 的部署失败。常见的缓解措施包括:
- 使用嵌套栈
- 创建更多 CloudFormation 模板
- 删除不必要的资源,或考虑合并 IAM 角色和策略
我们原本计划将监控资源(例如 CloudWatch 警报)移到一个嵌套栈中,但通过 Claude 的快速分析发现了一个有趣且值得质疑的现象。
分析
我发现约 50 % 的 CloudFormation 模板大小仅由空白字符组成。乍看无害,但却占用了 1 MB 限制的相当大比例。
为了测试影响,我使用 jq 对模板进行了压缩:
jq -c '.' cloudformation-stack-update.json > minified.json
在 Infrastructure Composer 中,我分别上传了原始模板和压缩后的模板并点击 Validate。原始模板超过了 1 MB 限制,而压缩后的版本验证成功。
后续步骤
我们的平台团队使用 Serverless Framework 打包 CloudFormation 模板。我提交了一个功能请求以添加压缩支持,但在等待期间,我直接贡献了一个修复:
- 在仓库中打开了一个 PR。
- 添加了测试说明并完成审查合并。
- 重新运行构建流水线后,模板大小减少了 ≈ 50 %,解锁了我们的部署。 🎉
为什么这很重要
空白字符会意外膨胀 CloudFormation 模板大小,导致部署失败。在打包前对模板进行压缩可以防止此类问题。为 Serverless Framework 添加 provider.minify 选项将是一个有用的内置解决方案。