AWS Lambda函数用Python连接到SQL Server

Emi*_*uez 3 python sql-server amazon-web-services aws-lambda

我一直试图使用AWS Lambda函数连接到SQL 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
Run Code Online (Sandbox Code Playgroud)

我已经涉及的常见问题: - 我在zip中添加项目内容,而不是文件夹. - 我还在zip文件中添加了代码运行所需的库.

如果我尝试使用pyodbc,我上传的zip看起来像这样:

.idea (dir)
pyodbc (dir)
lambda_function.py
pyodbc.pyd
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Unable to import module 'lambda_function': No module named pyodbc
Run Code Online (Sandbox Code Playgroud)

经过一段时间的搜索,我找不到任何有用的东西.只有一条评论认为pyodbc需要在linux环境中进行调整才能使lambda函数正常工作.但我没有可用的环境,我也不知道是否会解决这个问题.

如果我尝试使用pypyodbc,我上传的zip看起来像这样:

图片

我得到的错误:

module initialization error: 'ODBC Library is not found. Is LD_LIBRARY_PATH set?'
Run Code Online (Sandbox Code Playgroud)

对于这个我试图安装其他stackoverflow帖子(python-pyodb,unixodbc)建议的多个python包,但我每次都失败了.

然后有一条评论说"确保将本机ODBC库放在zip部署包中的lib文件夹下"

也许这是一些帮助?我不知道如何获取本机ODBC库..

哦,还有最后一件事.如果我从本地计算机运行它们,两个库都可以工作.我可以访问目标服务器.如果我从lambda函数中执行它会失败.

希望有人可以帮助我,显然,整个互联网.

Max*_*isi 6

  • 你需要知道Lambda在本地/ var/task /中复制你的函数
  • 使用Lambda官方AMI创建实例 https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
  • 启动实例,登录
  • yum install gcc gcc-c++
  • 进入/ home/ec2-user
  • 以下网址下载最后一个unixodbc管理器:ftp://ftp.unixodbc.org/pub/unixODBC/
  • wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.5.tar.gz
  • tar xvzf unixODBC-2.3.5.tar.gz
  • cd unixODBC-2.3.5
  • 使用正确的sysconfdir值配置它

    ./configure --sysconfdir=/var/task --disable-gui --disable-drivers --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE --prefix=/home

  • make install
  • 转到/ home目录并复制bin,include,lib,共享Lambda项目所在计算机上的目录(例如:C:\ AWS\Lambda\sql_query)
  • 在您的EC2实例上安装Microsoft驱动程序libmsodbcsql-13.1.so.9.1,然后在PC本地目录中复制驱动程序文件(例如:C:\ AWS\Lambda\sql_query\msodbcsql\msodbcsql\lib64)
  • 看看 https://blogs.msdn.microsoft.com/sqlnativeclient/2017/02/04/odbc-driver-13-1-for-linux-released/
  • 在您的计算机上,在同一根目录中创建文件odbcinst.ini

[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.ini

    [ODBC Driver 13 for SQL Server] Driver = ODBC Driver 13 for SQL Server Description = My ODBC Driver 13 for SQL Server Trace = No

  • 在你的python程序上使用pyodbc:

    import 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....

  • 现在玩游戏!