Je crée un service à l'aide d'AWS lambda. J'utilise PyCryptodome pour le cryptage et le décryptage. Je suis en mesure de tester mon application localement, mais lorsque je télécharge sur AWS lambda pour le déchiffrer. J'obtiens l'erreur comme
Erreur d'initialisation du module: impossible de charger le module natif 'Crypto.Cipher._raw_ecb': essai de '_raw_ecb.cpython-36m-x86_64-linux-gnu.so': /var/task/Cryptodome/Util/../Cipher/ _raw_ecb.cpython-36m-x86_64-linux-gnu.so: impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type, essai '_raw_ecb.abi3.so': /var/task/Cryptodome/Util/../Cipher/_raw_ecb .abi3.so: impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type, essai '_raw_ecb.so': /var/task/Cryptodome/Util/../Cipher/_raw_ecb.so: en-tête ELF invalide
Mon code de déchiffrement est
def blowfish_decrypt(enc): secret_key = b"somestring" iv = b"somerandomiv" logger.info("in the decrypter") crypt_obj = bf_cbc.new(secret_key, bf_cbc.MODE_CBC, IV=iv) original = crypt_obj.decrypt(base64.b64decode(enc)) original = original.decode("utf-8") logger.info("decrypted") return original
Je suivais la ressource: https://github.com/pyinstaller/pyinstaller/issues/2125 , mais cela ne m'a pas aidé non plus.
après avoir tout appliqué les détails comme spécifié J'obtiens la même erreur ci-dessus.
3 Réponses :
Il semble que votre environnement de développement local n'est pas compatible avec l'environnement d'exécution Lambda. Les bibliothèques natives utilisées par PyCryptodome ne sont pas portables dans ces deux environnements; il importe dans quel environnement la bibliothèque a été installée.
Une façon de résoudre ce problème est d'utiliser Lambci a > image docker pour créer la bibliothèque, puis l'ajouter au fichier zip. En supposant que Docker est installé, faites
docker pull lambci/lambda:build-python3.6 docker run --rm -v `pwd`:/var/task lambci/lambda:build-python3.6 pip install pycryptodome -t pycryptodome
Cela installera la lib dans l'environnement docker. Une fois la commande terminée, vous l'aurez disponible dans le répertoire local de pycryptodome.
Pour une manière plus automatisée / répétable, jetez un œil à AWS SAM et aws -sam-cli qui vous donne des commandes très utiles pour créer, empaqueter et déployer vos applications Lambda.
même si je n'ai pas pu exécuter d'autres modules à partir de python 3.6, j'ai donc dû passer à 2.7 et utiliser le lambci dans a fait mon travail grâce à Milan.
J'ai installé et exécuté cryptodome 3.9.4 sur AWS Lambda avec succès (uniquement Python 3.6).
J'ai mis le paquet dans github. Il est nécessaire de le mettre dans votre microservice.
https://github.com/grmagalhaes/python-utilities/tree / master / Crypto
Cela se produit parce que le module pycryptodome installé sur votre machine locale n'est pas compatible avec lambda. il y a donc deux façons de résoudre ce problème.
Assurez-vous de suivre les instructions ci-dessous pour créer un package de couches lambda. Importer des bibliothèques dans des couches lambda
Comment avez-vous créé la bibliothèque et comment déployez-vous votre Lambda?
J'ai enveloppé la fonction lambda et la bibliothèque requise dans un zip, puis je l'ai téléchargé sur AWS lambda. utilisé
pip install pycryptodome -t.
, pour collecter la bibliothèque dans le même dossier où réside la fonction lambda.