Présentation

AWS Emulator est un programme qui reproduit les points d’accès des services AWS sur la machine locale. Il permet d’exécuter du code qui utilise les SDK ou la CLI AWS sans créer de requêtes vers le cloud réel. Aucun compte AWS n’est requis et aucune facturation supplémentaire n’est appliquée tant que l’on ne déploie pas sur le vrai cloud.

Architecture et mode d’emploi

L’émulateur est écrit en Rust et organisé comme un workspace : chaque service AWS possède son propre crate sous services/. Le modèle de chaque service provient d’un fichier Smithy (smithy-model/*.json) qui génère le protocole de communication. Le binaire principal, aws-emulator-router, monte tous les services sur une même adresse HTTPS (127.0.0.1:9297) avec un certificat auto‑signé.

Pour l’utiliser en mode standard, on lance le binaire puis on redirige les variables d’environnement (AWS_ENDPOINT_URL, AWS_ACCESS_KEY_ID, etc.) vers l’émulateur. En mode embarqué, le client HTTP de l’émulateur est injecté directement dans le SDK, ce qui supprime le besoin d’URL ou de certificat. Le code suivant montre comment désactiver la télémétrie en mode embarqué :

use aws_emulator_embedded::{AwsEmulatorEmbedded, EmbeddedOptions, Telemetry};
fn main() {
    let emulator = AwsEmulatorEmbedded::new(
        EmbeddedOptions::default().telemetry(Telemetry::Off)
    );
    let _http_client = emulator.http_client();
}

Le build nécessite : Rust ≥ 1.70 avec Cargo, un compilateur C (GCC ou clang), au moins 100 GB d’espace disque et un processeur multi‑cœur. Un premier build complet compile chaque crate de service et peut prendre plusieurs dizaines de minutes ; les reconstructions partielles sont nettement plus rapides. La documentation indique que le CLI AWS version 2.35.0 ou supérieure est obligatoire pour interagir avec l’émulateur.

Analyse des contraintes et limites

Chaque version publie un « fidelity score » qui mesure la couverture des API par rapport à AWS réel. Les écarts sont répertoriés dans le répertoire issues/things-that-do-not-work/. Cette transparence aide les développeurs à vérifier la compatibilité de leurs projets, mais elle implique que certaines opérations, notamment celles liées à la sécurité ou à la facturation, restent non implémentées.

La télémétrie est activée par défaut et envoie des métriques anonymisées. Elle peut être désactivée via le drapeau --telemetry off, la variable d’environnement EMULATOR_TELEMETRY=off, ou le fichier config.toml. Le contrôle granulaire est essentiel pour les environnements CI où chaque processus doit être prévisible.

Enfin, l’émulateur n’est pas destiné à la production. Son modèle en mémoire ne reproduit pas les performances, la latence ou les contraintes de disponibilité du cloud AWS. Les utilisateurs doivent donc limiter son usage aux phases de développement et de test automatisé.