Floci: Emulador AWS All-in-One para Desenvolvimento Local

5 min de leitura
floci aws docker cloud-native devtools infraestrutura

Floci: Emulador AWS All-in-One para Desenvolvimento Local

Existe uma ironia cruel no desenvolvimento cloud-native: para construir software que roda na nuvem, você precisa da nuvem. E isso tem um custo. Não apenas financeiro — embora uma conta de AWS que cresce sem controle seja dor suficiente —, mas de latência, de complexidade, de credenciais que expiram, de ambientes que divergem entre desenvolvedores.

A solução tradicional é ter uma conta de desenvolvimento na AWS. Cada membro do time com suas próprias credenciais, seus próprios buckets S3, suas próprias filas SQS. Funciona, até o dia em que alguém apaga o banco de staging sem querer, ou a conta de teste gera uma fatura de três dígitos porque um loop infinito encheu o CloudWatch de logs.

Há um caminho melhor.


O Que é o Floci

O Floci é um emulador de serviços AWS que roda inteiramente dentro de um único container Docker. Ele implementa as APIs do S3, SQS, RDS, ElastiCache, CloudWatch, X-Ray e DynamoDB — tudo acessível através de uma única porta, chamada edge port, na porta 4566.

A ideia não é nova. O Floci é um fork do LocalStack, adaptado para ser mais leve e focado nos serviços que realmente importam para o dia a dia. A diferença fundamental é que você não precisa de uma conta AWS, de credenciais reais, ou de conexão com a internet para desenvolver. Tudo roda localmente, no seu laptop, com latência zero e custo zero.

Para uma aplicação que usa S3 para armazenar arquivos, SQS para processamento assíncrono, RDS como banco de dados e ElastiCache como cache, o Floci substitui todos esses serviços por uma única linha no docker-compose.


A Arquitetura da Edge Port

O truque mais elegante do Floci é a edge port. Em vez de expor uma porta diferente para cada serviço — 4572 para S3, 4576 para SQS, 4571 para RDS —, o Floci usa uma única porta, 4566, como ponto de entrada universal.

Quando seu código faz uma requisição para http://localhost:4566, o Floci inspeciona o cabeçalho da requisição e roteia internamente para o serviço correto. Se a requisição é uma operação S3, vai para o emulador S3. Se é uma chamada SQS, vai para o emulador SQS. Se é DynamoDB, vai para o emulador DynamoDB.

Isso simplifica drasticamente a configuração. Em vez de gerenciar seis portas diferentes e seis variáveis de ambiente, você aponta tudo para um único endpoint. No código, isso se traduz em uma única variável: AWS_ENDPOINT_URL=http://localhost:4566. O SDK da AWS (boto3, aws-sdk, CLI) já sabe como lidar com endpoints customizados.

Para o desenvolvedor, a experiência é indistinguível de usar a AWS real. O mesmo código que funciona localmente funciona em produção, sem adaptações.


Floci na Prática: Um Projeto Real

No projeto SafeHire AI Platform, usamos o Floci como a espinha dorsal do ambiente de desenvolvimento local. A aplicação depende de PostgreSQL para dados relacionais, S3 para armazenamento de currículos, SQS para processamento assíncrono de análise de candidatos, ElastiCache para cache de sessões e DynamoDB para locking de state de infraestrutura.

Tudo isso, no docker-compose de desenvolvimento, é um único serviço:

floci:
  image: floci/floci:latest
  ports:
    - "4566:4566"
    - "5433:5432"
    - "6380:6379"
  environment:
    SERVICES: sqs,s3,rds,elasticache,cloudwatch,logs,xray,dynamodb

Três portas expostas. A edge port 4566 para todos os serviços AWS, a 5433 para o PostgreSQL emulado e a 6380 para o Valkey (compatível com Redis). O resto — SQS, S3, CloudWatch, X-Ray, DynamoDB — tudo passa pela 4566.

Os serviços da aplicação apontam para o Floci através de variáveis de ambiente. O código Python usa boto3 com endpoint_url, o TypeScript usa aws-sdk com configuração similar. Nenhuma lógica condicional de "se é local, faz X; se é produção, faz Y". O código é o mesmo.


Floci + OpenTofu: Testando Infraestrutura Localmente

O uso mais poderoso do Floci vai além do desenvolvimento de aplicação. Ele permite testar infraestrutura como código inteira sem gastar um centavo com AWS.

O OpenTofu (fork open-source do Terraform) armazena o estado da infraestrutura em um bucket S3 e usa uma tabela DynamoDB para prevenir corrupção quando múltiplas execuções rodam simultaneamente. Normalmente, isso exigiria criar esses recursos na AWS real antes mesmo de começar.

Com o Floci, criamos o bucket e a tabela localmente, apontamos o backend do OpenTofu para o emulador, e rodamos tofu plan e tofu apply contra uma infraestrutura AWS completa — VPC, subnets, security groups, ECS Fargate, RDS, ElastiCache, SQS, S3, CloudWatch — tudo emulado, tudo local, tudo gratuito.

O plano de execução mostra exatamente o que seria criado na AWS. Se o plano está correto, a confiança para rodar em produção é muito maior. Se há um erro de configuração, você descobre antes de provisionar recursos reais.

No próximo artigo desta série, mostro como usamos OpenTofu para versionar toda a infraestrutura AWS com a mesma disciplina de Clean Code que aplicamos ao código.


O Que Fica de Fora

O Floci é um emulador, não uma réplica perfeita. Isso importa, e é honesto reconhecer as limitações.

Performance: O emulador não tem a performance da AWS real. Uma operação S3 que leva 50ms na AWS pode levar 200ms no Floci. Para desenvolvimento, isso é irrelevante. Para benchmark, não.

Serviços não emulados: O Floci cobre os serviços mais comuns, mas não tudo. Lambda, API Gateway, Step Functions, Cognito — serviços mais complexos ou com lógica de negócio embutida não são emulados, ou são emulados de forma limitada.

IAM real: O Floci emula a API do IAM, mas não aplica políticas de permissão da mesma forma que a AWS real. Se sua aplicação depende de políticas granulares de IAM para funcionar, você precisa testar na AWS eventualmente.

Limites de serviço: A AWS tem limites de throughput, tamanho de mensagem, número de conexões. O Floci não replica esses limites. Um código que funciona no Floci pode falhar na AWS se estiver próximo dos limites do serviço.

A regra prática é simples: Floci para desenvolvimento e teste de integração. AWS real para staging e produção. O Floci não substitui a AWS; ele complementa, criando um ciclo de feedback rápido que a nuvem real simplesmente não consegue oferecer.


Quando Usar, Quando Não Usar

Use Floci quando:
- Desenvolvimento local de aplicações que usam serviços AWS
- Testes de integração que precisam de S3, SQS ou DynamoDB
- CI/CD pipelines que precisam de um ambiente AWS isolado e efêmero
- Prototipagem rápida sem configurar credenciais ou contas
- Testar infraestrutura como código antes de aplicar em produção

Não use Floci quando:
- Benchmark de performance
- Testar políticas de IAM granulares
- Serviços não suportados (Lambda, API Gateway, Cognito)
- Validação de limites e quotas da AWS
- Staging ou produção


Conclusão

O Floci resolve um problema que todo desenvolvedor cloud-native enfrenta: como iterar rápido sem depender de infraestrutura remota. A resposta é trazer a infraestrutura para perto — para dentro de um container Docker, rodando no seu laptop, com latência zero e custo zero.

Não é uma substituição da AWS. É um complemento. O Floci é o ambiente onde você experimenta, quebra, conserta e valida. A AWS é o ambiente onde você deploya com confiança, sabendo que o código já foi testado contra as mesmas APIs que vai encontrar em produção.

Essa separação — dev local com emulador, produção com infraestrutura real — é o que permite ciclos de desenvolvimento rápidos sem sacrificar a confiabilidade do deploy. E quando combinado com infraestrutura como código, como veremos no próximo artigo, o ciclo se fecha completamente: do código ao deploy, tudo versionado, tudo testável, tudo reproduzível.


Este artigo faz parte de uma série sobre desenvolvimento cloud-native. O artigo anterior, Além do Clean Code: Projetando Sistemas para a Mente Sintética, discute como adaptar práticas de código limpo para a era dos agentes de IA.

Compartilhar este post

Reações

Comentários

Nenhum comentário ainda. Seja o primeiro!

Deixe um comentário

Seu email não será publicado.

Outros posts

Entre em Contato

Vamos conversar sobre sua próxima solução? Entre em contato comigo através dos canais abaixo.

Disponível para projetos freelance e oportunidades de desenvolvimento