You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

python-oracledb在Lambda中TLS连接AWS RDS Oracle配置问题

AWS Lambda下Python oracledb通过TLS连接RDS Oracle的配置问题

我尝试使用Python oracledb库(cx_Oracle的后续替代版本)从AWS Lambda通过TLS连接RDS Oracle实例,后续可能需要配置双向TLS,但当前优先实现单向TLS即可,现寻求相关配置帮助。

已验证可正常运行的操作

  • 本地PC端可通过SQL Developer使用TLS连接RDS Oracle,仅需将AWS RDS 2019根证书导入Java Keystore,无需使用Oracle wallet。
  • Lambda Python 3.9环境下,可使用python-oracledb的thin模式建立非加密连接访问Oracle RDS。
  • 本地PC端Python环境下,可使用python-oracledb的thin模式建立非加密连接访问Oracle RDS。

已确认该问题与防火墙策略无关,AWS侧已开放对应服务端口。

测试代码

代码基础逻辑与Oracle官方提供的连接示例基本一致,如下:

import oracledb
import sys
import boto3
        
# 创建Lambda函数时,需确保正确配置LD_LIBRARY_PATH环境变量
def lambda_handler(event, context):

    ssm_parameter = boto3.client('ssm')
    
    # 非加密连接可正常运行
    # oracleDSN = "dbname.accountstring.ap-southeast-2.rds.amazonaws.com:2484/servicename"
    
    oracleDSN = '''(description= (retry_count=3)(retry_delay=1)(address=(protocol=tcps)
(port=2484)(host=dbname.accountstring.ap-southeast-2.rds.amazonaws.com))(connect_data=(service_name=servicename))
(security=(ssl_server_cert_dn="C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=dbname.accountstring.ap-southeast-2.rds.amazonaws.com")))'''

    connRds = oracledb.connect(user=database_user, password=database_password, dsn=oracleDSN)

报错信息

Lambda返回的报错信息如下(敏感内容已替换处理):

Response
{
  "errorMessage": "DPY-6005: cannot connect to database. Connection failed with \"[SSL] internal error (_ssl.c:2633)\"",
  "errorType": "OperationalError",
  "requestId": "",
  "stackTrace": [
    "  File \"/var/lang/lib/python3.9/importlib/__init__.py\", line 127, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n",
    "  File \"<frozen importlib._bootstrap>\", line 1030, in _gcd_import\n",
    "  File \"<frozen importlib._bootstrap>\", line 1007, in _find_and_load\n",
    "  File \"<frozen importlib._bootstrap>\", line 986, in _find_and_load_unlocked\n",
    "  File \"<frozen importlib._bootstrap>\", line 680, in _load_unlocked\n",
    "  File \"<frozen importlib._bootstrap_external>\", line 850, in exec_module\n",
    "  File \"<frozen importlib._bootstrap>\", line 228, in _call_with_frames_removed\n",
    "  File \"/var/task/TableDailyCount.py\", line 50, in <module>\n    connRds = oracledb.connect(user=database_user, password=database_password, dsn=oracleDSN)\n",
    "  File \"/opt/python/oracledb/connection.py\", line 1000, in connect\n    return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)\n",
    "  File \"/opt/python/oracledb/connection.py\", line 128, in __init__\n    impl.connect(params_impl)\n",
    "  File \"src/oracledb/impl/thin/connection.pyx\", line 345, in oracledb.thin_impl.ThinConnImpl.connect\n",
    "  File \"src/oracledb/impl/thin/connection.pyx\", line 163, in oracledb.thin_impl.ThinConnImpl._connect_with_params\n",
    "  File \"src/oracledb/impl/thin/connection.pyx\", line 129, in oracledb.thin_impl.ThinConnImpl._connect_with_description\n",
    "  File \"src/oracledb/impl/thin/connection.pyx\", line 247, in oracledb.thin_impl.ThinConnImpl._connect_with_address\n",
    "  File \"/opt/python/oracledb/errors.py\", line 103, in _raise_err\n    raise exc_type(_Error(message)) from cause\n"
  ]
}

已尝试的解决方案

  • 查阅了所有相关官方文档,本人具备充足技术经验,但接触Python和Oracle的时间较短。
  • 将RDS pem根证书放入部署包并作为keystore引用,未生效。
  • 参照公开的Python SSL错误修复教程(页面需免费注册后查看),将RDS CA证书导入本地Python39目录(C:\Users\Me\AppData\Roaming\Python\Python39)下三个不同的cacerts文件,未生效。
  • 检索了互联网上所有可查的相关公开资料。
  • 尝试配置wallet:先创建p12格式wallet并导入RDS证书,因oracledb官方提供的脚本无法正常运行,通过openssl将其转换为pem格式;同时也尝试直接将AWS RDS证书放入Lambda部署包,均未生效。所用证书为AWS官方文档提供的ap-southeast-2区域RDS证书包ap-southeast-2-bundle.pem。

待解决问题

  • 如何正确配置python-oracledb thin模式,在Lambda环境下实现到RDS Oracle的单向TLS连接?
  • 如何基于AWS RDS悉尼(ap-southeast-2)区域根证书生成符合oracledb要求格式的ewallet.pem文件?

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:06:27