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:
-
Use the Amazon EC2 console to create an instance with Amazon Linux 2023 AMI. Or, use the AWS Cloud9 console.
-
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": "*"
}
]
}
-
Create an IAM role, and then attach the IAM policy to the role.
-
Attach the IAM role to the instance.
-
Connect to your instance or the AWS Cloud9 environment.
-
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.
-
Run the following command to put the contents of the python folder into a layer.zip file:
cd ..
zip -r layer.zip python
-
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.
-
Add the layer to your Lambda function.
-
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?