← Volver
Cloud 6 min de lectura

Floci: emular AWS en local sin cuenta, sin token y sin cuota

En marzo de 2026 la imagen community de LocalStack pasó a pedir cuenta y auth token. Floci apareció como reemplazo directo: mismo puerto, MIT, sin registro. Qué hace, qué no, y dónde buscarlo.

Datos verificados al 10 de agosto de 2026. Precios, límites y nombres de flags de proveedores cambian.

En marzo de 2026 la imagen localstack/localstack:latest pasó a requerir una cuenta y un LOCALSTACK_AUTH_TOKEN. El bypass temporal —LOCALSTACK_ACKNOWLEDGE_ACCOUNT_REQUIREMENT=1— dejó de funcionar el 6 de abril.

Conviene decir con precisión qué cambió, porque circula exagerado: LocalStack sigue teniendo un plan gratuito, incluido uno para uso no comercial con la funcionalidad equivalente a la imagen community anterior, y los proyectos open source pueden pedir una licencia libre. Lo que desapareció no es el precio cero: es poder correr docker run localstack/localstack sin registrarte.

Para un desarrollador suelto es una molestia. Para un pipeline de CI en una organización, es un secreto más que rotar, un proveedor más en el modelo de amenazas y un trámite legal más. Eso alcanzó para que aparecieran alternativas, y la más directa es Floci.

Qué es

Floci es una familia de emuladores de nube local, MIT, sin registro y sin telemetría. Un contenedor por nube, un puerto por contenedor.

NubeImagenPuertoServicios
AWSfloci/floci456669
Azurefloci/floci-az457724
GCPfloci/floci-gcp458824
OCIfloci/floci-oci45997

El detalle que decide la migración está en la primera fila: el puerto 4566 es el mismo que usa LocalStack. Si tu código ya apunta ahí con un endpointOverride, no hay nada que cambiar del lado de la aplicación. Se cambia la imagen y listo.

Un emulador que elige el puerto de su predecesor está diciendo algo sobre su estrategia: no compite por adopción nueva, compite por reemplazo sin fricción.

Los números que publica el proyecto

Estos son los datos del README de Floci comparándose con la imagen de LocalStack. No los medí yo — los reproduzco como lo que son, benchmarks propios del proyecto, que es exactamente el tipo de número que conviene verificar en tu máquina antes de citarlo en una decisión:

  • Arranque: ~24 ms contra ~3,3 s
  • Memoria en reposo: ~13 MiB contra ~143 MiB
  • Tamaño de imagen: ~90 MB contra ~1,0 GB

La diferencia de arranque no es marketing: viene de una decisión de arquitectura. Floci está construido en Java con compilación a imagen nativa, así que no paga el arranque de una JVM ni el de un intérprete. Para un test de integración que levanta y baja el contenedor por cada suite, tres segundos por corrida se convierten en minutos por día.

Para los servicios con estado —bases de datos, colas persistentes— Floci levanta contenedores reales por debajo en vez de simularlos. Por eso el docker run monta el socket de Docker.

Probarlo

docker run --rm -p 4566:4566 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  floci/floci:latest

Y desde otra terminal, con el CLI de AWS de siempre:

aws --endpoint-url http://localhost:4566 s3 mb s3://prueba
aws --endpoint-url http://localhost:4566 s3 cp ./archivo.txt s3://prueba/
aws --endpoint-url http://localhost:4566 s3 ls s3://prueba/

Las credenciales no importan: cualquier par de valores sirve. Ese es justamente el punto de un emulador local, y también la primera cosa que lo diferencia de AWS de verdad.

Si preferís no manejar contenedores a mano, el proyecto tiene instalador:

curl -fsSL https://floci.io/install.sh | sh    # macOS y Linux
irm https://floci.io/install.ps1 | iex          # Windows

Como con cualquier script que se baja y se ejecuta en un solo comando: leelo antes si va a correr en una máquina que no es solo tuya.

En CI

La parte que decide si esto entra a un equipo o se queda en la máquina de alguien es el módulo de Testcontainers. Requiere Java 17+ y Docker:

<dependency>
    <groupId>io.floci</groupId>
    <artifactId>testcontainers-floci</artifactId>
    <version>${testcontainers-floci.version}</version>
    <scope>test</scope>
</dependency>
@Testcontainers
class S3IntegrationTest {

    @Container
    static FlociContainer floci = new FlociContainer();

    @Test
    void shouldCreateBucket() {
        S3Client s3 = S3Client.builder()
                .endpointOverride(URI.create(floci.getEndpoint()))
                .region(Region.of(floci.getRegion()))
                .credentialsProvider(StaticCredentialsProvider.create(
                        AwsBasicCredentials.create(floci.getAccessKey(),
                                                   floci.getSecretKey())))
                .forcePathStyle(true)
                .build();
        // …
    }
}

forcePathStyle(true) no es opcional y es el error que más tiempo cuesta: sin eso el SDK arma URLs con el bucket como subdominio —prueba.localhost— y no resuelve.

Dónde buscarlo

Todo vive bajo la organización floci-io:

La imagen está en Docker Hub como floci/floci.

Cuándo no

Acá es donde conviene ser honesto, porque un emulador que funciona bien en la demo es el escenario clásico donde se toman decisiones malas.

Un emulador no es AWS. Reimplementa el comportamiento observable de una API, no el sistema que está atrás. Las diferencias aparecen justo donde más caro es descubrirlas: semántica de IAM, consistencia eventual, límites de throughput, comportamiento bajo carga, y todo lo que dependa de cómo un servicio real se degrada. Si tu test verifica que una política de IAM deniega algo, el resultado en local no es evidencia de nada.

Es un proyecto joven. Nació de un cambio de licencia de marzo de 2026. No tiene los años de casos raros que sí acumuló lo que reemplaza, y la cantidad de servicios que declara —69— dice cuántos responden, no con cuánta fidelidad. Antes de apoyar una suite entera acá, probá primero los servicios que de verdad usás.

Los números son suyos. Arranque, memoria y tamaño salen de su propio README. Son verosímiles y consistentes con compilar a imagen nativa, pero no son una medición independiente.

Con eso dicho: para desarrollo local y para tests de integración en CI, un contenedor MIT que arranca en milisegundos y no pide credenciales resuelve un problema real que apareció este año. Como reemplazo directo, con el mismo puerto, el costo de probarlo es un docker run.

Lo que no hace es ahorrarte un ambiente real. Eso sigue estando antes de producción, y ningún emulador lo reemplaza.

Para seguir

Lecturas

  • floci-io/floci — el emulador de AWS — el repositorio principal: la lista completa de los 69 servicios, la tabla de comparación y las instrucciones de Docker.
  • floci.io — sitio del proyecto — la vista de los cuatro emuladores con su puerto y su cantidad de servicios, más los instaladores para macOS, Linux y Windows.
  • floci-io/floci-cli — la CLI unificada para levantar y administrar los emuladores de las cuatro nubes desde un solo comando.
  • floci-io/floci-ui — consola web estilo AWS Console para inspeccionar los recursos que creaste en local. Útil cuando el CLI no alcanza para entender qué quedó adentro.
  • floci-io/testcontainers-floci — el módulo de Testcontainers para JVM. Es la vía por la que esto entra a un pipeline de CI sin scripts de docker a mano.
  • Important Updates to Pricing & Packaging for LocalStack — el anuncio original del cambio, en la fuente. Conviene leerlo antes que cualquier resumen de terceros — incluido este.
Siguiente · IA aplicada · 18 min Evals: si no puede bloquear un deploy, no es una eval Leer siguiente →