Reputation: 764
I am trying to connect to Oracle using AWS lambda and python.
These are the step I followed. (Everything has done EC2 instance)
~/lambda/lib/
zip
files in the ~/lambda/lib/
libaio.so.1.0.1
from /lib64/
into ~/lambda/lib/
libaio.so.1.0.1
as libaio.so
in ~/lambda
cx_Oracle
in ~/lambda
index.py
script in ~lambda
`
import cx_Oracle
def handler(event, context):
message = ""
cursor = None
connection = None
try:
connection = cx_Oracle.connect("USERNAME", "PASSWORD", "DOMAIN/orcl")
cursor = connection.cursor()
cursor.execute("""QUERY""")
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 *
After running the code on AWS lambda it gives the following error.
Error while trying to retrieve text for error ORA-01804
I tried setting ENV ORACLE_HOME=/var/task and /var/task/lib but did not worked
I looked below answers but did not find help yet
Error while trying to retrieve text for error ORA-01019
Oracle with node-oracle: Error while trying to retrieve text for error ORA-01804
Upvotes: 7
Views: 5493
Reputation: 39
This post was much helpful for me to use cx_Oracle using Lambda functions. It worked as expected. Thanks for creating this post @Sayed Zainul Abideen
But i got another error from lambda stating 'cx_Oracle.DatabaseError: ORA-24454: client host name is not set'
I got it resolved by adding the below lines in my python code:
import os
with open('/tmp/HOSTALIASES', 'w') as hosts_file:
hosts_file.write('{} localhost\n'.format(os.uname()[1]))
After which i added below ENVIRONMENTAL VARIABLE to my Lambda function:
HOSTALIASES = /tmp/HOSTALIASES
Hope it helps somebody.
Please add comments if any issues relating to cx_Oracle. I would be happy to help as i struggled a lot to fix this.
Upvotes: 4
Reputation: 764
I solved this by simply zipping the files properly with the symbolic links
First I created three symbolic links (with respect to above dir structure):
ln -s ./lib/libaio.so.1.0.1 ./lib/libaio.so.1
ln -s ./lib/libaio.so.1.0.1 ./lib/libaio.so
ln -s ./lib/libaio.so.1.0.1 ./libaio.so.1.0.1
ln -s ./lib/libclntsh.so.12.1 ./lib/libclntsh.so
then i was zipping it incorretly I did it like this:
zip --symlinks -r9 ~/lamda.zip *
it worked! properly then.Hope it helps somebody.
Upvotes: 3