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
To connect to Amazon RDS Oracle DB we need a client software. In this case we use Sql Developer. Install it using the link SQL Developer . After it is successfully installed we follow the steps below to connect it to the Amazon RDS.
After the connection is configured, you can connect to your private RDS DB instance using an SSH tunnel.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With