很长一段时间以来,我一直试图使用AWS函数连接到Server。
为此,我尝试使用任何库(尝试使用pyodbc、pypyodbc等),将所有内容打包到一个zip文件中并上传代码。
每个库的代码都是相同的,但是错误是不同的。
守则:
import pypyodbc
def lambda_handler(event, context):
conn = pypyodbc.connect('DRIVER={SQL Server};'
'SERVER=1.1.1.1;'
'DATABASE=dbname;'
'UID=user;'
'PWD=pwd')
cur = conn.cursor()
cur.execute("SELECT * FROM Table")
item_count = 0
for row in cur:
item_count += 1
print(item_count)
cur.close()
conn.close()
return item_count我已经讨论过的一些常见问题:-我正在向zip中添加项目内容,而不是文件夹。-我还将代码运行所需的库添加到zip文件中。
如果我尝试使用pyodbc,我要上传的zip如下所示:
.idea (dir)
pyodbc (dir)
lambda_function.py
pyodbc.pyd我所犯的错误:
Unable to import module 'lambda_function': No module named pyodbc在寻找了很长一段时间之后,我找不到任何有用的东西。只需要在linux环境中安装pyodbc才能使lambda函数工作。但是我没有那个环境,我也不知道这是否能解决这个问题。
如果我尝试使用pypyodbc,我要上传的zip如下所示:

我所犯的错误:
module initialization error: 'ODBC Library is not found. Is LD_LIBRARY_PATH set?'对于这一次,我尝试安装由其他堆栈溢出帖子( python,unixodbc)建议的多个python包,但每次都失败了。
然后有一条评论说:“确保将本地ODBC库放在zip部署包的lib文件夹下”。
也许这能帮上忙?我不知道如何获得本地ODBC库。
还有最后一件事。如果我从本地机器运行这两个库,这两个库都可以工作。我可以访问目标服务器。如果我从lambda函数执行它,它就会失败。
希望有人能帮到我,很显然,整个互联网都能帮到我。
发布于 2018-03-15 08:56:51
yum install gcc gcc-c++wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.5.tar.gztar xvzf unixODBC-2.3.5.tar.gzcd unixODBC-2.3.5./configure --sysconfdir=/var/task --disable-gui --disable-drivers --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE --prefix=/homemake install[ODBC Driver 13 for SQL Server] Description=Microsoft ODBC Driver 13 for SQL Server Driver=/var/task/msodbcsql/msodbcsql/lib64/libmsodbcsql-13.1.so.9.1 UsageCount=1
[ODBC Driver 13 for SQL Server] Driver = ODBC Driver 13 for SQL Server Description = My ODBC Driver 13 for SQL Server Trace = Noimport pyodbc def lambda_handler(event, context): server = "xxxxxxxxxxxxxxxxxxxx" database = "xxxxxxxxxxxxxxxxxxxx" username = "xxxxxxxxxxxxxxxxxxxx" password = "xxxxxxxxxxxxxxxxxxxx" cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password) cursor = cnxn.cursor() ...other things....发布于 2022-06-14 12:43:03
这里有一个使用Docker和Lambda层的Python3.9解决方案。
见这是吉顿的评论。
根据:
DockerfileDockerfile文件,以支持编译RUN yum -y update RUN -y groupinstall # Get unixODBC并安装它,运行yum -y install gzip运行curl运行curl xvzf unixODBC-2.3.11.tar.gz WORKDIR /Dockerfile/unixODBC-2.3.11运行。sysconfdir=/opt/python -禁用-gui-禁用-驱动程序-启用-iconv char-enc=UTF8 8-with-iconv ucode-enc=uTF16LE-前缀= /root /unixODBC-安装使安装运行mv /root/unixODBC/ install /bin /opt/bin运行mv /root/unixODBC安装/lib /opt/lib WORKDIR /root# install msodbcsql curl https://packages.microsoft.com/config/rhel/7/prod.repo >/etc/yumre.d/mssql-reasrepe.run yum -y e2fsprogs e2fsprogs ACCEPT_EULA=Y yum -y安装msodbcsql mssql-tools -disablerepo=amzn*运行rm -r /opt/microsoft/msodbcsql # install pyodbc #必需" unixODBC-devel“,以避免"src/pyodbc.h:56:10:致命错误: sql.h:没有这样的文件或目录”在pip安装期间运行yum -y -y unixODBC-devel-y/msodbcsql 17/包括“运行导出LDFLAGS=”-L/opt/microsoft/msodbcsql17/“运行pip安装pyodbc==4.0.32 adodbapi==2.6.2.0 pyDes==2.0.1 --升级-升级”-target /opt/python #添加一个requirements.txt文件并使本节能够安装其他(非requirements.txt服务器)数据--加载要求#复制requirements.txt/tmp/Requiments.txt#运行pip安装-requirement/tmp/requments.txt-target /opt/python # Create odbc.ini和odbcinst.ini运行echo $‘ODBCDriver17用于Server\nDriver =驱动程序17用于Server\nDescription = My驱动程序17 for Server\nTrace = No’>/opt/pyodbc.ini运行so_file=$(ls /opt/odbc.ini)/opt /**/ zip 64/libmsodbcsql-*..so.* grep msodbcsql17) & echo $'ODBC驱动程序17用于Server\n nDescription= Microsoft驱动程序17用于Server\nDriver =“$so_file”$‘\nUsageCount= 1’> /opt/python/odbcinst.ini #生成可以上传为Lambda层WORKDIR /opt RUN -r /layer.zip的压缩文件。/tmp/layer.zip 从你的电脑到AWS上传为Lambda层。发布于 2022-09-16 19:41:12
我认为您的问题是在没有文档中指定的适当文件夹结构的情况下上传该层。
https://stackoverflow.com/questions/47682991
复制相似问题