Projects

50 Lambda Functions. Python 3.8. End of Life. Nobody Cared Until I Looked.

50+ Lambda functions running Python 3.8. AWS about to stop patching security vulnerabilities. Nobody had touched these functions in over a year because "they work, don't touch them." Famous last words. The audit uncovered hardcoded credentials, deprecated libraries, zero tests. Here's the systematic approach to upgrading everything without breaking a single production workflow. Inside those functions: hardcoded credentials - not even environment variables, raw strings. Deprecated libraries with known CVEs. Not a single test across 50+ functions. IAM roles with wildcard permissions, Action star, Resource star. Functions talking to RDS over the open internet with no VPC isolation. The documentation was the function name. That was it. The migration strategy was one function at a time, not a big bang. Runtime updated 3.8 to 3.11, every dependency pinned and audited, shared libraries moved into Lambda layers so updates happen in one place. Canary deployments with traffic shifting - 5%, then 25%, then full rollover - automatic rollback if anything broke. Security hardening ran in parallel: IAM roles rewritten from scratch to least privilege, hardcoded credentials replaced with…