Как установить соединение с базой данных Oracle из функции AWS Lambda (Python) - PullRequest
0 голосов
/ 07 ноября 2018

Как создать пакет загрузки для функции 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.

То, что я пробовал до сих пор

Я сделал следующие шаги для сборки своего лямбда-пакета:

  1. Развертывание Oracle Instant Client, Basic Lite для Linux x64, версия 18.3 в каталог пакетов /lib
  2. Разверните cx_Oracle.so (с сайта pypi) в каталог пакетов /
  3. Сконфигурировать и развернуть tnsnames.ora в каталоге пакетов /
  4. Внутри лямбды убедитесь, что переменная окружения 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']
  1. В каталоге lib перезаписать-скопировать libclntsh.so.18.1 в libclntsh.so. Аналогично для libocci.so и libclntshcore.so

Решения от других, которые не работают для меня

Вот два аналогичных ТА вопроса с ответами, которые не сработали для меня или не применимы к моей ситуации:

  1. AWS Lambda не может подключиться к Oracle Instant Client Решение Павла сделано в шаге 5 выше.

  2. AWS Python Lambda с Oracle Решение Томаса мне не помогает в моей ситуации. Это команды Linux. Мне нужно решение для Windows.

Альтернативный подход

Возможно, мне нужно спросить: как разработчик Windows приобретает правильную версию libaio.so.1 для среды Amazon Linux Lambda и где этот файл должен быть помещен в пакет lambda? Любое решение, которое включает команды bash, не поможет.

1 Ответ

0 голосов
/ 07 марта 2019

Поскольку я столкнулся с той же проблемой, вы можете найти необходимые библиотеки здесь: https://pkgs.org/download/libaio (например, пакет Arch linux)

Затем извлеките файлы из этого пакета в папку / lib вашего пакета lambda.

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