Краткий ответ :
Используемая вами библиотека cx_Oracle предназначена для Windows.Aws Lambda: Amazon Linux , * .pyd - библиотеки Python для Windows.
Длинный ответ : вам нужно развернуть версию linux Первое, что вы получаетенеправильно - это библиотека python, которую вы предоставляете вместе со своим кодом в AWS Lambda.Я предполагаю, что вы разрабатываете локально на компьютере с Windows, поэтому, когда вы делаете:
pip install cx_Oracle -t ./
, вы получаете скомпилированную библиотеку Python для Windows, которая является cx_Oracle.cp36-win_amd64.pyd .AWS Lambdas работают в контейнерах Linux.Вы можете найти некоторую информацию об окружающей среде здесь .Предварительно скомпилированная библиотека для Linux: cx_Oracle.cpython-36m-x86_64-linux-gnu.so .Вы можете загрузить его вручную из репозитория Pypi .
Так что при выполнении сценария Python в среде Linux он попытается найти предварительно скомпилированную версию библиотеки Linux по текущему пути,файл cx_Oracle.cpython-36m-x86_64-linux-gnu.so .Вот почему вы получаете сообщение об ошибке:
Unable to import module 'lambda_handler': No module named 'cx_Oracle'
Вторым важным моментом здесь является то, что библиотека Python cx_Oracle вызывает Oracle Instant Client , который является нативной библиотекой.Если у вас есть рабочий пример на вашем компьютере с Windows, вы должны установить его.Для окон эта библиотека имеет вид .dll-файлов.Для linux эта нативная библиотека имеет вид .so файлов.Вам нужно будет предоставить клиент Oracle для Linux вместе с вашим кодом в пакете развертывания, поскольку он еще не доступен в среде Amazon Linux.
И последнее, что нужно сказать Pythonкак найти эту динамическую библиотеку.В системах Linux общие библиотеки ищутся в каталогах, присутствующих в этой переменной среды LD_LIBRARY_PATH .В Amazon Linux эта переменная содержит:
LD_LIBRARY_PATH:/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib
Каталог /var/task
, в котором находится ваше развертывание.Так что, если вы добавите мгновенный клиент Oracle для Linux под /var/task/lib
, что составляет ./lib
в каталоге разработки, все готово.
Ваш пакет развертывания должен быть похож на это:
├── lib
│ ├── libclntsh.so <-- Oracle instant client linux files
│ .
│ .
│ .
├── python_handler.py <-- Lambda function code
└── cx_Oracle.cpython-36m-x86_64-linux-gnu.so <-- cx_Oracle library