Skip to content

How do I resolve the "Unable to import module" error that I receive when I run Lambda code in Python?

3 minute read
24

I want to resolve the "Unable to import module" error when I run Python code in an AWS Lambda function.

Short description

You receive an "Unable to import module" error when the Lambda environment can't find the specified library in your Lambda deployment package.

To resolve this error, create a deployment package with all the required libraries. Or, create a Lambda layer with the required libraries, and attach the layer to your Lambda function. You can then reuse the layer across multiple Lambda functions.

Resolution

Create a Lambda layer to attach to multiple Lambda functions

Note: When you create the Lambda layer, put the libraries in the /python or python/lib/python3.x/site-packages folders. It's a best practice to create the Lambda layer on the same operating system (OS) that your Lambda runtime is based on. For example, Python 3.12 is based on an Amazon Linux 2023 Amazon Machine Image (AMI). So, create the layer on an Amazon Linux 2023 OS.

If your Amazon Elastic Compute Cloud (Amazon EC2) instance has the permission to use the PublishLayerVersion API call to upload Lambda layers, then proceed to step 5.

Complete the following steps:

  1. Use the Amazon EC2 console to create an instance with Amazon Linux 2023 AMI. Or, use the AWS Cloud9 console.

  2. Create an AWS Identity and Access Management (IAM) policy that grants permissions to call the PublishLayerVersion API operation.

    Example IAM policy:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "lambda:PublishLayerVersion",
                "Resource": "*"
            }
        ]
    }
  3. Create an IAM role, and then attach the IAM policy to the role.

  4. Attach the IAM role to the instance.

  5. Connect to your instance or the AWS Cloud9 environment.

  6. Run the following commands to create a new folder and use pip to install the library that's named "numpy":

    mkdir -p lambda-layer/python  
    cd lambda-layer/python  
    pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy  
    

    Note: Update the platform parameter for your function type. For a x86_64 Lambda function, set the value to manylinux2014_x86_64. For an arm64 function, set the value to manylinux2014_aarch64. Update the python-version parameter to the same version that your Lambda function uses.

  7. Run the following command to put the contents of the python folder into a layer.zip file:

    cd ..  
    zip -r layer.zip python
  8. Run the following command to publish the Lambda layer:

    aws lambda publish-layer-version --layer-name numpy-layer --zip-file fileb://layer.zip --compatible-runtimes python3.12 --region us-east-1

    Note: Replace us-east-1 with the AWS Region of your Lambda function.

  9. Add the layer to your Lambda function.

  10. To test your Lambda function, import the package and print the version.
    Example output:

    import json
    import numpy
    
    def lambda_handler(event, context):
     print(numpy.__version__)
     return {
     'statusCode': 200,
     'body': json.dumps('Hello from Lambda!')
     }    

Related information

How do I install and troubleshoot Python libraries in Amazon EMR and Amazon EMR Serverless clusters?

AWS OFFICIALUpdated a year ago
7 Comments

How can i add multiple python packages to the same layer. Or how to add a python package to an existing layer?

replied 2 years ago

Thank you for your comment. We'll review and update the Knowledge Center article as needed.

AWS
EXPERT
replied 2 years ago

Great content, very informative.

replied 2 years ago

Solved my issue, exactly what I was looking for!

AWS
replied 2 years ago

Very clear instruction, thanks

replied 2 years ago

Python 3.12 is based on an Amazon Linux 2023 Amazon Machine Image (AMI). So, create the layer on an Amazon Linux 2023 OS.

Yeah, ok, but default python on this image is 3.9. I can only update to python 3.11 using dnf - so, feels like you left some quite important steps out here?

replied 2 years ago

Thank you for your comment. We'll review and update the Knowledge Center article as needed.

AWS
EXPERT
replied 2 years ago