SQL 服务器连接在 lambda 容器中工作正常,但在将 zip 上传到 aws lambda 后失败
SQL server connection works fine from lambda container but fails after uploading zip to aws lambda
我正在关注 this 中型博客以尝试从 lambda 函数建立到 MSSQL 数据库的连接。我使用 lambci/lambda:build-python3.8 图像来构建容器。我遵循了所有提到的步骤,并且能够成功 运行 验证连接的 python 测试脚本。
以下是容器内压缩文件的内容。
但是,当我将其压缩并上传到 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
谁能帮我调试一下。
更新
确认文件确实存在
在 python 代码中放入下面后,我看到该文件存在于 lambda 中。
arr = os.listdir('/var/task/msodbcsql/lib64')
print(arr)
经过几天的摸索,我终于解决了这个问题。对于遇到类似问题的任何人,请按照以下步骤操作。
- 试试 python - 3.7。它在 7 对我有效,而在 8 无效。
- 使用 msodbcsql17 而不是 msodbcsql
- 使用 unixODBC 2.3.7 here
- 将 odbc、obdcinst 配置文件中的驱动程序信息更改为
ODBC Driver 17 for SQL Server.
完成所有这些后,我能够将其压缩并成功部署到 aws lambda 中。
希望对大家有所帮助!!
任何想要下载图层 zip 文件的人,
我可以确认它仅在 python3.7 中有效,在 python3.8 中无效。您可以找到详细信息和 layer zip file in this thread .
如果您正在寻找 python3.8 lambda 层,请检查此 repo.
我正在关注 this 中型博客以尝试从 lambda 函数建立到 MSSQL 数据库的连接。我使用 lambci/lambda:build-python3.8 图像来构建容器。我遵循了所有提到的步骤,并且能够成功 运行 验证连接的 python 测试脚本。
以下是容器内压缩文件的内容。
但是,当我将其压缩并上传到 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
谁能帮我调试一下。
更新
确认文件确实存在
在 python 代码中放入下面后,我看到该文件存在于 lambda 中。
arr = os.listdir('/var/task/msodbcsql/lib64')
print(arr)
经过几天的摸索,我终于解决了这个问题。对于遇到类似问题的任何人,请按照以下步骤操作。
- 试试 python - 3.7。它在 7 对我有效,而在 8 无效。
- 使用 msodbcsql17 而不是 msodbcsql
- 使用 unixODBC 2.3.7 here
- 将 odbc、obdcinst 配置文件中的驱动程序信息更改为
ODBC Driver 17 for SQL Server.
完成所有这些后,我能够将其压缩并成功部署到 aws lambda 中。
希望对大家有所帮助!!
任何想要下载图层 zip 文件的人, 我可以确认它仅在 python3.7 中有效,在 python3.8 中无效。您可以找到详细信息和 layer zip file in this thread .
如果您正在寻找 python3.8 lambda 层,请检查此 repo.