AWS Lambda代码无法从S3导入依赖关系-Runtime.ImportModuleError

时间:2019-05-09 19:50:11

标签: python amazon-web-services aws-lambda dependencies

我正在尝试部署具有外部依赖项的Python lambda函数,但由于遇到了我的外部依赖项,我遇到了一个错误。 "Unable to import module 'metrics': No module named 'github'"

这是我的部署脚本。我的带有lambda_handler()的python脚本是metrics.py

mkdir lambda_code

# populate lambda_code directory with python libraries
pip3 install --quiet -r requirements.txt --target lambda_code/

# compress the lambda_code directory and add metrics.py to the zip
zip -qq -r9 lambda_code.zip lambda_code/

zip -qq -g lambda_code.zip metrics.py

aws s3 cp lambda_code.zip s3://$BUCKET/lambda_code.zip

aws lambda update-function-code --function-name $FUNCTION_NAME --s3-bucket $BUCKET --s3-key lambda_code.zip

这是我心疼的lamdba_code.zip的树。这是无法正常工作的地方。对于我来说,为什么lambda看不到github模块并不有意义。我还尝试过将metrics.py直接放在lambda_code目录中,但仍然没有。

.
├── lambda_code
│   ├── Deprecated-1.2.5.dist-info
│   ├── PyGithub-1.43.7.dist-info
│   ├── PyJWT-1.7.1.dist-info
│   ├── __pycache__
│   ├── bin
│   ├── certifi
│   ├── certifi-2019.3.9.dist-info
│   ├── chardet
│   ├── chardet-3.0.4.dist-info
│   ├── cycler-0.10.0.dist-info
│   ├── cycler.py
│   ├── dateutil
│   ├── deprecated
│   ├── easy_install.py
│   ├── github
│   ├── idna
│   ├── idna-2.8.dist-info
│   ├── jwt
│   ├── kiwisolver-1.1.0.dist-info
│   ├── kiwisolver.cpython-37m-darwin.so
│   ├── matplotlib
│   ├── matplotlib-3.0.3-py3.7-nspkg.pth
│   ├── matplotlib-3.0.3.dist-info
│   ├── mpl_toolkits
│   ├── numpy
│   ├── numpy-1.16.3.dist-info
│   ├── pandas
│   ├── pandas-0.24.2.dist-info
│   ├── pkg_resources
│   ├── pylab.py
│   ├── pyparsing-2.4.0.dist-info
│   ├── pyparsing.py
│   ├── python_dateutil-2.8.0.dist-info
│   ├── pytz
│   ├── pytz-2019.1.dist-info
│   ├── requests
│   ├── requests-2.21.0.dist-info
│   ├── setuptools
│   ├── setuptools-41.0.1.dist-info
│   ├── six-1.12.0.dist-info
│   ├── six.py
│   ├── urllib3
│   ├── urllib3-1.24.3.dist-info
│   ├── wrapt
│   └── wrapt-1.11.1.dist-info
└── metrics.py

最后,这是lambda代码的开头。尝试导入github时发生错误。

"""Obtains total number of releases on Github.com and creates data 
visualizations"""

import datetime
import io
import os
import sys

from base64 import b64decode
from github import Github
import boto3
import matplotlib.pyplot as plt
import pandas as pd

ENCRYPTED = os.environ['github_credentials']
DECRYPTED = 
boto3.client('kms').decrypt(CiphertextBlob=b64decode(ENCRYPTED)) . 
['Plaintext']

def lambda_handler(event, context):

1 个答案:

答案 0 :(得分:0)

您要么需要将metrics.pylambda_code的子文件夹放到一个文件夹中,要么需要为每个压缩的模块导入lambda_code.pytz之类的模块。

如果遵循当前目录结构,则lambda_code将成为一个模块,而所有其他模块只能使用lambda_code.进行引用,因为lambda_code中的文件夹将成为{{1}的子模块}。我建议您将lambda_code的子文件夹复制到根目录,即lambda_code所在的目录。然后删除metrics.py文件夹并压缩并上传。这样,您可能不需要编辑代码。