Как создать пакет загрузки для функции AWS Lamba для подключения к базе данных Oracle RDS? Лямбда-язык Python 3.6. Моя среда разработки - Windows NOT linux.
При попытке получить сообщение об ошибке:
DPI-1047: 64-bit Oracle Client library cannot be loaded: "libaio.so.1: cannot open shared object file: No such file or directory
Это странно, потому что, насколько я понимаю, libaio.so является частью системы amazon linux, и поэтому должна быть найдена правильная версия libaio.so.
То, что я пробовал до сих пор
Я сделал следующие шаги для сборки своего лямбда-пакета:
- Развертывание Oracle Instant Client, Basic Lite для Linux x64, версия 18.3
в каталог пакетов
/lib
- Разверните cx_Oracle.so (с сайта pypi) в каталог пакетов
/
- Сконфигурировать и развернуть tnsnames.ora в каталоге пакетов
/
- Внутри лямбды убедитесь, что переменная окружения
LD_LIBRARY_PATH
включает /lib
, а переменная окружения TNS_ADMIN
указывает на каталог /
вот фрагмент кода Python внутри лямбды для достижения этого:
oraclePath = os.environ['LAMBDA_TASK_ROOT'] + '/lib'
if oraclePath not in os.environ['LD_LIBRARY_PATH'].split(':'):
os.environ['LD_LIBRARY_PATH'] = oraclePath + ':' + os.environ['LD_LIBRARY_PATH']
if ('TNS_ADMIN' not in os.environ) or (os.environ['TNS_ADMIN'] != os.environ['LAMBDA_TASK_ROOT']):
os.environ['TNS_ADMIN'] = os.environ['LAMBDA_TASK_ROOT']
- В каталоге lib перезаписать-скопировать
libclntsh.so.18.1
в libclntsh.so
. Аналогично для libocci.so
и libclntshcore.so
Решения от других, которые не работают для меня
Вот два аналогичных ТА вопроса с ответами, которые не сработали для меня или не применимы к моей ситуации:
AWS Lambda не может подключиться к Oracle Instant Client
Решение Павла сделано в шаге 5 выше.
AWS Python Lambda с Oracle
Решение Томаса мне не помогает в моей ситуации. Это команды Linux. Мне нужно решение для Windows.
Альтернативный подход
Возможно, мне нужно спросить: как разработчик Windows приобретает правильную версию libaio.so.1 для среды Amazon Linux Lambda и где этот файл должен быть помещен в пакет lambda? Любое решение, которое включает команды bash, не поможет.