Description
Is this related to an existing feature request or issue?
- Feature request: Simplified logger formatter when in AWS SAM Local powertools-lambda-python#1527
- Feature request: pretty printing logs in local development powertools-lambda-typescript#751
Which AWS Lambda Powertools utility does this relate to?
Logger, Event Handler, and potentially others
Summary
This RFC outlines the introduction of a new environment variable POWERTOOLS_DEV
to ease local prototyping, debugging, and why not per utility env var.
Use case
Powertools optimizes certain outputs for costs (CloudWatch Logs) and to facilitate native integrations (CloudWatch Embedded Metric Format, Batch processing, etc.). It also disables certain behaviours such as tracing when running outside Lambda, so adding Powertools doesn't get in the way.
As our customer base increases, it diversifies its usage and thus lies the opportunity to adapt and improve. For example, customers are running their Lambda function locally in various forms: AWS Chalice, AWS SAM CLI, AWS Amplify CLI, Serverless framework, etc.
This increases our complexity as we try to keep track of potential sources of local emulation and their many environment variables. Notwithstanding customers who may also run Lambda Powertools in non-Lambda environments such as Glue jobs, Fargate, whether we provide support or not.
Proposal
Introduce POWERTOOLS_DEV
boolean environment variable for the following effect:
Utility | Effect |
---|---|
Logger | Increase JSON indentation to 4. This will ease local debugging when running functions locally under emulators or direct calls while not affecting unit tests |
Event Handler | Enable full traceback errors in the response, indented request/responses, and CORS in dev mode (* ). This will deprecate POWERTOOLS_EVENT_HANDLER_DEBUG that achieves the same effect in Event Handler Debug Mode |
Tracer | Disables tracing operations. Future-proof non-Lambda environments. As of now, we'll continue with auto-disable feature until we decide when (if) we should move beyond Lambda as a compute environment |
This change future-proof additional convenience for customers and lower cognitive load on needing multiple env vars to the same end. We will create a new section in the documentation to keep track of behaviours this env var will enable.
Warning increased cost in log ingestion
We anticipate customers wanting to use POWERTOOLS_DEV
in non-production AWS accounts. This might also occur unwillingly. Regardless of the intention, we should log a warning message to signal this feature is in use. This should help prevent an increase in log ingestion cost in production.
Out of scope
Change Tracer auto-disable behaviour in non-Lambda environments. This will cause a breaking change in customers unit tests, which is a great convenient Powertools feature.
We can revisit it when (if) we officially support compute beyond Lambda.
Potential challenges
An open question we have is: What if a customer intentionally deploys with POWERTOOLS_DEV=true
? See Warning increased cost in log ingestion
Should we allow it or safely ignore it (e.g., POWERTOOLS_DEV && not TASK_ROOT
)? Tracer only
Dependencies and Integrations
None
Alternative solutions
Introduce an environment variable per utility when the need arises, for example POWERTOOLS_LOGGER_INDENTED_LOGS
, POWERTOOLS_EVENT_HANDLER_INDENTED_LOGS
.
Acknowledgment
- This feature request meets Lambda Powertools Tenets
- Should this be considered in other Lambda Powertools languages? i.e. Java, TypeScript, and .NET