Skip to content

AWSFinOps Worker v1.0.0

Latest

Choose a tag to compare

@ctkqiang ctkqiang released this 01 Jul 03:25
· 3 commits to main since this release

AWSFinOps Worker 是一个无状态的定时任务工作器,部署于 AWS Lambda,由 EventBridge 按计划触发(默认每 6 小时一次),自动完成一整套云成本治理流程——预算检查、成本查询、成本预测、用量对比、规格优化建议与多渠道报告分发,运行间无需常驻服务器。

这是本项目的首个正式版本,汇总了初始开发周期中完成的全部工作。

核心亮点

  • 7 步治理流水线——预算检查 → 成本查询 → 成本预测 → 用量对比 → 规格优化 → 综合分析 → 广播通知。各步骤相互隔离,单步失败不会中断后续步骤;最终状态(success / partial_failure / error)由所有步骤结果综合判定。
  • 双运行模式——本地循环模式模拟 EventBridge,便于开发调试(go run .,加 WORKER_ONCE=true 可只执行一次);生产环境由原生 AWS Lambda 处理器承载。
  • 三层配置加载——依次读取 S3 .env → AWS Secrets Manager → 系统环境变量,按此优先级合并。已存在于进程环境中的变量(如 Lambda IAM 角色注入的凭证)始终优先,绝不会被 S3 或 Secrets Manager 覆盖,保证生产环境安全性。

报告生成

  • 每次运行导出三种格式:PDF(品牌水印,面向高管,约 20 KB)、JSON(带 schema 版本号与 RFC3339 时间戳,面向开发者/API 集成,约 2 KB)、CSV(UTF-8 BOM,Excel 兼容,面向财务,约 1 KB)。
  • PDF 内嵌 Noto Sans SC 字体,确保中文报告正常渲染。
  • 自动清理本地生成的历史测试报告文件,避免 reports 目录无限增长。

多平台广播

  • 新增广播服务,可将每次运行的报告推送至最多七个渠道:企业微信、飞书、钉钉、Email(SMTP)、Slack、Telegram、Discord。
  • 各平台根据是否配置了对应凭证独立启用,只用一两个平台时无需手动关闭其他平台。
  • 单个平台发送失败仅记录 WARN 日志,不影响其他平台正常发送;BROADCAST_ENABLED 总开关可一键关闭全部广播。

归档策略

  • 旧报告到期后自动归档至 S3 Glacier,存储类型可配置——GLACIER_IR(默认,快速取回)、GLACIER、DEEP_ARCHIVE、STANDARD_IA——以降低长期存储成本。

预算管理

  • 新增线程安全的预算状态模块(internal/billing),承载流水线第一步的预算创建、更新与校验逻辑;启动时会自动初始化一份默认预算。

测试覆盖

  • 开发过程中为配置加载、Telegram 推送、预算状态管理、Worker 引擎与本地调度逻辑补充了大量单元测试。

文档

  • README 全面重构,新增 10 余张架构图:系统整体架构、模块依赖关系、Worker 执行流水线、三层配置加载序列图、报告处理流程、PDF 报告结构、广播架构、AWS 部署拓扑。
  • 新增项目 Logo,并将文档内所有图片统一替换为带 alt 文本与固定宽度的 <img> 标签,保证跨平台显示一致。
  • 新增 MIT 开源许可证。

说明

  • 某个流水线步骤若处于占位阶段(功能待实现),会返回 pending_implementation 状态,不计入失败。
  • internal/aws/s3.go 与 internal/services/handler.go 是早期架构遗留的空壳文件,仍保留在代码树中,但未接入当前的执行流水线。

环境要求

  • Go 1.26+
  • AWS 凭证(Access Key 或 IAM Role)——最小权限策略详见 README
  • 可选:所需广播平台对应的 Bot Token / Webhook

快速开始

git clone https://github.com/ctkqiang/AWSFinOps.git
cd AWSFinOps
cp .env.example .env        # 填入 AWS 凭证
go mod download
WORKER_ONCE=true go run .   # 单次执行(调试模式)

完整提交记录

提交 类型 说明
[a9ca47d](https://github.com/ctkqiang/AWSFinOps/commit/a9ca47df6607863083c21024ee131d05fca6abb3) docs 新增项目 Logo;文档内图片统一替换为带 alt 文本的 <img> 标签
[e5403d7](https://github.com/ctkqiang/AWSFinOps/commit/e5403d7a2fa8784573a0cbcb95028f109a42071d) docs 重构并美化 README(头部横幅、徽章体系、可折叠目录)
[f7efb63](https://github.com/ctkqiang/AWSFinOps/commit/f7efb63ce1af1c5cf23bd2f7b1c5d87af169b92b) feat 新增 S3 Glacier 归档功能;补充 10 余张架构图;新增 MIT 许可证
[93cbf7f](https://github.com/ctkqiang/AWSFinOps/commit/93cbf7fdd513b04397d9cc5f97acc00b0586419e) feat 新增多平台报告广播功能(7 个渠道);清理历史测试报告
[2efc9d6](https://github.com/ctkqiang/AWSFinOps/commit/2efc9d6dc1fa6e6479f6a6c2db09703782d091a8) refactor 移除 HTTP 服务,改为 Lambda/EventBridge Worker 流水线;日志全面中文化
[2e27fe1](https://github.com/ctkqiang/AWSFinOps/commit/2e27fe1eb3c42c2400185f404b2c6fc448cc9a22) chore 为原 HTTP 接口层补充大量单元测试(后被上方重构取代)
[c3ad5ae](https://github.com/ctkqiang/AWSFinOps/commit/c3ad5ae933ec4ef413e1cd78cf17528d0b09456f) feat 新增线程安全的预算管理模块
[cdbe8e6](https://github.com/ctkqiang/AWSFinOps/commit/cdbe8e6da3d5bd33a46fc5e6a156ea3a9321c845) feat 新增三层配置加载器与 Telegram 推送通知
[a6bf74a](https://github.com/ctkqiang/AWSFinOps/commit/a6bf74af8398c57003096c101c486cd72c07cf4d) chore 项目基础结构初始化