AWS Lambda Powertools (Python)
Powertools for AWS Lambda (Python) is a developer toolkit designed to implement Serverless best practices and increase developer velocity. It offers utilities for tracing, logging, metrics, event handling, data parsing, and idempotency. The library is currently at version 3.27.0 and maintains an active development cycle with frequent releases, often shipping new features and bug fixes on a monthly basis.
Warnings
- breaking AWS Lambda Powertools v3.24.0 and later have dropped support for Python 3.9. Attempting to use these versions with a Python 3.9 runtime will result in errors.
- gotcha Versions prior to v3.19.0 of AWS Lambda Powertools had critical bugs affecting Data validation and Middleware within the Event Handler utility, potentially leading to incorrect processing or validation errors.
- gotcha A regression was introduced in v3.22.0 affecting the Event Handler utility when using nested metadata annotations (e.g., `annotated_types` or `Interval`).
- gotcha AWS Lambda Powertools v3 is compatible with Pydantic V2. Users migrating from Pydantic V1 might need to update their model syntax (e.g., `model_validator` instead of `validator`) when using models with Event Handler or Parser utilities.
Install
-
pip install aws-lambda-powertools
Imports
- Logger
from aws_lambda_powertools import Logger
- Tracer
from aws_lambda_powertools import Tracer
- Metrics
from aws_lambda_powertools import Metrics
- App
from aws_lambda_powertools.event_handler import App
- Parser
from aws_lambda_powertools.utilities.parser import Parser
- Idempotency
from aws_lambda_powertools.utilities.idempotency import IdempotencyConfig, idempotent
Quickstart
import json
from aws_lambda_powertools import Logger
logger = Logger(service="payment_processing")
@logger.inject_lambda_context(log_event=True)
def handler(event, context):
# Accessing event data via a common pattern
if event and 'body' in event:
try:
body = json.loads(event['body'])
transaction_id = body.get('transaction_id', 'N/A')
logger.info(f"Processing transaction: {transaction_id}")
except json.JSONDecodeError:
logger.error("Invalid JSON in event body")
return {"statusCode": 400, "body": json.dumps({"message": "Invalid JSON"})}
else:
logger.info("No event body provided.")
logger.info("Hello from Lambda, using Powertools Logger!")
return {
"statusCode": 200,
"body": json.dumps("Successfully processed request."),
}