Лямбда-код AWS не может импортировать зависимости из S3 - Runtime.ImportModuleError - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь развернуть лямбда-функцию Python с внешними зависимостями, но я получаю сообщение об ошибке, потому что она не видит мои внешние зависимости."Unable to import module 'metrics': No module named 'github'"

Вот мой сценарий развертывания.Мой скрипт на python с lambda_handler (): 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 Здесь все не работает. Не работаетмне понятно, почему лямбда не видит модуль 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

Наконец, вот начало лямбда-кода.Ошибка возникает при попытке импортировать 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 голосов
/ 10 мая 2019

Вам либо нужно иметь metrics.py и подпапки lambda_code в одной папке, либо вам нужно импортировать такие модули, как lambda_code.pytz для каждого заархивированного модуля.

Если вы следуете своей текущей структуре каталогов, lambda_code становится модулем, а все другие модули можно ссылаться только с помощью lambda_code., поскольку папки внутри lambda_code становятся подмодулями lambda_code. Я бы предложил вам скопировать подпапки lambda_code в корневой каталог, то есть в каталог, в котором находится ваш metrics.py. Затем удалите папку lambda_code, скопируйте и загрузите. Таким образом, вам может не понадобиться редактировать свой код.

...