Repository navigation
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 . # 单次执行(调试模式)