无法使用 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
面临类似问题的问题中提到了几个解决方案-
- 尝试使用服务器的IP
- 添加端口号
- 添加超时
我已经尝试了所有这些,但 none 的解决方案有效。
任何解决方案都将不胜感激。提前致谢!
问题已解决,问题不在于 python 脚本或 PyODBC。
问题的根本原因是网络连接。我的 Lambda 函数不存在于创建 RDS 的 VPC 中。
将 Lambda 函数附加到同一个 VPC 后,建立了网络连接并且 python 脚本 运行 成功,没有任何错误。
我编写了以下 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
面临类似问题的问题中提到了几个解决方案-
- 尝试使用服务器的IP
- 添加端口号
- 添加超时
我已经尝试了所有这些,但 none 的解决方案有效。
任何解决方案都将不胜感激。提前致谢!
问题已解决,问题不在于 python 脚本或 PyODBC。 问题的根本原因是网络连接。我的 Lambda 函数不存在于创建 RDS 的 VPC 中。
将 Lambda 函数附加到同一个 VPC 后,建立了网络连接并且 python 脚本 运行 成功,没有任何错误。