SQL серверное соединение работает нормально из контейнера лямбда, но не работает после загрузки zip в aws лямбда - PullRequest
0 голосов
/ 25 мая 2020

Я подписался на этот средний блог, чтобы попытаться установить sh соединение с MS SQL db с помощью лямбда-функции. Я использовал образ lambci / lambda: build- python3 .8 для создания контейнера. Я выполнил все упомянутые шаги и смог успешно запустить тестовый сценарий python, который проверяет соединение.

Ниже представлено содержимое zip-файла внутри контейнера.

enter image description here

Однако, когда я архивирую его и загружаю в лямбда, я получаю сообщение об ошибке ниже.

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

Может ли кто-нибудь помочь мне в отладке этого.

ОБНОВЛЕНИЕ

подтверждение того, что файл действительно присутствует enter image description here

После ввода ниже кода python я вижу, что файл присутствует в лямбда-выражении.

arr = os.listdir('/var/task/msodbcsql/lib64')
print(arr)

enter image description here

1 Ответ

0 голосов
/ 26 мая 2020

Наконец, после нескольких дней почесывания головы, я смог решить эту проблему. Для тех, кто сталкивается с подобной проблемой, выполните следующие действия.

  1. попробуйте с python - 3.7. У меня это сработало в 7, а не в 8.
  2. Используйте msodbcsql17 вместо msodb csql
  3. Используйте unixODB C 2.3.7 здесь
  4. Измените информацию о драйвере в odb c, файлы конфигурации obdcinst на ODBC Driver 17 for SQL Server.

После всего этого я смог заархивировать его и успешно развернуть в aws лямбда.

Надеюсь, это кому-то поможет !!

...