AWS Lambda 数据库连接适用于 PyMySQL,但不适用于 SQLAlchemy

问题描述 投票:0回答:1

我正在尝试使用 Lambda 函数连接到 MySQL RDS 数据库。我已通过 SAM 调用在本地对此进行了测试,并且它有效。我现在在 AWS Lambda 控制台上测试它,但它不起作用。 我无法使用 PyMYSQL 引擎使用 SQLAlchemy 进行连接,但可以使用 PyMYSQL 库进行连接。

我通过以下方式生成我的database_token:

database_token = rds_client.generate_db_auth_token(
    DBHostname=os.environ["DB_HOST"],
    Port=3306,
    DBUsername=os.environ["DB_USER"],
    Region=os.environ["AWS_REGION"],
)

然后我可以使用以下命令通过 PyMySQl 连接到数据库:

database_connection = pymysql.connect(
    host=os.environ["DB_HOST"],
    port=3306,
    database=os.environ["DB_NAME"],
    user=os.environ["DB_USER"],
    password=database_token,
    ssl={"any_non_empty_dict": True},
)

但是当我使用 SQLAlchemy 使用此代码块时:

DB_URL = f"mysql+pymysql://{os.environ['DB_USER']}:{database_token}@{os.environ['DB_HOST']}:3306/{os.environ['DB_NAME']}"
engine = create_engine(DB_URL, connect_args = {'ssl':{"any_non_empty_dict": True}}, echo=True)
database_connection = engine.connect()

我返回此错误:

(pymysql.err.OperationalError) (1045, "Access denied for user 'DB_USER'@'***.***.***.***' (using password: NO)")

使用 SQLAlchemy 时 PyMYSQl 引擎的配置是否有差异。

amazon-web-services lambda sqlalchemy proxy pymysql
1个回答
0
投票

我认为密码和用户名需要进行 url 编码,不确定用户名,但我可以确认密码需要从此问题进行编码。

© www.soinside.com 2019 - 2024. All rights reserved.