【问题标题】:Error while connecting to SQL Server using AWS lambda使用 AWS lambda 连接到 SQL Server 时出错
【发布时间】:2021-05-23 23:36:58
【问题描述】:

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

libodbc.so.2:无法打开共享对象文件:没有这样的文件或目录:ImportErrorTraceback(最后一次调用):文件“/var/task/handler.py”,第 609 行,在 lambda_handler 中返回 LambdaHandler.lambda_handler (事件,上下文)文件“/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 返回 _bootstrap。 _gcd_import(name[level:], package, level) File "", line 994, in _gcd_import File "", line 971, in _find_and_load File "", line 955, in _find_and_load_unlocked File "", line 665, in _load_unlocked File " ",第 678 行,在 exec_module 文件中 "",第 219 行,在 _call_with_frames_removed 文件中 "/var/task/app.py",第 8 行,在
导入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 驱动程序文件吗?请帮忙

【问题讨论】:

    标签: python sql-server amazon-web-services aws-lambda pyodbc


    【解决方案1】:

    您未在 Lambda 部署包中正确包含库 libodbc.so。在 Lambda 部署中包含这样的系统二进制文件可能相当复杂。 Here's an example 这样做需要什么。

    幸运的是,有人发布了a Lambda Layer,您可以使用它来代替。

    【讨论】:

    • 谢谢。我也是一个新手,实际上当我进入 aws 界面并通过 zip 添加图层并在那里尝试它的工作时。但是当我使用 zappa 时如何添加相同的图层。因为每当我做“Zappa update dev”时。它也可以去除层。
    • @user3809411 在您的本地 Zappa 设置中,您将定义一个包含此层的 ARN 的 "layers" 设置。
    • 谢谢马克,我试试看
    【解决方案2】:

    我能够使用 Mark Suggestion 解决此问题。我们需要在 zapaa 设置文件中添加图层和其他设置。

    {
    "dev": {
        "app_function": "app.app",
        "aws_region": "ap-south-1",
        "profile_name": "default",
        "project_name": "flask-app",
        "runtime": "python3.7",
        "s3_bucket": "<Name of bucket>",
        "manage_roles": false, 
        "vpc_config": { 
            "SubnetIds": [ <list of all subnet id's>],
            "SecurityGroupIds": [ "<>" ]
        },
        "layers":["<layers arn you want to add>"]
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多