Безсерверное развертывание с требованиями serverless-python не работает - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь развернуть лямбда-функцию Python, используя без сервера.Мне нужна библиотека psycopg2, поэтому я использовал плагин serverless-python-needs и добавил его в свой файл serverless.yml.

plugins:
  - serverless-python-requirements
custom:
    pythonRequirements:
        dockerizePip: non-linux

Я могу успешно развернуть функцию:

Serverless: Installing requirements from 
/Users/Desktop/postgresql/.serverless/requirements/requirements.txt ...
Serverless: Docker Image: lambci/lambda:build-python3.6
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Injecting required Python packages to package...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (43.07 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...

..............
Serverless: Stack update finished...

Но когда я проверяю свои журналы Cloudwatch, он говорит, что "нет модуля с именем psycopg2".

Структура моего zip-файла:

    |--node_modules
    |--.gitignore
    |--handler.py
    |--package-lock.json
    |--package.json
    |--serverless.yml

. При запуске развертывания без сервера не было создано .serverless / dir ...

Любая помощь будет принята с благодарностью!

Ответы [ 4 ]

0 голосов
/ 16 августа 2019

Я развернул приложение Python Flask на AWS и при его настройке получил ту же ошибку.Я решил эту проблему следующим образом:

Я надеюсь, что вы используете виртуальную среду, в которой вы установили все необходимые библиотеки Python.Я не видел файлы виртуальной среды в вашем списке папок.Вы можете проверить файл readme моего git-репо, чтобы увидеть, как собрать его с нуля.Я задокументировал все шаги, которые выполнил - https://github.com/shyam454/Flask_AWS

Примечание: репозиторий работает, но я все еще его разрабатываю, поэтому конечные точки, упомянутые в Readme, еще не включены в код.Но это все еще хорошо в отношении настройки Python + Flask

Если у вас уже есть виртуальная среда, выполните следующие шаги:

Перед развертыванием с использованием без сервера выполните pip freeze> needs.txt

Эта команда будет включать все библиотеки Python, которые вы установили в вашей виртуальной среде, для представления в файле needs.txt

В файле serverless.yml добавьте следующие строки

plugins: - serverless-wsgi - serverless-python-требования

Теперь выполните развертывание без сервера

Вы можете заметить, что без сервера будут установлены все требования из файла needs.txt.при развертывании без сервера вы должны увидеть следующие строки:

Без сервера: сгенерированные требования из xxxxxx \ AWS \ Flask_AWS \ needs.txt в xxxxxx \ AWS \ Flask_AWS.serverless \ needs.txt ...

Без сервера: установка требований из xxxxxxx \ AWS \ Flask_AWS.serverless \ needs \ needs.txt ...

Это происходит при установке библиотек python в облаке, и вы не получите сообщение об ошибке, модуль недоступен,

Надеюсь, это поможет вам.

0 голосов
/ 22 мая 2019

Вам нужно только определить свои зависимости Python в файле needs.txt.Вы можете сделать это вручную или использовать pip freeze с:

 pip freeze > requirements.txt
0 голосов
/ 19 июня 2019

Немного поздно, но для тех, кто сталкивается с подобной проблемой.

Вы развертываете свои требования в виде почтового индекса.Вы должны распаковать требования перед тем, как импортировать их в свой скрипт Python.Добавьте эту строку кода поверх скрипта Python, куда вы хотите импортировать библиотеки:

try:
 import unzip_requirements
except ImportError:
 pass

Вы можете выдать ошибку при исключении, если хотите или просто пропустите.

0 голосов
/ 18 декабря 2018

Правильно ли вы установили зависимости Python?

без сервера пытается установить требования из Serverless: Installing requirements from /Users/Desktop/postgresql/.serverless/requirements/requirements.txt

Я бы предложил следующие действия:

  • create virtualenv virtualenv ./env
  • активировать его source env/bin/activate
  • установить ваши зависимости pip install psycopg2
  • заморозить ваши локальные зависимости pip freeze > requirements.txt

Предполагается, что ваш код импортируетсяВаша зависимость, разверните с использованием без сервера.

...