Manage Python dependencies in AWS Lambda using AWS CDK

We looked at how we can install Python packages beyond the ones available by default in AWS Lambda.

But I have always found it a bit cumbersome and unelegant to use Lambda layers to handle dependencies. Intead, I will show you an alternative way to handle Python dependencies in AWS Lambda using AWS CDK using an L2 construct called PythonFunction.

This is not availble in the aws_cdk.aws_lambda module, so we will have to install it using pip:

pip install

Create a lambda function using PythonFunction

# filename: cdk_app/
from aws_cdk import (
# 👇🏽 import the python_alpha module
from aws_cdk import aws_lambda_python_alpha as _lambda

from constructs import Construct

class LambdaStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # 👇🏽 create a python lambda function
        my_lambda = _lambda.PythonFunction(
            entry="cdk_app/lambda", # 👈🏽 Required
            runtime=_lambda.Runtime.PYTHON_3_10, # 👈🏽 Required
            index="", # 👈🏽 Optional, defaults to
            handler="handler", # 👈🏽 Optional, defaults to handler

In the above code we use PythonFunction to define a lambda function. It takes the following parameters:

  1. scope: The scope of the construct. In our case, it is the LambdaStack class.
  2. id: The id of the construct. In our case, it is MyLambda, this will be used to refer to the function in CloudFormation templates
  3. entry: The path to the directory where the lambda function is located. In our case, it is lambda
  4. index: The name of the file that contains the lambda function. In our case, it is
  5. handler: The name of the handler function. In our case, it is handler

By default, the Construct will look for a requirements.txt file within the entry directory and install the dependencies listed in it.

Let's create the cdk_app/lambda/ file:

# filename: cdk_app/lambda/

import requests

def handler(event, context):
    response = requests.get("")
    return {
        "statusCode": 200,
        "body": response.json()

We put a requirements.txt file in the same directory as our file with the following contents:


Now let's create the file:

# filename:

import aws_cdk as cdk
from cdk_app.lambda_stack import LambdaStack

app = cdk.App()

lambda_stack = LambdaStack(app, "LambdaStack")


Run cdk deploy to deploy the stack.

Using this method, you just need to capture your dependencies in a requirements.txt file and the construct will take care of the rest.

Need Help? Open a discussion thread on GitHub.

Related Posts