Подключение к Oracle RDS из лямбда-функции в AWS - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь подключиться к своему RDS на основе движка Oracle из лямбда-функции и выполнить простые запросы на выборку. Я сделал следующее:

  • Скачанные instantclient-sdk-linux.x64-18.3.0.0.0dbru.zip и instantclient-basic-linux.x64-18.3.0.0.0dbru.zip
  • Создана структура папок ~/lambda/lib
  • Извлеченные zip-файлы в папке lib, сохраняющие структуру каталогов zip-файлов (я не уверен, что это правильный способ сделать это.)
  • Загрузил файл libaio1_0.3.110-5_amd64.deb и извлек его, чтобы найти два файла .xz, извлек их тоже и получил файлы libaio.so.1 и libaio.so.1.0.1.
  • Скопировано libaio.so.1 оттуда в ~/lambda/lib
  • Создана символическая ссылка libaio.so.1 как libaio.so в ~/lambda с использованием ln -s libaio.so.1.0.1 libaio.so (но libaio.so при открытии пишет, что ссылка не работает, libaio.so.1.0.1 не существует)
  • Установлено cx_Oracle с использованием pip in ~/lambda (pip install cx_Oracle -t .)
  • Лямбда-функция с именем index.py (хранится в ~/lambda) выглядит следующим образом:

    import os import json import cx_Oracle def handler(event, context): message = "" cursor = None connection = None<br> try: connection = cx_Oracle.connect("username", "password", "endpoint_of_rds_instance:port_no/ORCL") cursor = connection.cursor() cursor.execute("SELECT LOGIN-ID from USER_INFO where USER_ID=3972") except Exception as e: message += " {Error in connection} " + str(e) finally: if cursor: cursor.close() if connection: connection.close() return {'message' : message}

  • Застегнул его используя zip -r9 ~/upload.zip *

  • Невозможно напрямую загрузить zip-архив, поскольку ограничение размера файла составляет 10 МБ, а размер этого zip-файла - 96 МБ. При использовании S3 он сообщает, что превышен предел размера разархивированного файла, так как размер моей лямбда-папки превышает 200 МБ.

...