Sandbox et environnement de test
1) Pourquoi des contours dédiés sont nécessaires
Les bacs à sable et les environnements de test permettent :- vérifier rapidement les hypothèses et l'intégration sans risque de production ;
- Accélérer le cycle fidbek (PR → prévisualisation en minutes) ;
- reproduire les erreurs et les incidents sur une copie sécurisée ;
- effectuer des tests contractuels, d'intégration, de charge et de chaos ;
- former les équipes et encourager les partenaires sur le terrain de jeu.
Principes clés : isolement, parité des configurations, déterminisme des tests, sécurité des données, observabilité par défaut.
2) La hiérarchie des environnements et leur destination
Local (Dev) - développement local : Docker Composer/Testcontainers, simulateurs de fournisseurs légers.
Sandbox est un stand pour les intégrations externes (PSP, KYC, agrégateurs de jeux) avec des fausses données et des protocoles réels.
QA/Test - intégrations et e2e-tests, fiches de données stables, régressions.
Stage/Pre-Prod est une boucle aussi proche que possible de la production (configurations/limites/topologie).
Ephemeral Preview - environnement « sur PR » (vit pendant des heures/jours), ressources autonomes et URL, démolition automatique après merge/close.
Règle de parité : « paramètres, politiques et dépendances d'infrastructure dans Test/Stage ≈ Prod », les différences ne sont que dans les secrets et les limites.
3) Types de bac à sable
1. Sandbox des fournisseurs : PSP/KYC/jeux externes fournissent test endpoints ; nous ajoutons une couche de simulateurs pour simuler des cas rares et erronés (timeouts, 5xx, signatures instables).
2. Sandbox fonctionnels : instances autonomes des services de domaine (paiements, bonus, actions) + fictions.
3. Didacticiels/démo sandbox : API « vitrine » pour les partenaires avec DevPortal, clés, quotas et rate limit.
4) Contrats, simulateurs et moki
Contract-testing (Pacte/Buf) : le consommateur/fournisseur est d'accord avec les schémas ; les modifications incompatibles sont bloquées sur CI.
Simulateurs de fournisseurs : reproduit les cas edge (collbecks doubles, dérive de l'horloge, signature HMAC avec timestamp périmé).
Fictions d'événements (Kafka/NATS) : bibliothèque de cas 'payment. authorized`, `kyc. verified`, `game. round. settled`.
Fausse injection : latence gérée, drop-rate, out-of-order du message.
X-Timestamp: 1730812800
X-Signature: sha256=hex(hmac_sha256(secret, body + timestamp))
5) Données de test, RGPD/PCI et anonymisation
N'utilisez jamais de PII/PAN réels en dehors de la production.
Anonymisation : génération de synthétiques + tokenisation des champs sensibles ; listes blanches uniquement pour les comptes de démonstration.
Data Factories : usines d'utilisateurs/transactions/sessions avec ID et statuts prévisibles.
Deterministic seeds : les mêmes fictions entre le test et le mercredi.
Politique de rétention : auto-nettoyage prévisualiser les environnements et les OBD de test.
6) Secrets et accès
Secrets séparés le mercredi ; crédits temporels et rôles limités.
KMS/HSM et rotations ; les secrets de Git sont exclus.
RBAC/ABAC pour QA/Stage ; audit d'accès, break-glass uniquement par la négociation.
7) Observabilité dans les environnements non prod
Logs - structurés, sans PII, avec masquage ;
Métriques de latitude p50/p95/p99, error-rate, throughput, DLQ, retraits ;
Tracing (OTel) : "trace _ id'de bout en bout depuis la requête d'entrée jusqu'au simulateur ;
Dashboards as Code - Les dashboards et les alertes sont versionnés à côté du service.
8) Environnement éphémère (per-PR)
Comportement par défaut :- PR → CI recueille l'image, génère les migrations, soulève le namespace 'pr-
' dans Kubernetes ; - l'URL de prévisualisation et les jetons d'utilisateur de test sont délivrés ;
- Tracing/métriques inclus ; lorsque le PR est fermé, l'environnement est supprimé.
yaml apiVersion: v1 kind: Namespace metadata:
name: pr-4821 labels:
env: preview owner: team-payments
9) Développement local : Composer/Testcontainers
Minimum 'docker-compose. yml'pour le lancement local :yaml version: "3. 9"
services:
api:
build:.
environment:
- DB_URL=postgres://postgres:postgres@db:5432/app? sslmode=disable
- KAFKA_BROKER=kafka:9092 ports: ["8080:8080"]
depends_on: [db, kafka]
db:
image: postgres:16 environment: [POSTGRES_PASSWORD=postgres]
ports: ["5432:5432"]
kafka:
image: bitnami/kafka:latest environment:
- KAFKA_ENABLE_KRAFT=yes
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 ports: ["9092:9092"]
Pour les dépendances automatiques dans les tests - Testcontainers avec des fictions.
10) Essais de charge et de stabilité
Profils de charge : « tournois », « vagues de paiements », « pushi de masse ».
KPI : RPS, p95/p99, limites de ressources (CPU/mémoire), TTFB, Time-to-Wallet.
Injections Chaos : coupures des fournisseurs, augmentation de la latence, « flaky » du réseau.
Les politiques Circuit breaker/backoff sont vérifiées sur Stage ; les échecs partent à la DLQ et se replient.
11) Politiques de repli et de repli
Passerelle Replay pour les événements de DLQ (modes manuel/automatique, filtres par clé).
Bases de migration : Clair up/down et dry-run dans Preview/Stage ; protection contre les changements destructeurs.
12) Intégration avec DevPortal
Annuaire des bacs à sable et des fournisseurs, exigences des champs, exemples de demandes.
Le bouton « Open Preview » de chaque PR/branche ; widget métrique SLO/SLA.
Génération de SDK et de collections Postman/Insomnia à partir de contrats.
13) Sécurité du périmètre des bac à sable
WAF + IP-allowlist pour les bacs à sable externes ;
quotas et limites de taux par clé ;
domaines/sous-domaines distincts ; La suppression automatique des clés inactives ;
scan de vulnérabilités d'images et de dépendances sur chaque projet de loi.
14) Processus : Qui et comment utilise
Développeurs - localement et avant, fidbek rapide.
QA est un test/stage stable avec des données gérables et des simulateurs.
Partenaires - Sandbox externe avec DevPortal, quotas et surveillance.
SRE/Plate-forme - profils de charge, chaos, vérification SLO.
15) Chèque de lancement du bac à sable
- Les contrats du Registre, les simulateurs couvrent le succès/les erreurs/les délais/les répétitions.
- Données de test synthétiques, déterministes, sans PII/PAN.
- Secrets de KMS, rôles limités, audit inclus.
- Métriques/remorques/logs disponibles ; alertes sur error-budget et DLQ.
- Ephemeral preview monte sur PR et auto-démolition.
- Les profils de charge et les scénarios de chaos sont décrits par le code.
- Les politiques de migration et de repli d'événements ont été vérifiées sur Stage.
- DevPortal publie des hydes et des collections de requêtes.
16) Feuille de route pour la mise en œuvre
M0-M1 (MVP) : environnements locaux (Compose), simulateur PSP/KYC de base, tests contractuels dans le CI, préview-neimspace dans le K8s.
M2-M3 : catalogues fictifs, Dashboards as Code, repliement manuel DLQ +, profils de charge.
M4-M6 : Sandbox externe à part entière avec clés/quotas, infrastructure de chaos, SDK automatique, politique de migration « deux versions en parallèle ».
M6 + : Stage géo-distribué avec failover, routage intelligent des fournisseurs SLA dans les tests, scripts d'apprentissage automatisés dans DevPortal.
17) Modèle de maturité des environnements (bref)
1. Base - il y a Test/Stage, données manuelles, isolation faible.
2. Avancé - simulateurs, tests contractuels, observabilité, prévisualisation partielle.
3. Expert - per-PR de l'environnement, chaos/charge comme code, DevPortal, sécurité stricte et automatisation complète.
Conclusion brève
Les bac à sable et les environnements de test correctement conçus sont un « airbag » et un « accélérateur » d'approvisionnement. L'isolation, la parité avec продакшеном, симуляторы des providers, les données de test déterminées, une forte perceptibilité et l'automatisation des prev'ju-mercredis donnent le cycle rapide et sûr "le code → le contrôle → le release", en réduisant le risque des régressions et en simplifiant la mise à l'échelle du quai.