Produktion 2 Stunden down. Root Cause: ein einziger Tippfehler.

Die Änderung:

# ConfigMap update
data:
  DATABASE_CONNECITON_TIMEOUT: "30000"  # typo: CONNECITON

Was passierte:

  • Die App suchte nach DATABASE_CONNECTION_TIMEOUT
  • Fand ihn nicht (Tippfehler), und kein Default war gesetzt
  • Der Config-Loader reichte stillschweigend 0 an den Datenbanktreiber weiter
  • In unserem Treiber — wie in JDBC und libpq — bedeutet ein Timeout von 0 kein Timeout
  • Queries gegen eine ohnehin langsame Replica hingen endlos, der Connection Pool füllte sich mit festhängenden Verbindungen, und jeder Request dahinter stand in der Warteschlange, bis der Service nicht mehr reagierte

Warum es nicht aufgefallen ist:

  • ConfigMaps sind nur YAML—kein Schema
  • Kubernetes validiert keine Key-Namen
  • Das PR-Review hat den Tippfehler übersehen
  • Integrationstests nutzten eine andere Config

Die Fixes:

  • Die App validiert beim Start die erforderlichen Env-Variablen
  • Fail fast, wenn kritische Config fehlt
  • Schema-Validierung für ConfigMaps in der CI
  • Canary Deployments, um Probleme früh zu erwischen

Config-Schema-Checks gehören zu den günstigsten Gates, die Sie einer CI/CD-Pipeline hinzufügen können — ein paar Zeilen Validierung gegen zwei Stunden Downtime.

Lektion: ConfigMaps sind kein Code—behandeln Sie sie, als wären sie welcher.


← Zurück zu Lessons Learned

Incidents wie dieser sind vermeidbar. Unser Team für AWS Managed Services überwacht Kundenumgebungen 24/7 mit KI-gestütztem Monitoring und Senior Engineers am Pager — damit Geschichten wie diese im Archiv bleiben.