Aller au contenu
Cloud medium

Floci : émuler AWS en local pour développer et tester

9 min de lecture

Logo Floci

Floci est un émulateur AWS local open-source (licence MIT) qui expose des services AWS sur votre machine, sans compte cloud, sans jeton d'authentification et sans payer. Vous pointez votre AWS CLI, vos SDK, Terraform ou OpenTofu sur http://localhost:4566 et vos outils fonctionnent comme face au vrai AWS. Ce guide montre comment démarrer Floci avec Docker, brancher vos outils existants, et valider le tout sur S3, DynamoDB et un déploiement Terraform. Public visé : développeurs et DevOps qui veulent un environnement AWS reproductible pour le développement, les tests et la CI.

  • Démarrer Floci avec Docker (image épinglée, jamais latest)
  • Configurer l'environnement AWS local (endpoint, région, identifiants)
  • Utiliser AWS CLI et Terraform contre l'émulateur
  • Cerner la portée réelle et les limites de l'émulation

Développer directement contre le vrai AWS coûte de l'argent, exige un compte et des identifiants, et rend les tests lents et fragiles (latence réseau, état partagé, nettoyage à faire). Un émulateur local donne des services « AWS-compatibles » sur votre poste : création instantanée, isolation totale, zéro facture, et une CI qui ne dépend ni d'un compte ni de la disponibilité du cloud.

Floci occupe ce créneau au moment où LocalStack, l'émulateur historique, ferme l'accès libre de son édition Community. À partir de mars 2026, l'image localstack/localstack:latest exigera un jeton d'authentification lié à un compte, les correctifs de sécurité ne seront plus appliqués qu'à la version authentifiée, et le dépôt open-source passera en mode inactif. Floci se positionne comme l'alternative MIT, sans compte et sans jeton.

  • Docker installé et démarré (docker --version).
  • L'AWS CLI v2 (aws --version) pour les exemples en ligne de commande.
  • Facultatif : Terraform ou OpenTofu pour la partie infrastructure as code.

Floci se lance comme un simple conteneur qui écoute sur le port 4566, le même que LocalStack. N'utilisez jamais le tag latest : épinglez une version précise pour des environnements reproductibles.

Fenêtre de terminal
docker run -d --name floci -p 4566:4566 floci/floci:1.5.27

Vérifiez que le conteneur est prêt. Floci démarre en moins d'une seconde (image native Quarkus) :

Fenêtre de terminal
docker logs floci | tail -1

La sortie doit afficher une ligne du type floci 1.5.27 native ... started ... Listening on: http://0.0.0.0:4566.

Floci accepte n'importe quels identifiants non vides et n'importe quelle région. Exportez l'environnement AWS une fois pour toutes dans votre shell :

Fenêtre de terminal
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

La variable AWS_ENDPOINT_URL est la clé : elle redirige l'AWS CLI v2 et la plupart des SDK vers l'émulateur, sans toucher à votre code applicatif.

Créez un bucket, déposez un objet, listez le résultat :

Fenêtre de terminal
aws s3 mb s3://lab-bucket
echo "contenu de test" > objet.txt
aws s3 cp objet.txt s3://lab-bucket/objet.txt
aws s3 ls s3://lab-bucket/

La sortie doit lister objet.txt avec sa taille. Vous venez d'utiliser l'API S3 sans compte AWS ni le moindre octet envoyé dans le cloud.

Fenêtre de terminal
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

La table passe à l'état ACTIVE et apparaît dans list-tables. L'état est conservé tant que le conteneur tourne.

L'intérêt principal d'un émulateur, c'est de tester votre infrastructure as code sans rien provisionner de réel. On configure le fournisseur AWS de Terraform pour qu'il vise Floci, via le bloc endpoints et quelques options qui désactivent les vérifications d'identité inutiles en local.

terraform {
required_providers {
aws = { source = "hashicorp/aws", version = "~> 5.0" }
}
}
provider "aws" {
region = "us-east-1"
access_key = "test"
secret_key = "test"
skip_credentials_validation = true
skip_requesting_account_id = true
skip_metadata_api_check = true
s3_use_path_style = true
endpoints {
s3 = "http://localhost:4566"
dynamodb = "http://localhost:4566"
}
}
resource "aws_s3_bucket" "lab" {
bucket = "terraform-drop-in"
}
resource "aws_dynamodb_table" "lab" {
name = "tf-table"
billing_mode = "PAY_PER_REQUEST"
hash_key = "id"
attribute {
name = "id"
type = "S"
}
}

Déployez puis vérifiez :

Fenêtre de terminal
terraform init
terraform apply -auto-approve
aws s3 ls # terraform-drop-in apparaît
aws dynamodb list-tables # tf-table apparaît

Terraform affiche Apply complete! Resources: 2 added, et l'AWS CLI confirme que les ressources existent côté Floci. Votre module Terraform est validé sans compte AWS, gratuitement, en quelques secondes.

Floci annonce une large couverture de services AWS. Certains, comme Lambda, RDS, ECS, EC2 ou EKS, s'appuient sur une exécution Docker réelle plutôt que sur de simples bouchons (mocks), tandis que S3 et DynamoDB gardent un état persistant. Cette approche rapproche le comportement de l'émulateur du vrai AWS pour les services conteneurisés.

Deux points de vigilance, propres à tout émulateur et accentués par la jeunesse du projet :

  • La profondeur d'une API émulée n'égale pas toujours celle d'AWS : une fonctionnalité avancée peut manquer ou différer.
  • La maintenance repose sur un projet récent : épinglez vos versions et suivez les évolutions avant d'en faire une brique critique de votre CI.
SymptômeCause probableSolution
Could not connect to the endpoint URLConteneur pas prêt ou mauvais portVérifier docker ps et que le port 4566 est mappé
InvalidClientTokenId ou erreurs d'identitéVariables AWS non exportéesRéexporter AWS_ENDPOINT_URL et des identifiants non vides
Terraform ignore l'endpointBloc endpoints absent ou service non listéAjouter le service dans endpoints { ... } du provider
Un service répond not implementedAPI non couverte par cette versionVérifier la version de Floci, épingler une version compatible
  • Floci émule AWS en local (MIT), sur http://localhost:4566, sans compte ni jeton
  • Il arrive au moment où LocalStack Community bascule en accès authentifié (mars 2026)
  • AWS_ENDPOINT_URL suffit à rediriger AWS CLI et SDK vers l'émulateur
  • Terraform vise Floci via le bloc endpoints : IaC testée gratuitement
  • Épinglez toujours une version (idéalement par empreinte @sha256), jamais latest
  • L'émulation accélère dev, tests et CI, mais ne remplace pas une validation réelle avant production

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn