库 / SDK
sivchari/kumo avatar
sivchari/kumo

kumo:一个覆盖 82 个 AWS 服务的轻量级模拟器,适合 CI 与本地开发

用 Go 编写的轻量级 AWS 服务模拟器。既可用作 CI/CD 测试工具,也可用作具有可选数据持久性的本地开发服务器。

1,479 个 Star91 个 ForkGoMIT
GitHub

秒懂

它是什么?
kumo 是一个用 Go 编写的 AWS 服务模拟器,支持 82 个服务,无需认证,单二进制运行,可选数据持久化。本文分析其工作机制、上手方式与适用边界。
适合谁用?
kumo 适合需要在 CI 中快速模拟多个 AWS 服务、且不想处理认证和复杂配置的团队。它不适合需要高保真模拟、或依赖 LocalStack 生态工具链(如 Teraform 集成)的场景。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题

开发与测试 AWS 应用时,真实服务成本高、速度慢,而且 CI 环境通常无法访问真实 AWS 凭证。kumo 的目标是提供一个轻量级的本地替代品,让开发者可以在 CI 或本地运行一个模拟器,用 AWS SDK v2 直接访问,无需认证。它覆盖了 82 个服务,从 S3、DynamoDB 到 Lambda、SageMaker,跨度很大。项目定位明确:不是生产环境的替代,而是测试与开发工具。

工作机制:从服务列表到单二进制

kumo 的核心是一个 Go 二进制,监听默认端口 4566,与 LocalStack 的端口一致。它实现了 AWS 的 HTTP API,SDK 通过设置 BaseEndpoint 指向该端口即可使用。关键在于服务列表是自动生成的,README 中标注了“auto-generated from each service's Meta()”,这意味着每个服务都实现了 Meta() 方法,提供描述信息,然后由 make readme 生成文档。这种设计让服务覆盖情况一目了然,也暗示了每个服务的实现深度可能差异很大。

快速上手:Docker 与二进制两种路径

最直接的启动方式是 Docker:docker run -p 4566:4566 ghcr.io/sivchari/kumo:latest。如果需要数据持久化,设置环境变量 KUMO_DATA_DIR 并挂载卷:docker run -p 4566:4566 -e KUMO_DATA_DIR=/data -v kumo-data:/data ghcr.io/sivchari/kumo:latest。二进制方式需要先 make build,然后运行 ./bin/kumo,同样可以用 KUMO_DATA_DIR=./data ./bin/kumo 启用持久化。Docker Compose 也提供了示例,包含环境变量与卷配置。

从 SDK 视角看使用方式

README 给出了 Go SDK v2 的示例。以 S3 为例,加载配置时使用静态凭证 test/test,然后创建客户端时设置 BaseEndpoint 为 http://localhost:4566,并启用 UsePathStyle。SQS 的示例更简单,只设置 BaseEndpoint。这种模式与 LocalStack 类似,但 kumo 宣称无需认证,所以凭证可以是任意值。注意示例代码中 S3 的 UsePathStyle 被设置为 true,这是模拟器常见的要求,因为真实 S3 默认使用虚拟主机风格寻址。

数据持久化的代价与限制

kumo 的可选数据持久化是一个亮点,但文档没有说明持久化的具体实现机制。KUMO_DATA_DIR 指向一个目录,数据会写入该目录,重启后保留。这听起来简单,但实际使用中需要考虑:持久化是否支持并发访问?不同服务的数据格式是否一致?文档没有给出答案。如果只是 CI 中的临时测试,不启用持久化更简单。如果本地开发需要保留状态,建议先验证关键服务(如 DynamoDB 表结构、S3 对象元数据)在重启后是否完整。

一个明显的限制:实现深度未知

覆盖 82 个服务听起来很全面,但模拟器通常只实现每个服务的一小部分 API。例如,SageMaker 在 kumo 中可能只支持创建和列出模型,而不支持训练任务。文档没有提供每个服务的 API 覆盖列表,也没有说明哪些操作是未实现的。这意味着你无法提前知道某个服务是否满足你的测试需求。建议在采用前,针对你实际使用的 API 操作写一个冒烟测试,在 kumo 上运行,看是否通过。

替代方案:LocalStack 的差异

最直接的替代是 LocalStack,它同样提供 AWS 服务模拟,支持更多服务,并且有活跃的社区和商业支持。LocalStack 的默认端口也是 4566,所以 kumo 在端口选择上直接对标。关键差异在于:LocalStack 提供了更丰富的配置选项(如环境变量、服务插件),并且有专门的工具(如 awslocal 命令行)和 Terraform 集成。kumo 的优势是单二进制、无认证、启动快,适合轻量场景。如果项目已经依赖 LocalStack 的生态,迁移到 kumo 需要重新验证所有集成。

维护与许可

kumo 使用 MIT 许可,这意味着你可以自由使用、修改和分发,甚至嵌入到商业产品中。最近发布频率较高,v0.28.1 在 2026 年 8 月发布,说明项目仍在活跃维护。但版本号 0.x 暗示 API 可能不稳定,未来更新可能引入破坏性变更。升级时需要注意服务行为的变化,建议在 CI 中固定版本,而不是使用 latest 标签。

编辑结论

kumo 适合需要在 CI 中快速模拟多个 AWS 服务、且不想处理认证和复杂配置的团队。它不适合需要高保真模拟、或依赖 LocalStack 生态工具链(如 Teraform 集成)的场景。采用前请先验证你的关键服务(如 DynamoDB、S3、SQS)的行为是否与真实 AWS 一致,尤其是数据持久化模式下的并发与一致性表现。如果 kumo 对某个服务的实现深度不足,你可能需要保留 LocalStack 作为备选。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记