Skip to content

Performance optimization

Optimize your Lambda functions for better performance, reduced cold start times, and lower costs. These techniques help minimize package size, improve startup speed, and reduce memory usage.

Always validate your function's behavior after applying optimizations to ensure an optimization hasn't introduced any issues with your packages. For example, removal of directories that appear to be unnecessary, such as docs, can break some libraries.

Reduce cold start times

  1. Minimize package size by excluding unnecessary files
  2. Use compiled dependencies when possible
  3. Leverage Lambda SnapStart or Provisioned concurrency when possible

Build optimization

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash

# Remove unnecessary files to reduce package size
find build/ -name "*.pyc" -delete
find build/ -name "__pycache__" -type d -exec rm -rf {} +
find build/ -name "*.dist-info" -type d -exec rm -rf {} +
find build/ -name "tests" -type d -exec rm -rf {} +
find build/ -name "test_*" -delete

# Remove examples
find build/ -name "examples" -type d -exec rm -rf {} +

echo "✅ Package optimized"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/bash

# Create optimized layer structure
mkdir -p layer/python/

# Install only production dependencies
pip install aws-lambda-powertools[all] -t layer/python/ --no-deps
pip install pydantic -t layer/python/ --no-deps

# Remove unnecessary files from layer
find layer/ -name "*.pyc" -delete
find layer/ -name "__pycache__" -type d -exec rm -rf {} +
find layer/ -name "tests" -type d -exec rm -rf {} +

# Create layer zip
cd layer && zip -r ../optimized-layer.zip . && cd ..

echo "✅ Optimized layer created: optimized-layer.zip"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash

# Remove unnecessary files
find build/ -name "*.pyc" -delete
find build/ -name "__pycache__" -type d -exec rm -rf {} +
find build/ -name "*.dist-info" -type d -exec rm -rf {} +
find build/ -name "tests" -type d -exec rm -rf {} +
find build/ -name "test_*" -delete

# Remove debug symbols from compiled extensions
find build/ -name "*.so" -exec strip --strip-debug {} \; 2>/dev/null || true
find build/ -name "*.so.*" -exec strip --strip-debug {} \; 2>/dev/null || true

# Remove additional bloat from common packages
rm -rf build/*/site-packages/*/tests/
rm -rf build/*/site-packages/*/test/
rm -rf build/*/site-packages/*/.git/
rm -rf build/*/site-packages/*/examples/
rm -rf build/*/site-packages/*/*.md
rm -rf build/*/site-packages/*/*.rst
rm -rf build/*/site-packages/*/*.txt

# Calculate size reduction
echo "📊 Package optimization completed"
du -sh build/ 2>/dev/null || echo "✅ Advanced optimization applied"