用途:Floci 在本地模拟 AWS 服务,供开发与 CI 使用,无需真实云账号。核心思路是把既有 AWS SDK、CLI、Terraform 等客户端的 endpoint 指向模拟器,其他工作流保持不变,凭据使用 dummy 值。
主要能力与组成:官方镜像 floci/floci 提供运行时;默认端点 http://localhost:4566 是统一的 AWS 兼容端点;可选卷 /app/data 用于本地持久化,挂载后数据可跨重启保留。生态中还有 Azure/GCP/OCI 的兄弟模拟器,本技能聚焦 AWS 模拟器。
常见服务:S3(上传/下载、presign,视支持而定)、SQS/SNS(队列与发布订阅)、DynamoDB(按需表)、Secrets Manager/SSM(本地配置)、Lambda/ECR(函数与镜像,需 Docker)、EventBridge/Step Functions(本地编排)。文档提示需按服务核对 API 覆盖范围,并非所有 AWS API 都存在或完整。
使用方式:用 Docker Compose 启动,示例配置为 image: floci/floci:latest,端口 4566:4566,卷 ./data:/app/data,随后 docker compose up -d。latest 为原生镜像,启动较快;需要平台兼容性时用 latest-jvm。环境变量可设 AWS_ENDPOINT_URL=http://localhost:4566、AWS_DEFAULT_REGION=us-east-1、AWS_ACCESS_KEY_ID=test、AWS_SECRET_ACCESS_KEY=test。CLI 在设置 AWS_ENDPOINT_URL 后可直接使用,否则传 --endpoint-url。SDK 方面:Node(AWS SDK v3)在 S3Client 中传 endpoint、credentials 并设 forcePathStyle: true;Python(boto3)在 client 中传 endpoint_url、region_name 与 dummy 凭据;Go 在 AWS SDK v2 的 config 中把 base-endpoint/resolver 指向该端点。建议通过环境变量或应用配置集中管理端点,不要硬编码在某个客户端。
容器间调用:在 Docker Compose 中若应用在另一容器,使用服务名 hostname(如 http://floci:4566),必要时按 Floci 文档设置 FLOCI_HOSTNAME 以生成容器间可解析的 URL。
CI 与实践:把 Floci 作为 job 服务启动,跑 S3 建桶与写入等 smoke test 后再执行测试套件。凭据用 test/test,避免误把生产流量指向 Floci,把 endpoint 放在 APP_ENV=local|test 之类的环境开关后。断言应针对应用行为,而非模拟器内部细节。Lambda、RDS、ElastiCache 等依赖容器的服务需要主机或 CI 上有 Docker。
限制与反模式:不要混用 Floci 端点与真实生产凭据;不要未核对具体操作就假定与 AWS 完全一致;不要在共享库里硬编码 localhost:4566 而不留覆盖;S3 在 JS SDK 中忘记 forcePathStyle 不应归咎于模拟器;谨慎在 Floci 卷中持久化敏感数据。
完成标准:Floci 启动并在配置端点响应;CLI 或 SDK 至少通过一次 S3/SQS/DynamoDB smoke test;本地/CI 应用通过配置或环境变量指向端点;dummy 凭据与生产环境隔离;相关功能用到的服务被模拟器覆盖,或另有文档化的 mock 替代。
其他信息如具体价格、平台支持矩阵、完整 API 清单暂未提供,需查阅官方文档确认。