Solución:
Para que esto funcione necesitas construir psycopg2
con estáticamente vinculado libpq.so
Biblioteca. Consulte este repositorio https://github.com/jkehler/awslambda-psycopg2. Ya ha compilado el paquete psycopg2 e instrucciones sobre cómo hacerlo usted mismo.
De vuelta a tus preguntas:
que esta causando este problema?
psycopg2
necesita ser compilado con bibliotecas vinculadas estáticamente para Linux.
¿Importa que Lambda use Python 2.7 cuando yo uso 3.4?
Sí, lambda solo es compatible con la versión 2.7. Simplemente cree un entorno virtual e instale todos los paquetes necesarios allí.
¿Importa que comprimí el contenido de mi archivo en una máquina con Windows?
Siempre que todas las bibliotecas que comprimió puedan ejecutarse en Linux, no es así.
¿Alguien ha podido conectarse con éxito a Redshift desde lambda?
si.
Me encontré con el mismo problema. Me encontré con el mismo proyecto de github que se señaló en la otra respuesta que explicaba el problema de la siguiente manera:
Debido a que AWS Lambda carecía de las bibliotecas PostgreSQL requeridas en la imagen de AMI, necesitábamos compilar psycopg2 con la biblioteca libpq.so de PostgreSQL, biblioteca libpq vinculada estáticamente en lugar del vínculo dinámico predeterminado.
Esto se ha señalado en la respuesta anterior, y comencé a seguir las instrucciones para crear una versión de psycopg2 con una biblioteca PostgreSQL vinculada estáticamente. Sin embargo, encontré una opción mucho más fácil. Noté en la página de psycopg2 github lo siguiente:
También puede obtener un paquete independiente, que no requiere un compilador o bibliotecas externas, instalando el paquete psycopg2-binary de PyPI:
$ pip install psycopg2-binary
El paquete binario es una opción práctica para el desarrollo y las pruebas, pero en producción se recomienda utilizar el paquete creado a partir de fuentes.
Cuando pip instalé el paquete psycopg2-binary y lo incluí en mi archivo requirements.txt, pude conectarme a mi base de datos postgresql desde una función lambda sin problemas. Estoy usando cáliz que recomiendo encarecidamente. Me doy cuenta de que psycopg2 recomienda no usar la versión binaria para la producción, pero no veo una gran diferencia entre usar la versión binaria o compilarla y vincularla estáticamente usted mismo. Alguien, por favor, corríjame si me equivoco en eso.
Usar psycopg2 con aws lambda, use importar aws-psycopg2
Como aws es compatible con psycopg2, pero la forma de importar psycopg2 es un poco diferente, ya que aws tiene una biblioteca compilada para psycopg2, por lo que debemos importar mediante aws-psycopg2