写一个用到 S3、消息队列或 DynamoDB 的应用,本地开发时也得准备这些依赖。直接连 AWS 要管账号和测试资源,自己写 mock 又容易把真正的调用流程跳过去。
Floci 是一个用 Java 写的本地 AWS 服务模拟器:在本机启动服务,把 AWS CLI 或 SDK 的 endpoint 指向它,就能沿用原来的接口做开发和集成测试。它采用 MIT 许可证,不需要注册 Floci 账号或申请它的授权令牌,也没有按付费档位解锁功能的设计。
比自己写 mock 更接近实际调用
Floci 提供 AWS 协议兼容的本地接口,统一入口是 http://localhost:4566。支持范围包含 S3、SQS、SNS、DynamoDB、Lambda、API Gateway、Secrets Manager 等,具体到每项服务支持哪些操作,需要按服务清单核对,不能把“支持某服务”理解成完整复刻 AWS。
比如,一个上传文件后发消息的后端,可以把对象存储和队列都指向本地环境,让测试走过 SDK 请求、资源创建和业务处理这条链路。相比只替换掉几个函数返回值,这种方式更适合检查应用与云服务接口之间的衔接。
项目还提供 Terraform、CDK、OpenTofu 的接入说明,以及 Java、Go、Python、Node.js / TypeScript、.NET 的 Testcontainers 集成,适合把临时测试环境放进 CI。
用 Docker Compose 跑一个本地 S3
先准备 Docker、Docker Compose,以及用于验证的 AWS CLI。新建 compose.yaml:
services:
floci:
image: floci/floci:latest
ports:
- "127.0.0.1:4566:4566"
volumes:
- ./data:/app/data
启动:
docker compose up -d
下面是 Bash / zsh 的环境变量写法。test 是本地模拟环境用的占位凭据,不需要放真实 AWS 密钥:
export AWS_ENDPOINT_URL=http://localhost:4566
export AWS_DEFAULT_REGION=us-east-1
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
aws --endpoint-url http://localhost:4566 s3 mb s3://my-bucket
aws --endpoint-url http://localhost:4566 s3 ls
这个示例把端口限制在本机回环地址,数据目录挂到当前目录的 data。接自己的应用时,再配置对应 SDK 的 endpoint;不同 SDK 的配置方式可以查项目的接入说明。
示例为了方便体验用了 latest,正式放进团队测试流水线时,最好固定镜像版本,避免更新后测试环境悄悄变化。
也有浏览器控制台
Floci 的控制台可以查看本地资源,入口是 http://localhost:4566/_floci/ui。它不是直接嵌在主进程里的静态页面:第一次访问时会拉取并启动一个控制台侧车容器,所以需要 Docker socket 权限。上面的最小 Compose 没有挂载 socket,先验证 CLI 调用即可;需要界面时再按控制台部署说明配置。
适合拿来做什么
如果项目依赖多种 AWS 服务,又想让开发环境和 CI 不必连接真实云账号,Floci 值得试一轮。已经使用 LocalStack 的项目,也可以参考它提供的迁移说明逐项验证。
它的边界同样明确:本地模拟器适合验证应用逻辑和已实现的 API 行为,不能据此确认真实 AWS 上的所有权限、网络和服务细节都没问题。选型时先对照自己用到的操作,而不是只数支持了多少种服务。
项目信息
- 主要语言:Java
- License:MIT
- GitHub Star:截至 2026-11-04 约 2.92 万
- GitHub:GitHub - floci-io/floci: Light, fluffy, and always free - The AWS Local Emulator alternative · GitHub
- 官方文档:Floci
- 服务与操作清单:Overview - Floci
