Я пытаюсь подключиться к своему 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 МБ.