DEV Community

Cover image for Boost your lambda serverless power using Powertools
Yogesh Sharma
Yogesh Sharma

Posted on


Boost your lambda serverless power using Powertools

There are many positive aspects to serverless technology, but how can you truly comprehend what is happening with your AWS Lambda functions in terms of performance, cold start effects, error handling, and tracing?

For the rescue- The AWS Lambda Powertools libraries built to compliant with the Serverless Lens-Well Architected Framework. The Python version of AWS Lambda Powertools was the first to emerge and rapidly achieved broad adoption. Currently AWS Powertools is available for Java and Typescript-recently launched.

In this post, I'll talk about different patterns available in AWS Powertools to construct metrics, tracing, and standard logging.

Why do we need AWS Powertools
The Serverless Lens in AWS Well Architected Tool, [specifically the Operational Excellence (OPS) Pillar] covers the critical topics of observability, troubleshooting, logging & monitoring.
The OPS pillar mainly talks about three components:

  • Structured logging

  • Metrics and alarms

  • Distributed tracing

Instead of investing time to search solution over internet/forums to satisfy best practices regarding afore mentioned components, AWS Lambda Powertools provide an efficient, easy, optimise, readymade recipe to directly adopt into your lambda functions. In this blogpost, I'll show Python based code snippets to show the real power of Powertool library.
AWS Lambda Powertools make this more easily, since we just need to add an library and use a few decorators to provide a good level of observability into our lambdas.

How to enable/use powertools library
Add the following layer on Lambda function:

Alternatively, use the PyPi approach- pip install aws-lambda-powertools

Lets first understand the different type of structure logging first:

Normally, we use default logging in the lambda function as follows:

Powertools offer a simple, standardized log formmater, that can be enriched with important informations, simply using decorators:

Now, we can see a detailed structured logs by just adding 2 lines of code!

The requirement is to have a metric to count how many Carts have been checked out. All it takes to log metrics is the log_metrics decorator.


With a few lines, we can get one of the most important metrics when working with lambda functions: the cold start metric. The cold start happens every time that your container isn't waked up, and it can became a big problem to your architecture.

Similar to non-serverless applications, anomalies can occur at larger scale in distributed systems. Due to
the nature of serverless architectures, it’s fundamental to have distributed tracing.

Active tracing with AWS X-Ray should be enabled to provide distributed tracing capabilities as well as to
enable visual service maps for faster troubleshooting. X-Ray helps you identify performance degradation
and quickly understand anomalies.

Powertools offer multiple decorators to work with tracing. Please remember, in order to have it operational, we need to have the previous step done (previous article in this tutorial), which means proper setup in the SAM template:

Tracing needs to be enabled for Lambda function: Tracing: Active

And variable POWERTOOLS_SERVICE_NAME set, like in our example: POWERTOOLS_SERVICE_NAME: shopping-cart

def lambda_handler(event, context):
    path_params = event["pathParameters"]
    game_id = path_params.get("product_id")"Retrieving product_id%s", product_id)
Enter fullscreen mode Exit fullscreen mode

Using @tracer.capture_lambda_handler, we can automatically capture the metadata information about our handler, and see this information in Xray service map.

def get_product(product_id, dynamodb=None):
    table_name = os.getenv("TABLE_NAME")

    if not dynamodb:"Initializing DDB Table %s", table_name)
        dynamodb = boto3.resource('dynamodb')

    table = dynamodb.Table(table_name)
Enter fullscreen mode Exit fullscreen mode


Logger Tracer Metrics All in one
Use all three- Logger, Tracer and Metrics component in all of your lambda functions:

Avoiding the circumstance where each service, or even each Lambda function, takes a slightly different approach to achieving the objectives of a well-architected architecture is the problem in applying best practises for observability. Sure, it's simple to create your own lightweight libraries for monitoring, tracing, and logging, but as your application develops, you'll need more functionality and bug fixes. What was once lightweight might rapidly turn into an unwanted maintenance burden for teams. To assist teams in writing less boilerplate code to fulfil these non-functional needs, Lambda Powertools were created. These concepts formed the foundation of the AWS Lambda Powertools packages, which concentrate on the Well-Architected Framework Serverless Lens.

Top comments (0)

Here is a post you might want to check out:

Regex for lazy developers

regex for lazy devs

Sorry for the callout πŸ˜†