Empacotamento em Python (passlib, argon2) para o AWS Lambda

1

Estou tentando criar uma função Python para o AWS Lambda que use a biblioteca passlib para hashing de senha com argon2 . Para isso, estou usando pip para instalar os seguintes pacotes em um diretório local, compactando-os com o arquivo Python e fazendo o upload para o Lambda:

passlib==1.7.1
argon2-cffi==18.1.0
cffi==1.11.5
pycparser==2.18
six==1.11.0

Esses pacotes são suficientes para permitir que eu use argon2 a passlib no meu ambiente local do Ubuntu. No entanto, continuo recebendo o seguinte erro ao testar no 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')

No console do Lambda, parece que tudo está sendo enviado conforme o esperado.

Idealmente gostaria de saber como empacotar corretamente meu aplicativo Python para o Lambda, mas também aceitaria outras formas de fazer argon2 ou bcrypt hashing de senha e verificação de hash no Lambda. Agradecemos antecipadamente por toda ajuda!

    
por cwh 08.05.2018 / 18:49

1 resposta

0

Acontece que eu não estava incluindo todos os arquivos necessários ao criar meu arquivo .zip, conforme descrito aqui: link

No processo de depuração, criei um ambiente Amazon Linux para instalar / compilar bibliotecas para máxima compatibilidade com o Lambda. Então, meu processo para empacotar as funções do Lambda agora se parece com isto:

  1. Acione um ambiente do Amazon Linux (por exemplo, o Docker).
  2. Use yum para instalar zip , libffi-devel , a versão desejada do Python (usei python36 ) e virtualenv .
  3. Crie e ative um ambiente virtual. Instale todos os pacotes do Python com pip .
  4. Crie um arquivo .zip, incluindo a função Lambda e todos os pacotes de site do ambiente virtual. Por exemplo:

    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
    
  5. Carregue lambda.zip para o AWS Lambda.

por 09.05.2018 / 17:40