AWS -Lamda не работает, потому что не может импортировать переменную вне lambda_handler - PullRequest
0 голосов
/ 04 марта 2020

Я проверил все заданные ранее вопросы и не нашел ответа. У меня есть следующая структура моего проекта:

project/
├── 
└── lambdas
    ├── __init__.py
    ├── lambda_handler_1.py  # def main(event, context)
    ├── lambda_handler_2.py
└── my_lib
    ├── __init__.py. # Here I have `import my_lids.utils \n import my_lids.exceptions`
    ├── exceptions.py
    ├── utils.py
└── api
    ├── __init__.py
    ├── some_api.py  # Here I make `from my_lids.utils import my_func` and `from my_lids.exceptions import MyException`

Когда запускается триггер lambda, я получаю сообщение об ошибке

Runtime.ImportModuleError: Unable to import module 'lambdas/lambda_handler_1': cannot import name 'my_func' from 'my_lib.errors' (/var/task/my_lib/utils.py)

Я не использую функции из утилит модуля в моей лямбде. Что я делаю не так? Я заархивировал весь свой код и требования в zip-файл и развернул его. Также нет никаких __pycache__, et c.

Спасибо

1 Ответ

0 голосов
/ 04 марта 2020

Лямбда-функция может содержать несколько файлов.

Если вы используете utils.py только для этой функции, то вы должны включить ее источник в качестве другого файла для функции

В таком случае поместите каждую лямбда-функцию в свою собственную папку ( не отдельные файлы), добавьте utils.py в папку Lambda, с которой вы хотите его использовать. Затем используйте SAM CLI для сборки / упаковки / развертывания Lambdas

. Если вы используете его в нескольких местах, вам следует упаковать его как Lambda Layer

Лямбда-слои очень сложно обновлять, однако

PS вам не нужно устанавливать Docker при установке SAM ClI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...