Ошибка инициализации модуля: не удается загрузить собственный модуль 'Crypto.Cipher._raw_ecb' в AWS lambda - PullRequest
0 голосов
/ 31 января 2019

Я использую сервис AWS lambda.Я использую PyCryptodome для шифрования и дешифрования.Я могу проверить свое приложение локально, но когда я загружаю его в AWS lambda для расшифровки.Я получаю ошибку как

Ошибка инициализации модуля: Не удается загрузить собственный модуль 'Crypto.Cipher._raw_ecb': Попытка '_raw_ecb.cpython-36m-x86_64-linux-gnu.so': / var /task / Cryptodome / Util /../ Cipher / _raw_ecb.cpython-36m-x86_64-linux-gnu.so: не удается открыть общий объектный файл: нет такого файла или каталога, попробуйте '_raw_ecb.abi3.so': / var / task/Cryptodome/Util/../Cipher/_raw_ecb.abi3.so: не удается открыть файл общего объекта: нет такого файла или каталога, попробуйте '_raw_ecb.so': /var/task/Cryptodome/Util/../Cipher/_raw_ecb.so: неверный заголовок ELF

Мой код для расшифровки:

    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

Я следил за ресурсом: https://github.com/pyinstaller/pyinstaller/issues/2125,, но это мне тоже не помогло.

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

1 Ответ

0 голосов
/ 01 февраля 2019

Похоже, что ваша локальная среда разработки не совместима со средой исполнения Lambda.Собственные библиотеки, которые использует PyCryptodome, не переносимы в этих двух средах;важно, в какую env библиотеку был установлен pip.

Один из способов исправить это - использовать образ докера Lambci , чтобы собрать библиотеку, а затем добавить ее в zip-файл.Предполагая, что у вас установлен Docker, выполните

docker pull lambci/lambda:build-python3.6
docker run --rm -v `pwd`:/var/task lambci/lambda:build-python3.6 pip install pycryptodome -t pycryptodome

. Это позволит установить lib в pip-среде.После завершения команды она будет доступна в локальном каталоге pycryptodome.

Для более автоматизированного / повторяемого способа посмотрите AWS SAM и aws-sam-cli , которая дает вам очень полезные команды для создания, упаковки и развертывания ваших Lambda-приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...