无法使用 PyODBC 和 AWS Lambda 连接 RDS SQL 服务器

Unable to connect with RDS SQL Server using PyODBC & AWS Lambda

我编写了以下 python 脚本,我尝试使用 PyODBC-

连接 RDS SQL 服务器
import pyodbc

def lambda_handler(event, context):
    try:
        # Establishing a connection with Database
        connection = pyodbc.connect("DRIVER={ODBC Driver 17 for SQL Server};SERVER=RDS-Server-URL-Here;DATABASE=DB-Name-Here;UID=USER-Here;PWD=Password-Here")
        cursor = connection.cursor()

    except Exception as e:
        print("Exception Details:")
        print(e)

在 AWS Lambda(Python 3.7 环境)上 运行 这个脚本之后,得到以下 error-

('HYT00', '[HYT00] [Microsoft][SQL 服务器的 ODBC 驱动程序 17] 登录超时已过期 (0) (SQLDriverConnect)')

将以下两个策略附加到 AWS Lambda-

• AWSLambdaVPCAccessExecutionRole • AmazonRDSFullAccess

由于 PyODBC 是一个外部库,我将其添加到 Lambda 层中并成功导入库。 从以下 repo 下载了必要的库- https://github.com/kuharan/Lambda-Layers/blob/master/3.7/pyodbc-layer.zip

参考以下文章- https://medium.com/analytics-vidhya/aws-lambda-python-ms-sql-server-the-easy-way-e7667d371cc5

面临类似问题的问题中提到了几个解决方案-

我已经尝试了所有这些,但 none 的解决方案有效。

任何解决方案都将不胜感激。提前致谢!

问题已解决,问题不在于 python 脚本或 PyODBC。 问题的根本原因是网络连接。我的 Lambda 函数不存在于创建 RDS 的 VPC 中。

将 Lambda 函数附加到同一个 VPC 后,建立了网络连接并且 python 脚本 运行 成功,没有任何错误。