如何解决在 Python 中运行 Lambda 代码时收到的“Unable to import module”错误?

2 分钟阅读
0

当我尝试在 Python 中运行 AWS Lambda 代码时,收到了一个“Unable to import module”(无法导入模块)错误。

简短描述

通常情况下收到此错误的原因是 Lambda 环境在 Python 代码中找不到指定的库。这是因为 Lambda 没有预先封装所有 Python 库。

要解决此错误,请创建一个部署包或 Lambda 层,其中包含要在 Lambda 的 Python 代码中使用的库。

**重要提示:**确保把为 Python 导入的库放在 /python 文件夹中。

解决方法

**注意:**以下步骤展示的是如何创建 Lambda 层,并非部署程序包。这是因为您可以跨多个 Lambda 函数重复使用 Lambda 层。每个 Lambda 运行时都会在 PATH 变量引用的 /opt 目录中添加特定的文件夹。如果该层使用相同的文件夹结构,则 Lambda 函数的代码可以在不指定路径的情况下访问该层内容。

最佳实践是在建立 Lambda 运行时的同一操作系统上创建 Lambda 层。例如,Python 3.8 基于 Amazon Linux 2 Amazon Machine Image (AMI)。但是,Python 3.7 和 Python 3.6 以 Amazon Linux AMI 为基础。

要为 Python 3.8 库创建 Lambda 层,请执行以下操作:

**注意:**步骤 1-3 是可选的。

1.    在 AWS Cloud9 控制台中,使用 Amazon Linux 2 AMI 创建一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例。有关说明,请参阅《AWS Cloud9 用户指南》中的创建 EC2 环境

2.    创建一个 AWS Identity and Access Management (IAM) 策略,其将赋予调用 PublishLayerVersion API 操作的权限。

示例,IAM 策略语句将赋予调用 PublishLayerVersion API 操作的权限

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "lambda:PublishLayerVersion",
      "Resource": "*"
    }
  ]
}

3.    创建一个 IAM 角色将 IAM 策略附上到该角色。然后,将 IAM 角色附上到 Amazon EC2 实例

**注意:**您的 EC2 实例现在拥有权限,可为 PublishLayerVersion API 调用上载 Lambda 层。

4.    打开您的 AWS Cloud9 Amazon EC2 环境。然后,通过运行以下命令安装 Python 3.8 和 pip3:

$ sudo amazon-linux-extras install python3.8
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3.8 get-pip.py --user

5.    通过运行以下命令,创建一个 python 文件夹:

$ mkdir python

6.    通过运行以下命令,将 Pandas 库文件安装到 python 文件夹中:

**重要提示:**将 Pandas 替换为您要导入的 Python 库的名称。

$ python3.8 -m pip install pandas -t python/

7.    通过运行以下命令,将 python 文件夹的内容压缩到 layer.zip 文件中:

$ zip -r layer.zip python

8.    通过运行以下命令发布 Lambda 层:

**重要提示:**将 us-east-1 替换为您的 Lambda 函数所在的 AWS 区域。

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

9.    向您的 Lambda 函数添加层


相关信息

我在上传 Lambda 部署程序包时遇到“permission denied”或“unable to import module”错误,如何进行问题排查?

相关视频

AWS 官方
AWS 官方已更新 3 个月前