如何解决 "Runtime.ImportModuleError" No module named 'mysql' in AWS lambda?
How to solve "Runtime.ImportModuleError" No module named 'mysql' in AWS lambda?
我正在 Lambda 中测试 Python 脚本,它给了我一个错误:
{
"errorMessage": "Unable to import module 'pythonfilename': No module named 'mysql'",
"errorType": "Runtime.ImportModuleError"
}
我该如何解决这个问题?当我在本地测试脚本时我得到了同样的错误,但是当我升级 pip
到 20.2.2 然后 pip install mysql-connector
这个错误已经在本地解决了,我如何在 Lambda env 中解决这个问题?谢谢。
如果您要将函数部署到 AWS lambda,则需要捆绑您的依赖项:
https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-dependencies
您可以使用您的包创建 Lambda custom layer。
为了检查这个解决方案,我创建了这样一个图层,可以确认它有效。
使用的技术包括 docker 工具 在最近的 AWS 博客:
中描述
所以对于这个问题,我验证如下:
创建空文件夹,例如mylayer
.
转到文件夹并创建 requirements.txt
文件,内容为
boto3==1.14.49
mock==4.0.2
moto==1.3.14
mysql-connector-python==8.0.21
- 运行 以下 docker 命令:
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
- 将图层创建为 zip:
zip -r -9 mylayer.zip python
在 AWS 控制台中基于 mylayer.zip
创建 lambda 层。
不要忘记将 Compatible runtimes
指定为 python3.8
。该层将
总的来说,大约 48 MB。因此,最好检查一下您是否
真的需要所有这些包。
使用以下 lambda 函数在 lambda 中测试层:
import mysql
def lambda_handler(event, context):
print(dir(mysql))
函数正确执行:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
我正在 Lambda 中测试 Python 脚本,它给了我一个错误:
{
"errorMessage": "Unable to import module 'pythonfilename': No module named 'mysql'",
"errorType": "Runtime.ImportModuleError"
}
我该如何解决这个问题?当我在本地测试脚本时我得到了同样的错误,但是当我升级 pip
到 20.2.2 然后 pip install mysql-connector
这个错误已经在本地解决了,我如何在 Lambda env 中解决这个问题?谢谢。
如果您要将函数部署到 AWS lambda,则需要捆绑您的依赖项: https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-dependencies
您可以使用您的包创建 Lambda custom layer。
为了检查这个解决方案,我创建了这样一个图层,可以确认它有效。
使用的技术包括 docker 工具 在最近的 AWS 博客:
中描述所以对于这个问题,我验证如下:
创建空文件夹,例如
mylayer
.转到文件夹并创建
requirements.txt
文件,内容为
boto3==1.14.49
mock==4.0.2
moto==1.3.14
mysql-connector-python==8.0.21
- 运行 以下 docker 命令:
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
- 将图层创建为 zip:
zip -r -9 mylayer.zip python
在 AWS 控制台中基于
mylayer.zip
创建 lambda 层。 不要忘记将Compatible runtimes
指定为python3.8
。该层将 总的来说,大约 48 MB。因此,最好检查一下您是否 真的需要所有这些包。使用以下 lambda 函数在 lambda 中测试层:
import mysql
def lambda_handler(event, context):
print(dir(mysql))
函数正确执行:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']