Importe la biblioteca psycopg2 para interactuar con su base de AWS Lambda datos PostgreSQL - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Importe la biblioteca psycopg2 para interactuar con su base de AWS Lambda datos PostgreSQL

Louis Hourcade, Amazon Web Services

Resumen

Psycopg es un adaptador de bases de datos de PostgresSQL para Python. Los desarrolladores utilizan la biblioteca psycopg2 para escribir aplicaciones de Python que interactúan con las bases de datos de PostgreSQL.

En Amazon Web Services (AWS), los desarrolladores también utilizan AWS Lambda para ejecutar código de aplicaciones o servicios de backend. Lambda es un servicio de computación sin servidor y basado en eventos que ejecuta código sin necesidad de aprovisionar ni administrar servidores.

De forma predeterminada, cuando se crea una función nueva que utiliza un tiempo de ejecución de Python compatible con Lambda, el entorno de tiempo de ejecución de Lambda se crea a partir de una imagen base de Lambda proporcionada por AWS. Bibliotecas como pandas o psycopg2 no se incluyen en la imagen base. Para usar una biblioteca, debe agruparla en un paquete personalizado y adjuntarla a Lambda.

Hay varias formas de agrupar y adjuntar una biblioteca, incluidas las siguientes:

  • Implemente la función de Lambda desde un archivo .zip.

  • Implemente la función de Lambda a partir de una imagen de contenedor personalizada.

  • Cree una capa de Lambda y adjúntela a su función de Lambda.

Este patrón muestra las dos primeras opciones.

Con un paquete de implementación .zip, agregar la biblioteca pandas a la función de Lambda es relativamente sencillo. Cree una carpeta en su máquina Linux, agregue el script de Lambda junto con la biblioteca pandas y las dependencias de la biblioteca a la carpeta, comprima la carpeta y proporciónela como origen para su función de Lambda.

Aunque el uso de un paquete de implementación .zip es una práctica habitual, ese enfoque no funciona para la biblioteca psycopg2. Este patrón muestra primero el error que se produce si se utiliza un paquete de implementación .zip para agregar la biblioteca psycopg2 a la función de Lambda. A continuación, el patrón muestra cómo implementar Lambda desde un Dockerfile y editar la imagen de Lambda para que la biblioteca psycopg2 funcione.

Para obtener información sobre los tres recursos que implementa el patrón, consulte la sección Información adicional.

Requisitos previos y limitaciones

Requisitos previos

  • Un activo Cuenta de AWS con permisos suficientes para implementar los recursos utilizados por este patrón AWS

  • AWS Cloud Development Kit (AWS CDK) instalado globalmente mediante la ejecución npm install -g aws-cdk

  • Un cliente Git

  • Python

  • Docker

Limitaciones

  • Algunas Servicios de AWS no están disponibles en todos Regiones de AWS. Para conocer la disponibilidad de las regiones, consulte Servicios de AWS by Region. Para ver los puntos de conexión específicos, consulte la página Service endpoints and quotas y elija el enlace del servicio.

Versiones de producto

  • Versión de tiempo de ejecución de Python compatible con Lambda

  • Versión 2.9.3 de Psycopg2

  • Versión 1.5.2 de pandas

Arquitectura

Información general de la solución

Para ilustrar los desafíos a los que puede enfrentarse al utilizar la biblioteca psycopg2 en Lambda, el patrón implementa dos funciones de Lambda:

  • Una función de Lambda con el tiempo de ejecución de Python creada a partir de un archivo .zip. Las bibliotecas psycopg2 y pandas se instalan en este paquete de implementación .zip mediante pip.

  • Una función de Lambda con el tiempo de ejecución de Python creada a partir de un Dockerfile. El Dockerfile instala las bibliotecas psycopg2 y pandas en la imagen de contenedor de Lambda.

La primera función de Lambda instala la biblioteca pandas y sus dependencias en un archivo .zip; y Lambda puede usar esa biblioteca.

La segunda función de Lambda demuestra que, al crear una imagen de contenedor para la función de Lambda, puede ejecutar las bibliotecas pandas y psycopg2 en Lambda.

Tools (Herramientas)

Servicios de AWS

  • AWS Cloud Development Kit (AWS CDK) es un marco de desarrollo de software que lo ayuda a definir y aprovisionar la infraestructura en la nube de AWS en código.

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

Otras herramientas

  • Docker es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.

  • pandas es una herramienta de código abierto basada en Python para el análisis y la manipulación de datos.

  • Psycopg es un adaptador de bases de datos de PostgreSQL para el lenguaje Python diseñado para aplicaciones de varios subprocesos. Este patrón emplea Psycopg2.

  • Python es un lenguaje de programación informático de uso general.

Repositorio de código

El código de este patrón está disponible en el repositorio import-psycopg2 - -. in-lambda-to-interact with-postgres-database GitHub

Prácticas recomendadas

Este patrón le proporciona un ejemplo práctico de cómo crear una función Lambda AWS CDK a partir de un Dockerfile. Si reutiliza este código en su aplicación, asegúrese de que los recursos implementados cumplan con todos los requisitos de seguridad. Utilice herramientas como Checkov, que analiza las configuraciones de la infraestructura en la nube para detectar errores de configuración antes de implementar la infraestructura.

Epics

TareaDescripciónHabilidades requeridas

Clonar el repositorio.

Para clonar el GitHub repositorio en su máquina local, ejecute los siguientes comandos:

git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git cd AWS-lambda-psycopg2
AWS general

Configurar su implementación.

Edite el app.py archivo con información sobre su Cuenta de AWS:

aws_acccount = "AWS_ACCOUNT_ID" region = "AWS_REGION" # Select the CPU architecture you are using to build the image (ARM or X86) architecture = "ARM"
AWS general
TareaDescripciónHabilidades requeridas

Bootstrap tu. Cuenta de AWS

Si aún no ha iniciado su entorno de AWS, ejecute los siguientes comandos con las AWS credenciales de su AWS cuenta:

cdk bootstrap aws://<tooling-account-id>/<aws-region>
AWS general

Implementar el código.

Para implementar la AWS CDK aplicación, ejecute el siguiente comando:

cdk deploy AWSLambdaPyscopg2
AWS general
TareaDescripciónHabilidades requeridas

Probar la función de Lambda creada a partir del archivo .zip.

Para probar la función de Lambda que se creó a partir del archivo .zip, haga lo siguiente:

  1. Inicie sesión en la consola y abra la consola Lambda en. https://console.aws.amazon.com/lambda/

  2. Seleccione la función de Lambda lambda-from-zip.

  3. Cree un evento de prueba para invocar la función.

  4. Cuando se invoca, la función debería generar un error con el siguiente mensaje:

    "errorMessage": Unable to import module 'lambda_code': libpq.so.5: cannot open shared object, "stackTrace": [] "errorType": Runtime.ImportModuleError",
  5. Abre la CloudWatch consola de Amazon en https://console.aws.amazon.com/cloudwatch/. Los CloudWatch registros muestran que la pandas biblioteca se ha importado correctamente, pero que la importación de la psycopg2 biblioteca ha fallado.

Como Lambda no encuentra las bibliotecas de PostgreSQL necesarias en la imagen predeterminada, no puede utilizar la biblioteca psycopg2.

AWS general

Probar la función de Lambda creada a partir del Dockerfile.

Para utilizar la biblioteca psycopg2 en la función de Lambda, debe editar la imagen de máquina de Amazon (AMI) de Lambda.

Para probar la función de Lambda que se creó a partir del Dockerfile, haga lo siguiente:

  1. Inicie sesión en la consola y abra la consola de Lambda.

  2. Seleccione la función de Lambda lambda-from-docker.

  3. Cree un evento de prueba para invocar la función.

  4. Cuando se invoca, la función debe ejecutarse correctamente.

El código siguiente muestra el Dockerfile que crea la AWS CDK plantilla:

# Start from lambda Python3.13 image FROM public.ecr.aws/lambda/python:3.13 # Copy the lambda code, together with its requirements COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT} COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT} # Install postgresql-devel in your image RUN yum install -y gcc postgresql-devel # install the requirements for the Lambda code RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" # Command can be overwritten by providing a different command in the template directly. CMD ["lambda_code.handler"]

El Dockerfile toma la imagen AWS Lambda proporcionada para el entorno de ejecución de Python e instala postgresql-devel, que contiene las bibliotecas necesarias para compilar aplicaciones que interactúan directamente con el servidor de administración de PostgreSQL. El Dockerfile también instala las bibliotecas pandas y psycopg2, que se indican en el archivo requirements.txt.

AWS general

Recursos relacionados

Información adicional

En este patrón, la AWS CDK plantilla proporciona una AWS pila con tres recursos:

  • Un rol de AWS Identity and Access Management (IAM) para las funciones de Lambda.

  • Una función de Lambda con el tiempo de ejecución de Python. La función se implementa desde el paquete de implementación Constructs/lambda/lambda_deploy.zip.

  • Una función de Lambda con el tiempo de ejecución de Python. La función se implementa desde el Dockerfile de la carpeta Constructs.

El script de ambas funciones de Lambda comprueba si las bibliotecas pandas y psycopg2 se han importado correctamente:

import pandas print("pandas successfully imported") import psycopg2 print("psycopg2 successfully imported") def handler(event, context): """Function that checks whether psycopg2 and pandas are successfully imported or not""" return {"Status": "psycopg2 and pandas successfully imported"}

El paquete de implementación lambda_deploy.zip se crea con el script de bash Constructs/lambda/build.sh. Este script crea una carpeta, copia el script de Lambda, instala las bibliotecas pandas y psycopg2 y genera el archivo .zip. Para generar el archivo.zip usted mismo, ejecute este script bash y vuelva a implementar la pila. AWS CDK

El Dockerfile comienza con la imagen base AWS proporcionada para Lambda con un motor de ejecución de Python. El Dockerfile instala las bibliotecas pandas y psycopg2 sobre la imagen predeterminada.