Função AWS Lambda para conectar-se ao SQL Server com Python
Há muito tempo que estou tentando conectar-me a um SQL Server usando as funções do AWS Lambda.
Para fazer isso, estou tentando usar qualquer biblioteca (tentei com pyodbc, pypyodbc, etc), empacotando tudo em um arquivo zip e fazendo o upload do código.
O código é praticamente o mesmo para todas as bibliotecas, mas os erros são diferentes.
O código:
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
Problemas comuns que eu abordei: - Estou adicionando ao zip o conteúdo do projeto, não a pasta. - Também estou adicionando ao arquivo zip as bibliotecas necessárias para a execução do código.
Se eu tentar usar pyodbc, o zip que estou enviando fica assim:
.idea (dir)
pyodbc (dir)
lambda_function.py
pyodbc.pyd
O erro que recebo:
Unable to import module 'lambda_function': No module named pyodbc
Depois de pesquisar bastante sobre isso, não consegui encontrar nada que ajude. Apenas um comentário disse que o pyodbc precisava ser instalado em um ambiente linux para que a função lambda funcionasse. Mas eu não tenho esse ambiente disponível, também não sei se isso vai corrigir isso.
Se eu tentar usar pypyodbc, o zip que estou enviando fica assim:
O erro que recebo:
module initialization error: 'ODBC Library is not found. Is LD_LIBRARY_PATH set?'
Para este, tentei instalar vários pacotes python sugeridos por outros posts de stackoverflow (python-pyodb, unixodbc), mas sempre falhava.
Houve um comentário dizendo "Certifique-se de colocar as bibliotecas ODBC nativas na pasta lib no seu pacote de implantação zip"
Talvez isso seja de alguma ajuda? Não sei como obter bibliotecas ODBC nativas ..
Oh e uma última coisa. Ambas as bibliotecas funcionam se eu executá-las na minha máquina local. Eu posso ter acesso ao servidor de destino. Ele falha se eu fizer isso a partir da função lambda.
Espero que alguém possa me ajudar e, aparentemente, toda a internet com isso.