【问题标题】:How to set TLS for a RDS proxy with SQLAlchemy如何使用 SQLAlchemy 为 RDS 代理设置 TLS
【发布时间】: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

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

基于这两点,我以两种不同的方式尝试了 (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


    【解决方案1】:

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

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

    【讨论】:

    • 你是如何指定连接应该使用 TLS 的?
    猜你喜欢
    • 2015-07-22
    • 2016-06-12
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2021-12-15
    • 2012-06-28
    • 2021-05-02
    • 2022-01-15
    相关资源
    最近更新 更多