Ошибка «Нет модуля с именем «запрашивает» при локальном вызове кода AWS SAM (lambda) python

#python #amazon-web-services #visual-studio-code #aws-lambda #sam

#python #amazon-web-services #visual-studio-code #aws-lambda #sam

Вопрос:

Недавно я начал использовать AWS SAM для создания API и AWS Lambda. Код в AWS работает нормально, но у меня возникли некоторые трудности с настройкой локального тестирования и отладки (что является одной из основных причин, по которой я хотел использовать SAM в первую очередь).).

Функция lambda_handler очень проста. Это выглядит так, как показано ниже. Я просто запускаю свою функцию, например some_function_here, которая использует модуль «запросы» в одной из зависимых функций. В моем requirements.txt в проекте SAM у меня есть «запросы» наряду с некоторыми другими зависимостями. Похоже, это выполняет свою работу, поскольку я вижу, что запрос устанавливается в AWS Lambda (скриншот ниже).

Проблема, на удивление, заключается в том, что я запускаю SAM локально (в VSCode я нажимаю F5). Когда я запускаю sam local invoke (поскольку мне не нужно событие), я получаю сообщение об ошибке «нет запросов с именем модуля», когда он должен был загружать запросы на основе ‘requirements.txt «как это происходит в облаке AWS. Любое предложение приветствуется.

Структура папок AWS Lambda

Код обработчика лямбда-кода

 def lambda_handler(event, context):
    try:
        some_function_here()
        return {
            "statusCode": 200,
            "body": json.dumps({
                "message": "Job ran successfully."
            }),
        }
    except Exception as e:
        return {
            "statusCode": 500,
            "body": json.dumps({
                "message": "Something went wrong!"
            }),
        }
 

Ошибка

 (base) anojshrestha% sam local invoke
Invoking app.lambda_handler (python3.8)
Skip pulling image and use local one: amazon/aws-sam-cli-emulation-image-python3.8:rapid-1.7.0.

Mounting /... as /var/task:ro,delegated inside runtime container
START RequestId: 17ce7573-87ed-1ce0-5584-31a7f3f0823d Version: $LATEST
[ERROR] Runtime.ImportModuleError: Unable to import module 'app': No module named 'requests'
END RequestId: 17ce7573-87ed-1ce0-5584-31a7f3f0823d
REPORT RequestId: 17ce7573-87ed-1ce0-5584-31a7f3f0823d  Init Duration: 188.03 ms       Duration: 3.89 ms        Billed Duration: 100 ms Memory Size: 128 MB     Max Memory Used: 24 MB

{"errorType":"Runtime.ImportModuleError","errorMessage":"Unable to import module 'app': No module named 'requests'"}
 

Комментарии:

1. Установлен ли модуль «запросы» в среде Python, которую вы используете в VSCode? Пожалуйста, введите » pip show requests » в терминале, чтобы проверить его установку.

2. Привет @ JillCheng, да, у меня установлена библиотека. Также не следует ли устанавливать библиотеку как часть запуска SAM (как это происходит на AWS)? xx% pip show requests Name: requests Version: 2.22.0 Summary: Python HTTP for Humans. Home-page: http://python-requests.org Author: Kenneth Reitz Author-email: me@kennethreitz.org License: Apache 2.0 Location: /opt/anaconda3/lib/python3.7/site-packages Requires: urllib3, chardet, certifi, idna Required-by: Sphinx, pymsteams, conda, conda-build, anaconda-project, anaconda-client

3. Извините за задержку ответа @JillCheng. Оказывается, проблема не в версии python. И простое выполнение сборки sam (нажатие клавиши F5 в VSCode) запрашивает у базового docker переустановку требований. Когда вы просто выполняете «sam local invoke», требования, похоже, не принимаются во внимание. Не уверен, почему это не работало раньше, но принудительная сборка sam теперь устранила проблему.

4. Привет @ JillCheng, установка модулей работает немного по-другому, когда речь идет о AWS SAM. AWS SAM создает контейнер docker в фоновом режиме, устанавливает требования в контейнер docker и запускает вашу функцию, используя ту же / похожую среду выполнения AWS lambda. Моя проблема заключалась в том, что требования, установленные в этом контейнере, не работали.

Ответ №1:

Я заметил, что используемый вами интерпретатор Python — « python3.8 «, но модуль « requests » установлен в «anaconda3 / lib / python3.7 «. Рекомендуется переключить интерпретатор Python в VSCode на « Python3.7(conda) «. (Пожалуйста, щелкните интерпретатор Python в нижнем левом углу VSCode, чтобы переключить его.)

Мы можем использовать команду « python --version » для проверки версии интерпретатора Python, используемой в настоящее время терминалом VSCode:

введите описание изображения здесь

введите описание изображения здесь

Ссылка: Среда в VSCode.