【发布时间】:2020-09-30 11:54:57
【问题描述】:
我有一个 AWS Lambda 函数 (Python3.8),我正在尝试使用 SQLAlchemy 连接到 RDS 代理。我已经确认功能配置将通过使用 PyMySQL 直接连接到代理来实现这一点。当我运行该函数时,我收到一条错误消息“(pymysql.err.InternalError)(3159,'此RDS代理需要TLS连接')\n(此错误的背景:http://sqlalche.me/e/2j85)”。该错误的“背景”没有说明 TLS。我了解我需要做什么(告诉 SQLAlchemy 使用 SSL/TLS 进行连接),但我无法弄清楚这样做的语法。以下是我当前的代码。
import pymysql
import sqlalchemy
from database_info import make_connection_str
print('connecting to database')
CONN_STR = make_connection_str()
ENGINE = sqlalchemy.create_engine(CONN_STR)
METADATA = sqlalchemy.MetaData(ENGINE)
TABLE = sqlalchemy.Table('active_prospect', METADATA, autoload=True) #error comes with this line
我尝试过的事情与以下有关
- 根据https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html
ssl-mode=REQUIRED是需要的。 -
pymysql.connect(... ssl={"true": True})有效。
基于这两点,我以两种不同的方式尝试了 (ssl-mode, ssl) = ('true', 'required') 的每种组合。
CONN_STR += '?ssl-mode=REQUIRED'create_engine(CONN_STR, connect_args={'ssl': 'True'})
结果各不相同。在某些情况下,上面的错误已被 AttributeError: 'str' object has no attribute 'get' 替换,仍然从同一行引发。
【问题讨论】:
标签: mysql aws-lambda sqlalchemy amazon-rds python-3.8