python - 使用 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 驱动程序文件?请帮忙
解决方案
libodbc.so
您未在 Lambda 部署包中正确包含该库。在您的 Lambda 部署中包含这样的系统二进制文件可能相当复杂。这是执行此操作所需的示例。
幸运的是,有人发布了一个您可以使用的 Lambda 层。
推荐阅读
- database - Oracle impdp 将一个模式重新映射到多个模式失败,“参数值无效,'remap_schema”
- javascript - 从头开始的自定义排序方法需要一个比较器?
- python - 获取被脚本标签包围的json,在python中使用bs4
- ssas - SSAS 多维数据集 - 度量和维度的排序
- github - 如何为组织制作 github 页面
- ruby-on-rails - Heroku 上的 Rails - 没有记录错误,在本地工作,但没有来自网络的响应
- html - Vivino - 用 R 刮擦
- python - Pandas 多索引 .isin ALL 索引列
- symfony - Symfony + API 平台:当 POST 数据具有意外(例如输入错误)属性时,有没有办法抛出错误?
- http - Firebase 托管将 http 重定向到自定义域中的 https