Я пытаюсь создать функцию Python для AWS Lambda, которая использует passlib
библиотека для хеширования паролей с argon2
. С этой целью я использую pip
чтобы установить следующие пакеты в локальный каталог, заархивировать их с моим файлом Python и загрузить в Lambda:
passlib==1.7.1
argon2-cffi==18.1.0
cffi==1.11.5
pycparser==2.18
six==1.11.0
Этих пакетов достаточно, чтобы я мог использовать argon2
через passlib
в моей локальной среде Ubuntu. Однако при тестировании в Lambda я продолжаю получать следующую ошибку:
File "/var/task/my-function.py", line 41, in handler
if argon2.verify(password, hash):
File "/var/task/passlib/handlers/argon2.py", line 525, in verify
cls._stub_requires_backend()
File "/var/task/passlib/utils/handlers.py", line 2221, in _stub_requires_backend
cls.set_backend()
File "/var/task/passlib/utils/handlers.py", line 2143, in set_backend
raise default_error
passlib.exc.MissingBackendError: argon2: no backends available -- recommend you install one (e.g. 'pip install argon2_cffi')
В консоли Lambda кажется, что все загружается должным образом.
В идеале я хотел бы знать, как правильно упаковать мое приложение Python для Lambda, но я также согласен с другими способами сделать argon2
или bcrypt
хеширование паролей и проверка хеширования в Lambda. Заранее спасибо за помощь!
Оказывается, я не включил все необходимые файлы при создании архива .zip, как описано здесь: https://stackoverflow.com/questions/38963857/import-error-from-cyptography-hazmat-bindings-constant-time-import-lib
В процессе отладки я создал среду Amazon Linux для установки / компиляции библиотек для максимальной совместимости с Lambda. Итак, мой процесс упаковки лямбда-функций теперь выглядит так:
yum
установить zip
, libffi-devel
, желаемая версия Python (я использовал python36
), и virtualenv
.pip
.Создайте архив .zip, включающий функцию Lambda и все пакеты сайта из виртуальной среды. Например:
zip -9 lambda.zip myfunction.py
cd venv/lib/python3.6/site-packages/
zip -r9 ../../../../lambda.zip .
cd ../../../lib64/python3.6/site-packages/
zip -r9 ../../../../lambda.zip
Загрузить lambda.zip
в AWS Lambda.