J'ai un problème pour importer le argon2-cffi
module python (version 20.1.0) d'une couche AWS Lambda dans une fonction AWS Lambda.
Cela semble s'appliquer à tous les paquets qui ont C comme base, car j'ai testé cela avec pandas
et a obtenu les mêmes résultats.
Ma configuration cloudformation pour la couche est la suivante :
MyLib:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: my-lib
Description: In-house and 3rd party dependencies for my app.
ContentUri: lambdas/lib/.
CompatibleRuntimes:
- python3.8
et la structure des dossiers à l'intérieur de /lib
est la suivante :
lib
python
app
...
lib/python3.8/site-packages
argon2
...
argon2_cffi-20.1.0.dist-info
...
...
stdnum
...
requirements.txt
conformément à recommandations de l'AWS où le dossier python/app
contient ma bibliothèque personnalisée et le dossier python/lib/python3.8/site-packages
contient des paquets de tiers.
Je le sais car argon2 dépend du code C, il doit être installé sur l'environnement d'exécution dans lequel la fonction Lambda qui l'utilise sera hébergée. J'utilise donc une image docker fournie par AWS pour installer les paquets dans lib/python3.8/site-packages
en utilisant la commande
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
La fonction lambda que j'essaie d'exécuter est configurée dans le modèle de cloudformation comme suit
AuthorizerFunction:
Type: 'AWS::Serverless::Function'
Properties:
CodeUri: lambdas/handlers
Handler: authorizer.handler
Runtime: python3.8
...
Layers:
- !Ref MyLib
et commence par ces importations :
# authorizer.py
import app.utils as utils
import stdnum
from argon2 import PasswordHasher
Mais lorsque j'essaie de l'exécuter, j'obtiens l'erreur suivante
[ERROR] Runtime.ImportModuleError: Unable to import module 'authorizer': No module named 'argon2._ffi'
ce qui signifie que app
y stdnum
sont tous deux importés avec succès, mais pas argon2
.
Une idée de ce qui pourrait se passer ?
Je serais également heureux de recevoir des suggestions sur une autre bibliothèque de hachage avec un algorithme de hachage testé et éprouvé.
MISE À JOUR : Mise à jour de mon cffi
, pip
y setuptools
comme il est recommandé aquí n'a pas fait l'affaire.
MISE À JOUR 2 : Je peux voir que l'argon installé à l'aide de la commande docker est celui qui est compatible avec linux, puisque la sortie comprend ces lignes :
Collecting argon2-cffi==20.1.0
Downloading argon2_cffi-20.1.0-cp35-abi3-manylinux1_x86_64.whl (97 kB)