AWS Python Lambda与Oracle - OID生成甚至在添加HOSTALIASES后失败

时间:2018-01-09 22:13:44

标签: python oracle amazon-web-services aws-lambda cx-oracle

我正在使用 cx_oracle包使用 lambda python 连接到 rds 上的 oracle 但我明白了:

  

ORA-21561:OID生成失败:DatabaseError。

即使使用 lambda-server-name localhost添加文件 / tmp / HOSTALIASES 也是如此。还将HOSTALIASES添加到 lambda环境变量。参考:AWS Python Lambda with Oracle - OID Generation Failed

如何在 aws lambda

中解决此OID生成问题

这是我的代码

import cx_Oracle
import os
import sys
import time

# sys.path.append('lib')
# os.environ['ORACLE_SID'] = 'DEVDB'


with open('/tmp/HOSTALIASES', 'w') as hosts_file:
    hosts_file.write('{} localhost\n'.format(os.uname()[1]))

def orcl_fetch_records(event, context):
    # print (sys.path)
    # print (os.listdir(os.getcwd()))
    # print (os.environ['LD_LIBRARY_PATH'])

    # print (os.environ['ORACLE_HOME'])
    # print (sys.path)
    print (os.environ['HOSTALIASES'])
    with open('/tmp/HOSTALIASES', 'r') as hosts_file:
        print hosts_file.read()
    dsn = cx_Oracle.makedsn("aws-rds-oracle-server-name", "1521", "SID")
    print (dsn)
    conn = cx_Oracle.connect("username", "password", dsn)
    print ("Oracle DB version = " + conn.version)
    cur = conn.cursor()
    cur.execute('select * from lambda_test')
    for result in cur:
        print (result)
    cur.close()
    conn.close()

输出:

  

ORA-21561:OID生成失败:DatabaseError Traceback(最新版本   最后调用):文件" /var/task/orcl_fetch_function.py" ;,第25行,在   orcl_fetch_records conn = cx_Oracle.connect("用户名","密码",   dsn)DatabaseError:ORA-21561:OID生成失败

2 个答案:

答案 0 :(得分:0)

该错误通常是由于无法确定您的主机名。这篇文章可能有所帮助:https://osric.com/chris/accidental-developer/2015/10/connecting-to-oracle-instance-in-aws-rds/

答案 1 :(得分:0)

我遇到了同样的问题,发现HOSTALIASES机制需要有效的DNS。如果您的Lambda功能已附加VPC,则必须允许出站DNS到Amazon VPC DNS或您自己的内部DNS服务器(如果有的话)。