Как установить соединение с базой данных Oracle из функции AWS Lambda (Python)

1

Как создать пакет загрузки для функции AWS Lamba для подключения к базе данных Oracle RDS? Лямбда-язык Python 3.6. Моя среда разработки - Windows НЕ 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

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

Вот два похожих SO вопроса с ответами, которые не спомогли мне или не применимы к моей ситуации:

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

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

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

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

  • 0
    вы пробовали apt-get install libaio-dev ?
Теги:
aws-lambda

1 ответ

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню