Я пытаюсь использовать cx_ Oracle для подключения к базе данных RDS (Oracle) из AWS лямбда-функции (python3 .7). Более того, сама функция Lambda автоматически создается из AWS CodeBuild с использованием файла buildspe c .yml. Сам CodeBuild выполняется путем настройки AWS CodePipeline таким образом, чтобы при каждом обновлении репозитория, в который я помещаю свой код (в данном случае AWS CodeCommit), он автоматически собирал материал.
Вещи, которые Я сделал: 1. У меня есть AWS лямбда-функция с кодом следующим образом.
import cx_Oracle
def lambda_handler(event, context):
dsn = cx_Oracle.makedsn('www.host.com', '1521', 'dbname')
connection = cx_Oracle.connect(user='user', password='password', dsn=dsn)
cursor = connection.cursor()
cursor.execute('select * from table_name')
return cursor
Внутри buildspe c .yml У меня есть следующие команды сборки.
version: 0.2
phases:
install:
runtime-versions:
python: 3.7
commands:
- pip install cx_Oracle -t ./ # to install cx_Oracle package in the same directory as the script
- unzip instantclient-basic-linux*.zip -d /opt/oracle # I have downloaded the zip file beforehand
<other code>
-
Я также настроил template.yml лямбда-функции следующим образом
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: Making a test lambda function using codepipeline
Resources:
funcAuthorityReceive:
Type: 'AWS::Serverless::Function'
Properties:
FunctionName: testFunction
Environment:
Variables:
PATH: '/opt/oracle/instantclient_19_5:$PATH'
LD_LIBRARY_PATH : '$LD_LIBRARY_PATH:/opt/oracle/instantclient_19_5'
Handler: lambda_function.lambda_handler
MemorySize: 128
Role: 'arn:aws:iam::XXXXXXXXXXXXXX:role/role-for-lambda
Runtime: python3.7
CodeUri: ./
Здесь все работает гладко, и сама лямбда-функция создается, но когда я запускаю лямбду, эта ошибка Появляется:
"DPI-1047: Cannot locate a 64-bit Oracle Client library: \"libclntsh.so: cannot open shared object file: No such file or directory\". See https://oracle.github.io/odpi/doc/installation.html#linux for help"
Любая помощь будет принята с благодарностью.