AWS Lambda部署pyodbc层时connect属性不存在问题排查
AWS Lambda + pyodbc层连接数据库报错:'connect'属性不存在
我通过Terraform部署了带有pyodbc层的Python Lambda函数,用于访问数据库。运行函数调用pyodbc.connect()时,出现错误提示**'connect'属性不存在**。虽然import pyodbc执行成功,说明Lambda能找到该模块,但连接始终失败。
层的文件夹结构
/lib /msodbcsql18 /python /python/pyodbc-5-1.0.dist-info /python/pyodbc.cpython-38-x86_64-linux-gnu.so /python/pyodbc.pyi /odbc.ini /odbcinst.ini
Lambda函数代码
import pyodbc import os import platform def lambda_handler(event, context): context.log(f"Platform: {platform.platform()}\n") for item in os.listdir("/opt"): context.log(f"ODBC Files: {item}\n") conn_str = 'DRIVER={0};SERVER={1};UID={2};PWD={3};Port={4};TrustServerCertificate=yes'.format( "{ODBC Driver 18 for SQL Server}", os.environ["server_name"], os.environ["user_name"], os.environ["password"], os.environ["ip_port"] ) try: context.log("[INFO] Attempting database connection\n") db = pyodbc.connect(conn_str) except Exception as e: context.log(f"[ERROR] Connection failed - {e}\n") return
我的排查思路
- 我认为报错指向pyodbc的
connect属性不存在,此时ODBC驱动的问题应该还没触发——如果pyodbc模块没正确加载,根本到不了加载驱动的步骤。 - Lambda平台信息为
Linux-5.10.209-218.812.amzn2.x86_64-x86_64-with-glibc2.2.5,看起来和pyodbc的二进制文件pyodbc.cpython-38-x86_64-linux-gnu.so匹配,应该不存在平台或架构兼容性问题。 - 但我不确定如何验证pyodbc二进制文件是否真的加载成功,或者加载时有没有隐藏错误。
- 我已经试了GitHub和各类博客上的多种pyodbc层,都没能解决问题。
疑问
我到底哪里出错了?关于“ODBC驱动此时无关紧要”的假设是否正确?
内容的提问来源于stack exchange,提问作者bprocket
相关产品推荐
相关产品推荐

