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

Ada*_*dam 6 mysql sqlalchemy amazon-rds aws-lambda python-3.8

我有一个 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
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情与以下内容有关

基于这两件事,我以两种不同的方式尝试了 (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',但仍然从同一行引发。

小智 -2

当我尝试使用 lambda 的 RDS 代理连接到 RDS 时,我遇到了同样的问题。已修复

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