SQL服务器连接在lambda容器中工作正常,但是在将zip上传到aws lambda后失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL服务器连接在lambda容器中工作正常,但是在将zip上传到aws lambda后失败相关的知识,希望对你有一定的参考价值。

我正在关注this中等博客,尝试通过lambda函数建立与MSSQL db的连接。我使用了lambci / lambda:build-python3.8镜像来构建容器。我遵循了上面提到的所有步骤,并且能够成功运行验证连接的python测试脚本。

下面是容器内zip文件的内容。

enter image description here

但是,当我将其压缩并上传到lambda时,收到以下错误消息。

START RequestId: 6f3ec44e-aac0-4cc3-b5ed-f8935c4dff4d Version: $LATEST
['bin', 'include', 'lib', 'msodbcsql', 'odbc.ini', 'odbcinst.ini', 'pyodbc.so', 'test.py']
[ERROR] Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/var/task/msodbcsql/lib64/libmsodbcsql-13.1.so.9.2' : file not found (0) (SQLDriverConnect)")
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/test.py", line 9, in <module>
    conn=pyodbc.connect("DRIVER={ODBC Driver 13 for SQL Server};SERVER=***;PORT=1433;DATABASE=***;UID=***;PWD=***")END RequestId: 6f3ec44e-aac0-4cc3-b5ed-f8935c4dff4d
REPORT RequestId: 6f3ec44e-aac0-4cc3-b5ed-f8935c4dff4d  Duration: 1583.04 ms    Billed Duration: 1600 ms    Memory Size: 128 MB Max Memory Used: 15 MB  
Unknown application error occurred

两个环境都使用python -3.8。

test.py

import sys
import logging
import pyodbc
import os

logger=logging.getLogger()
arr = os.listdir('/var/task')
print(arr)
conn=pyodbc.connect("DRIVER={ODBC Driver 13 for SQL Server};SERVER=***;PORT=1433;DATABASE=***;UID=***;PWD=***")

logger.info("SUCCESS: Connection to SQLSever succeeded")
def handler(event,context):
    item_count=0
    crsr=conn.cursor()
    rows=crsr.execute("select @@VERSION").fetchall()
    print(rows)
    logger.info(rows)
    crsr.close()
    conn.close()

odbcinst

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/var/task/msodbcsql/lib64/libmsodbcsql-13.1.so.9.2
UsageCount=1

任何人都可以帮助我进行调试。

更新

确认文件确实存在enter image description here

在下面放入python代码后,我看到该文件存在于lambda中。

arr = os.listdir('/var/task/msodbcsql/lib64')
print(arr)

enter image description here

答案

最后几天我挠头后,我得以解决。对于遇到类似问题的任何人,请按照以下步骤操作。

  1. 尝试使用python-3.7。它在7而不是8对我有用。
  2. 使用msodbcsql17代替msodbcsql
  3. 使用unixODBC 2.3.7 here
  4. 将odbc,obdcinst配置文件中的驱动程序信息更改为ODBC Driver 17 for SQL Server.

完成所有这些操作后,我就可以将其压缩并成功部署在AWS Lambda中。

希望它可以帮助某人!

以上是关于SQL服务器连接在lambda容器中工作正常,但是在将zip上传到aws lambda后失败的主要内容,如果未能解决你的问题,请参考以下文章

MQTT 连接在 Node 中工作,但不能作为 ReactJS 组件

Rest api在chrome中返回“网络连接失败”,但在firefox中工作正常

Java JDBC 连接 Integrated Security 只能在我的 Eclipse 中工作

SQL Server 查询因 RODBC 连接而失败,在 SQL Server 中工作

在 WAMP 中工作正常,但在 XAMPP 中不起作用

表条目在开发中工作正常,但在生产中没有