How do I resolve the "Unable to import module" error that I receive when I run Lambda code in Python?
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. The Lambda layer file size limit is 50 MB zipped and 250 MB unzipped. 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 you use an Amazon Elastic Compute Cloud (Amazon EC2) instance and have permission to use the PublishLayerVersion API call, then proceed to step 5. Or, if you use AWS CloudShell for authentication, then proceed to step 5.
Note: If you receive errors when you run AWS Command Line Interface (AWS CLI) commands, then see Troubleshooting errors for the AWS CLI. Also, make sure that you're using the most recent AWS CLI version.
Complete the following steps:
1. Use AWS CloudShell or use the Amazon EC2 console to create an instance with Amazon Linux 2023 AMI.
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": "arn:aws:lambda:*:*:layer:*" } ] }
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 open CloudShell.
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. You don't need to install Python 3.12 because pip automatically downloads packages compatible with Python 3.12.
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. To publish the Lambda layer, run the following publish-layer-version command:
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?
- Topics
- ServerlessCompute
- Tags
- AWS Lambda
- Language
- English
How can i add multiple python packages to the same layer. Or how to add a python package to an existing layer?
replied 3 years ago
Thank you for your comment. We'll review and update the Knowledge Center article as needed.
Great content, very informative.
replied 2 years ago
Solved my issue, exactly what I was looking for!
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.
