EnglishРусский Map

floci

title
floci
type
toolbox
summary
Бесплатный локальный эмулятор AWS на 46 сервисов, прямая замена LocalStack Community
tags
java, aws, cloud, testing, docker, watchlist
language
Java
license
MIT
created
2026-05-12
updated
2026-07-29
lang
ru
translation_of
floci
source_updated
2026-07-29
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Бесплатный локальный эмулятор AWS с открытым исходным кодом. Один docker compose up, без аккаунтов и без ограничений по возможностям. Написан на Quarkus/Vert.x с маршрутизацией через JAX-RS, отвечает на вызовы AWS SDK и CLI на порту 4566 - том же, что использует LocalStack - и позиционируется как прямая замена LocalStack Community, где с марта 2026 года ввели токены авторизации и заморозили обновления безопасности. Назван в честь cirrocumulus floccus - хлопьевидных перистых облаков, похожих на попкорн.

Что умеет

Floci поддерживает сетевой протокол AWS для 46 сервисов. Сервисы без состояния (SSM, SQS, SNS, IAM, STS, KMS, Secrets Manager, SES, Cognito, Kinesis, EventBridge, CloudWatch, Step Functions, CloudFormation, ACM, API Gateway, ELB v2, Auto Scaling, CodeDeploy, Backup, Route53, Transfer Family, Bedrock Runtime, ...) и с состоянием (S3, DynamoDB, DynamoDB Streams) работают прямо внутри процесса. Сервисы на базе контейнеров запускают реальные Docker-контейнеры под управлением control plane, эмулирующего интерфейсы AWS.

Преимущества перед LocalStack Community: отсутствие токена авторизации, регулярные обновления безопасности, запуск за ~24 мс против ~3.3 с, потребление памяти в простое ~13 МиБ против ~143 МиБ, размер образа ~90 МБ против ~1 ГБ, лицензия MIT, а также нативный бинарник (~40 МБ). Кроме того, поддерживаются вещи, которых нет в LocalStack Community: API Gateway v2 / HTTP API, Cognito, ElastiCache с авторизацией через IAM, RDS с авторизацией через IAM, MSK, Athena с реальным выполнением SQL, Glue Data Catalog + Schema Registry, Data Firehose, ECS/EKS/EC2/CodeBuild, а также закрыты пробелы частичной поддержки LocalStack для IAM, STS, Kinesis, KMS, S3 Object Lock, DynamoDB Streams.

Как устроен

Настоящая интеграция с Docker. Там, где эмуляция внутри процесса снизила бы точность - базы данных с состоянием, протоколы с большим числом соединений, среды выполнения, требующие нативного запуска, - Floci поднимает реальные контейнеры и обеспечивает совместимость по протоколу с настоящим движком:

  • Lambda -> образы public.ecr.aws/lambda/<runtime>, пул прогретых контейнеров, алиасы, Function URLs, сопоставление источников событий SQS/Kinesis/DDB-Streams. Функции из контейнерных образов пробрасывают ImageUri, перенаправляя URI репозиториев ECR на локальный endpoint.
  • ElastiCache -> valkey/valkey:8, полноценный протокол Redis/Valkey, IAM-авторизация на базе ACL, валидация SigV4.
  • RDS -> postgres:16-alpine, mysql:8.0, mariadb:11 - реальные движки, авторизация IAM через токен, совместимость с JDBC.
  • MSK -> redpandadata/redpanda:latest, реальный брокер с поддержкой протокола Kafka.
  • EC2 -> Linux-контейнеры, привязанные к AMI (например, public.ecr.aws/amazonlinux/amazonlinux:2023), проброс SSH-ключей, выполнение UserData, IMDS (v1 + v2, порт 9169) для выдачи IAM-учётных данных; плюс VPC, подсети, группы безопасности, таблицы маршрутизации, Elastic IP.
  • ECS -> полноценный жизненный цикл контейнеров на основе task definitions.
  • EKS -> rancher/k3s:latest, работающий сервер Kubernetes API для каждого кластера (также доступен режим заглушек).
  • CodeBuild -> выполняет фазы buildspec в контейнере, стримит логи в CloudWatch Logs, выгружает артефакты в S3 через docker cp (работает в режиме Docker-in-Docker).
  • OpenSearch -> opensearchproject/opensearch:2, полноценный REST API.
  • ECR -> общий контейнер registry:2, благодаря чему стандартные docker push / docker pull работают с репозиториями интерфейса AWS.
  • Athena -> API внутри процесса плюс sidecar на DuckDB (floci-duck), выполняющий реальный SQL по данным в S3 через представления на базе Glue; SerDe транслируется в read_parquet / read_json_auto / read_csv_auto.

Все используемые по умолчанию образы можно переопределить через переменные окружения FLOCI_SERVICES_*_IMAGE. Для сервисов на базе контейнеров требуется монтировать Docker-сокет (-v /var/run/docker.sock:/var/run/docker.sock -u root). Эти сервисы поддерживают реальную подпись SigV4 и авторизацию через IAM - тот же поток, что и в продакшене AWS.

Режимы хранения данных. Настраиваются глобально через FLOCI_STORAGE_MODE или индивидуально для каждого сервиса:

Режим Поведение Сохранность
memory (по умолчанию) полностью в RAM, сбрасывается при остановке отсутствует
persistent загружается при старте, сбрасывается на диск при корректном завершении средняя
hybrid скорость работы в памяти, асинхронный сброс каждые 5 с хорошая
wal write-ahead log, каждая модификация логируется до отправки ответа максимальная

memory подходит для CI; hybrid - для локальной разработки с сохранением состояния между перезапусками.

Изоляция между аккаунтами. Работает без дополнительной настройки: если AWS_ACCESS_KEY_ID состоит ровно из 12 цифр, Floci использует его как ID аккаунта и изолирует ресурсы по пространствам имён. Любой другой формат ключа откатывается на FLOCI_DEFAULT_ACCOUNT_ID (000000000000).

Миграция с LocalStack

Достаточно заменить образ - localstack/localstack -> floci/floci:latest (или floci/floci:latest-compat для скриптов инициализации, вызывающих aws/boto3, куда уже включены Python 3 + AWS CLI + boto3). Переменные окружения LocalStack транслируются автоматически: LOCALSTACK_HOST->FLOCI_HOSTNAME, PERSISTENCE=1->FLOCI_STORAGE_MODE=persistent, LAMBDA_DOCKER_NETWORK->FLOCI_SERVICES_LAMBDA_DOCKER_NETWORK, LAMBDA_REMOVE_CONTAINERS=1->FLOCI_SERVICES_LAMBDA_EPHEMERAL=true, DEBUG=1->QUARKUS_LOG_LEVEL=DEBUG. Скрипты инициализации из /etc/localstack/init/ выполняются без изменений; endpoints /_localstack/init и /_localstack/health по-прежнему доступны. LOCALSTACK_PARITY=false отключает трансляцию.

Использование

# docker-compose.yml
services:
  floci:
    image: floci/floci:latest
    ports:
      - "4566:4566"
    volumes:
      - ./data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock   # for container-backed services
export AWS_ENDPOINT_URL=http://localhost:4566
export AWS_DEFAULT_REGION=us-east-1
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test

aws s3 mb s3://my-bucket
aws sqs create-queue --queue-name my-queue
aws dynamodb list-tables

Любой AWS SDK достаточно направить на http://localhost:4566 через endpointOverride / endpoint_url / endpoint - других изменений не требуется. Учётные данные и регион могут быть любыми.

Ограничения

  • Некоторые сервисы работают как заглушки: Bedrock Runtime возвращает фиктивные ответы на Converse/InvokeModel (потоковая передача -> 501); Textract возвращает совместимые по API заглушки с поддельными блоками данных.
  • Сервисы на базе контейнеров требуют доступного Docker-сокета - они не будут работать в средах, где он недоступен, а скачивание образов увеличивает время первого запуска.
  • Проект ещё молодой (единственная организация floci-io, образ недавно переименован из hectorvent/floci в floci/floci). Находится на watchlist - нужно отслеживать зрелость, количество контрибьюторов и частоту релизов.
  • Точность эмуляции работает по принципу best-effort: поддерживаются не все крайние случаи каждого API AWS. Количество поддержанных операций по сервисам приведено в Services Overview.

Связанные страницы: ark-ecs (инструменты для работы с ECS), atomicapp (упаковка контейнерных приложений). В широкой нише "локальных эмуляторов облака" проект конкурирует в пространстве LocalStack.

Остаётся на watchlist, пока точность эмуляции не подтвердит себя на практике за пределами базового best-effort, а интерес после закрытия LocalStack не перерастёт в реальное внедрение.

Репозиторий: https://github.com/floci-io/floci · MIT · Java/Quarkus · документация: https://floci.io