首页 > 解决方案 > 使用 AWS lambda 连接到 SQL Server 时出错

问题描述

我有一个在 EC2 上运行良好的烧瓶 restful API。它能够连接到 AWS SQL Server 并可以执行获取/更新。但是当我上传到 AWS lambda 时,我收到了这个错误(我正在使用 zappa 上传)。

libodbc.so.2:无法打开共享对象文件:没有这样的文件或目录:ImportErrorTraceback(最后一次调用):文件“/var/task/handler.py”,第 609 行,在 lambda_handler 返回 LambdaHandler.lambda_handler(event,上下文)文件“/var/task/handler.py”,第 240 行,在 lambda_handler handler = cls() 文件“/var/task/handler.py”,第 134 行,在init self.app_module = importlib.import_module(self .settings.APP_MODULE ) 文件“/var/lang/lib/python3.6/importlib/init.py",第 126 行,在 import_module 中 return _bootstrap._gcd_import(name[level:], package, level) 文件"",第 994 行,在 _gcd_import 文件中"",第 971 行,在 _find_and_load 文件中"",第 955 行,在_find_and_load_unlocked 文件“”,第 665 行,在 _load_unlocked 文件“”中,第 678 行,在 exec_module 文件中“”,第 219 行,在 _call_with_frames_removed 文件“/var/task/app.py”中,第 8 行,在
import pyodbc ImportError: libodbc. so.2:无法打开共享对象文件:没有这样的文件或目录

我正在使用 Python 3.6 并将 pyodbc 安装在我的虚拟环境中,并且它在 EC2 中工作正常

我的连接字符串是这样的:

app = Flask(__name__)

details = {
'server' : '*********ap-south-1.rds.amazonaws.com',
'database' : '*******',
'username' : '*****',
'password' : '*****'
}
params='DRIVER={{ODBC Driver 13 for SQL Server}};SERVER={server};PORT=1443; DATABASE={database};UID={username};PWD={password}'.format(**details)
params = urllib.parse.quote_plus(params)
app.config['SQLALCHEMY_DATABASE_URI'] = "mssql+pyodbc:///?odbc_connect=%s" % params

#######################
db = SQLAlchemy(app)

是否有任何依赖项,例如我需要放置的 ODBC 驱动程序文件?请帮忙

标签: pythonsql-serveramazon-web-servicesaws-lambdapyodbc

解决方案


libodbc.so您未在 Lambda 部署包中正确包含该库。在您的 Lambda 部署中包含这样的系统二进制文件可能相当复杂。这是执行此操作所需的示例

幸运的是,有人发布了一个您可以使用的 Lambda 层。


推荐阅读