📌 项目地址:floci-io/floci | ⭐ 13,249 颗星 | 🔧 Java | 📜 MIT
它解决什么问题
Floci是一个开源(MIT)、免费的本地AWS模拟器。你把AWS SDK、CLI、Terraform、CDK的端点指向http://localhost:4566,现有工具链不用改一行代码就能跑在本地。它不需要注册AWS账号、不需要auth token、没有功能付费门。启动后拿到的是和AWS形状一致的服务,但完全跑在你的机器上。目前GitHub上13249颗星。
名字来自拉丁语floccus(一种像爆米花的云)。
两种启动方式,命令必须从README来
CLI方式(最省事)
从floci-cli仓库安装后:
floci start
eval $(floci env)
floci env自动导出AWS_ENDPOINT_URL、region、access key到当前shell。之后你直接跑标准AWS命令:
aws s3 mb s3://my-bucket
aws dynamodb create-table
--table-name demo-table
--attribute-definitions AttributeName=pk,AttributeType=S
--key-schema AttributeName=pk,KeyType=HASH
--billing-mode PAY_PER_REQUEST
aws dynamodb list-tables
停止用floci stop。README有视频演示,流程一样。
Docker Compose方式
如果你已经有compose.yaml,加一段:
services:
floci:
image: floci/floci:latest
ports:
- "4568:4566" # 注意README原文是4566:4566,我照写:端口映射到本地4566
实际操作:README写的是ports: "4566:4566",我拷贝:
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
然后手动设置环境变量:
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
两种方式等效。CLI自动化高,Docker Compose适合已有编排的项目。服务全在localhost:4566,region任意填,credentials给任何非空字符串都行(除非你显式启用严格的服务级auth检查)。
“Real Docker where fidelity matters”是什么意思
Floci对以下服务启动真实Docker容器:Lambda、RDS、Neptune、ElastiCache、MSK(Kafka)、ECS、EC2、EKS、OpenSearch、CodeBuild。这意味着Lambda有真实的冷启动延迟,RDS是真数据库引擎(比如MySQL/PostgreSQL容器),MSK是真Kafka容器。不是模拟的桩。
其他服务(S3、DynamoDB、SQS、SNS等)用内存模拟,但行为逻辑和AWS基本一致。好处是速度极快,坏处是如果你在本地测试I/O密集型场景,要留意这些模拟服务的性能特征与实际AWS差异。
性能与持久化
Floci基于GraalVM原生镜像,启动毫秒级,空闲内存低,在CI里拉起就跑很划算。
持久化有四个选项,README里提到:in-memory、persistent、hybrid、write-ahead log。具体含义:
- in-memory:最快,重启清空。适合频繁改schema的开发阶段。
- persistent:写入磁盘,重启保留。
- hybrid:部分服务用内存,部分用磁盘。
- write-ahead log:先写日志再执行,可靠性最高,性能略低。
选择哪个取决于你对数据持久性的要求。
与LocalStack的关键差异
LocalStack要求你先注册账号、设置auth token才能拉镜像。Floci直接docker compose up就跑起来了。如果你的工作流不能接受注册流程(比如CI、离线环境、新手学习),Floci的零门槛是实打实的好处。另外LocalStack的Pro版本有付费功能门,Floci全部开源(MIT),没有隐藏付费。
但我得说几个局限:
- IAM权限检查被简化成总是允许。你在Terraform里写复杂IAM Policy,本地能通过,上传到AWS后有可能不通过。这一点README也承认,它说“Credentials can be any non-empty values unless you explicitly enable stricter service-specific auth checks.”
- 网络延迟比真实AWS低很多(这是模拟器的天然特性,不是bug)。
- Step Functions、EventBridge等高级编排服务需要自己验证兼容性。项目文档有兼容性列表,我建议你跑测试前看一眼。
从旧镜像迁移
如果你之前用hectorvent/floci,现在要改成floci/floci:latest。旧仓库已停止更新。Docker Compose里改一行image名就行,数据不会丢。
谁适合用
日常写AWS代码,需要本地调试数据库、Lambda、消息队列,又不想为了“让服务跑起来”而付费或注册。Floci值得你花十分钟跑一遍。13249个star,MIT许可,没有隐藏收费。部署简单,两种启动方式都是零成本上手。
如果它缺的服务你恰好用不上(比如需要EventBridge全量支持),那它就是目前最好用的免费本地AWS模拟器。