Невозможно импортировать модули из aws лямбда-слоя - PullRequest
1 голос
/ 16 июня 2020

У меня есть файл требований для моих пакетов pip. Я установил его в целевую папку, заархивировал содержимое и загрузил на слой AWS лямбда.

Requirements.txt

asgiref==3.2.3
certifi==2019.11.28
chardet==3.0.4
cloudevents==0.2.4
decorator==4.4.1
Django==3.0
idna==2.8
jaeger-client==4.2.0
jsonpath-ng==1.4.3
pbr==5.4.4
ply==3.11
pytz==2019.3
requests==2.22.0
six==1.13.0
sqlparse==0.3.0
urllib3==1.25.7
aws-xray-sdk
mysql-connector-python
gunicorn

Я использовал команду pip3 install -r requirements.txt -t python/, где python это целевой каталог. На этом изображении показано содержимое каталога python. enter image description here

После этого я заархивировал содержимое этого каталога и опубликовал его как слой на aws лямбда. Я сделал фиктивную лямбда-функцию, чтобы проверить, работает ли слой.

import json
import django

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

Ошибка файла журнала:

Response:
{
  "errorMessage": "Unable to import module 'lambda_function'"
}

Request ID:
"66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0"

Function Logs:
START RequestId: 66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0 Version: $LATEST
Unable to import module 'lambda_function': No module named 'django'

END RequestId: 66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0
REPORT RequestId: 66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0  Duration: 0.64 ms   Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 42 MB  Init Duration: 1.81 ms  

1 Ответ

1 голос
/ 16 июня 2020

Если вам подходит слой, я могу сообщить, что я просто успешно построил django слой на основе вашего requirements.txt файла, который можно импортировать с помощью лямбда.

Для создания слоя я использовал инструмент lambci / lambda . Чтобы упростить процесс, я использовал следующий фрагмент из здесь .

Уровень имел 42 МБ, что близко к пределу лямбда в 50 МБ.

Если вы не используете Если вы не хотите использовать уровень, вы также можете использовать тот же инструмент docker для создания обычного пакета развертывания e, как описано в недавнем блоге AWS:

Поскольку слой работает, включение django в обычном пакете также должно работать.

...