📌 项目地址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模拟器。

这篇文章对你有帮助吗?

发表回复