Решить Невозможно импортировать модуль 'lambda_function': невозможно импортировать имя '_AES' - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь развернуть свою лямбда-функцию, которая выполняет запросы и расшифровывает данные с помощью модуля Pyprypto Crypto.Cipher AES.Вот как выглядит мой импорт:

import boto3
from botocore.vendored import requests
import gzip
from io import StringIO, BytesIO
import base64
import sys
from datetime import datetime
import time
from Crypto.Cipher import AES

Я запускаю свой код в локальной среде Mac, и он отлично работает, но когда я загружаю свой пакет в AWS Lambda и тестирую его, я получаю следующую ошибку:

Unable to import module 'lambda_function': cannot import name '_AES'

Я проверил этот вопрос и загрузил пакет pycrypto из этого репозитория git, сделал сборку и скопировал результаты в мою папку lambda, упаковал ее и все еще не работал.

Я проверил результат сборки и заметил, что в этой папке:

pycrypto-2.6.1/build/lib.linux-x86_64-3.7/Crypto/Cipher

Файлы AES создаются с расширением, связанным с моей Mac OS

Mac Cipher files

Я попытался собрать пакет на экземпляре Linux EC2, но все равно получаю ту же ошибку (хотя файлы меняются)

Linux Cipher Files

Я попробовал новый путь, основанный на следующем вопросе, но все равно не смог с той же ошибкой.

"errorMessage": "Невозможно импортировать модуль 'lambda_function'"

Почему AWS Lambda не может прочитатьМодуль AES в пакете pycrypto?Я развернул функцию Lambda с другими внешними библиотеками и никогда не сталкивался с этой проблемой.

1 Ответ

0 голосов
/ 28 июня 2019

Теперь это работает для меня с использованием python2 :

https://www.github.com/Doerge/awslambda-pycrypto

Я только что скачал этот проект и сжал мой файл lambda_function.py с обоимиПапки Crypto и pycrypto-2.6.1.dist-info.

Я вижу, что скомпилированные файлы .so в Crypto/Cipher/ (например, _AES.so) не имеют версии Python и архитектуры и дистрибутива ОС, которые были у меня (то есть: AES.cpython-27m-x86_64-linux-gnu.so).Я обновлю свой ответ, если найду способ собрать пакет самостоятельно, а не использовать скомпилированную библиотеку от третьего лица.

...