mysql - 如何使用 SQLAlchemy 为 RDS 代理设置 TLS

我有一个 AWS Lambda 函数 (Python3.8),我在其中尝试使用 SQLAlchemy 连接到 RDS 代理。我已经确认函数配置将通过直接使用 PyMySQL 连接到代理来实现这一点。当我运行该函数时,我收到错误消息“(pymysql.err.InternalError) (3159, 'This RDS Proxy requires TLS connections')\n(Background on this error at: 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',仍然从同一行引发。

最佳答案

当我尝试使用来自 lambda 的 RDS 代理连接到 RDS 时,我遇到了同样的问题。由

修复
  1. 在 lambda 配置中,您将看到“数据库代理”部分。转到“添加数据库代理”并在此处添加代理。基本上,它将修改 lambda 的 IAM 角色以连接到代理。
  2. 在 lambda 代码中,我只是将主机替换为代理端点(它在没有 SSL 参数的情况下工作)

https://stackoverflow.com/questions/63766860/

相关文章:

python - 为什么在 Python 3.x 中的循环中使用 list() 会返回内存错误?

flutter - 如何在 Flutter 中绘制尖三角形边?

python - 使用 tokenizer.encode_plus 时遇到问题

react-native - 如何使选项卡栏图标的溢出在 React Native 中可点击?

reactjs - CRA typescript环境导出类型时如何解决解析错误

post - ESP32 异步 Web 服务器 POST 方法不起作用

typescript - 数字和通用参数之间的区别

react-native - 如何在没有 Firebase 的情况下为 React Native A

react-native - 在 React Native 中访问 DOM 元素

javascript - select2 on select data-select2-id 属性添