Función AWS Lambda para conectarse a SQL Server con Python

He estado atrapado tratando de conectarme a un servidor SQL utilizando las funciones de AWS Lambda durante mucho tiempo.

Para hacerlo, estoy tratando de usar cualquier biblioteca (probada con pyodbc, pypyodbc, etc.), empaquetando todo en un archivo zip y cargando el código.

El código es prácticamente el mismo para cada biblioteca, pero los errores son diferentes.

El 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 comunes que he cubierto: - Estoy agregando al zip el contenido del proyecto, no la carpeta. - También estoy agregando al archivo zip las bibliotecas necesarias para que se ejecute el código.

Si trato de usar pyodbc, el zip que estoy cargando se ve así:

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

El error que obtengo:

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

Después de buscar por un tiempo sobre esto, no pude encontrar nada que ayude. Solo un comentario que decía que pyodbc necesitaba instalarse en un entorno Linux para que la función lambda funcionara. Pero no tengo ese entorno disponible, tampoco sé si eso solucionará esto.

Si trato de usar pypyodbc, el zip que estoy cargando se ve así:

El error que obtengo:

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

Para este, intenté instalar varios paquetes de python sugeridos por otras publicaciones de stackoverflow (python-pyodb, unixodbc), pero fallé cada vez.

Luego hubo un comentario sobre "Asegúrate de poner bibliotecas ODBC nativas debajo de la carpeta lib en tu paquete de implementación zip"

Tal vez eso es algo de ayuda? No sé cómo obtener bibliotecas ODBC nativas.

Oh, y una última cosa. Ambas bibliotecas funcionan si las ejecuto desde mi máquina local. Puedo obtener acceso al servidor de destino. Falla si lo hago desde la función lambda.

Espero que alguien pueda ayudarme y, aparentemente, todo internet con esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta