gist.github.com/carlochess/658a98589709f46dbb3d20502e48556b

трял, пытаясь подключиться к SQL Server, используя функции AWS Lambda в течение длительного времени.

Для этого я пытаюсь использовать любую библиотеку (пробовал с 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Почтовый индекс, который я загружаю, выглядит так:

.idea (dir)
pyodbc (dir)
lambda_function.py
pyodbc.pyd

Ошибка, которую я получаю:

Unable to import module 'lambda_function': No module named pyodbc

После долгих поисков по этому поводу я не смог найти ничего, что могло бы помочь. Только один комментарий, в котором говорилось, что pyodbc необходимо установить в среде linux, чтобы лямбда-функция работала. Но у меня нет этой окружающей среды, также я не знаю, исправит ли это это.

Если я попытаюсь использовать pypyodbcПочтовый индекс, который я загружаю, выглядит так:

Ошибка, которую я получаю:

module initialization error: 'ODBC Library is not found. Is LD_LIBRARY_PATH set?'

Для этого я попытался установить несколько пакетов python, предложенных другими сообщениями stackoverflow (python-pyodb, unixodbc), но каждый раз мне не удавалось.

Затем был один комментарий, в котором говорилось: «Обязательно поместите собственные библиотеки ODBC в папку lib в вашем пакете развертывания zip»

Может быть, это какая-то помощь? Я не знаю, как получить родные библиотеки ODBC ..

Ох, и последнее. Обе библиотеки работают, если я запускаю их с моей локальной машины. Я могу получить доступ к целевому серверу. Это не удается, если я делаю это из лямбда-функции.

Надеюсь, кто-то может помочь мне и, видимо, весь интернет с этим.

 Joshua Kemmerer14 мар. 2018 г., 18:00
@ EmilianoRodriguez У меня та же проблема. Является ли комментарий Усмана Азхара действительно тем, к чему вы прибегали, или есть лучший способ сделать это?
 Emiliano Rodriguez07 дек. 2017 г., 02:53
Я посмотрю, смогу ли я попробовать это. Это единственный подход, который у меня остался, но я пытался избежать этого .. Спасибо, Усман.
 Emiliano Rodriguez19 мар. 2018 г., 17:26
Я был в проекте, тестирующем эту функциональность, но мы прекратили попытки реализовать этот метод и перешли к другим вещам. Если я правильно помню, я застрял, пытаясь собрать пакет для загрузки, но не смог этого добиться. Моя лучшая попытка состояла в том, чтобы собрать пакет на машине с Linux. В этом разделе есть новый комментарий от нескольких дней назад, возможно, вам стоит проверить его, чтобы увидеть, поможет ли это.
 Usman Azhar06 дек. 2017 г., 22:47
Вы можете создать экземпляр ec2, создать виртуальную среду, установить все ваши зависимости и сжать их. и попробуйте использовать этот zip-файл для установки.

Ответы на вопрос(1)

вам нужно знать, что лямбда копирует вашу функцию в локальный / var / task /создать экземпляр, используя официальный AMI Lambdahttps://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.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=/home

make installПерейдите в / home dir и скопируйте каталог bin, include, lib, share на ваш компьютер, где находится проект Lambda (например: C: \ AWS \ Lambda \ sql_query)установите на своем экземпляре EC2 драйвер Microsoft libmsodbcsql-13.1.so.9.1, а затем скопируйте файл драйвера в локальный каталог своего ПК (например, 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....

а теперь играй в игру!

 Carlochess03 сент. 2018 г., 05:55
Эй, вы можете следовать этим инструкциямgist.github.com/carlochess/658a98589709f46dbb3d20502e48556b
 unixeO28 авг. 2018 г., 23:18
@maxmonterumisi, у тебя есть код в репо? Я следовал инструкциям, но не работал. Не могли бы вы поделиться структурой? Спасибо
 Emiliano Rodriguez19 мар. 2018 г., 17:28
Спасибо, что нашли время, Макс, я больше не работаю над этим, но наверняка найдутся люди, которые найдут эту помощь.

Ваш ответ на вопрос