

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
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Resumen
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg](https://www.psycopg.org/docs/) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), el entorno de tiempo de ejecución de Lambda se crea a partir de una [imagen base de Lambda](https://github.com/aws/aws-lambda-base-images) 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](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html).
+ Implemente la función de Lambda a partir de una imagen de contenedor personalizada.
+ Cree una [capa de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) 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](#import-psycopg2-library-lambda-additional).

## Requisitos previos y limitaciones
<a name="import-psycopg2-library-lambda-prereqs"></a>

**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](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte la página [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ Versión de tiempo de ejecución de Python [compatible con Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Versión 2.9.3 de Psycopg2
+ Versión 1.5.2 de pandas

## Arquitectura
<a name="import-psycopg2-library-lambda-architecture"></a>

**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](https://pypi.org/project/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)
<a name="import-psycopg2-library-lambda-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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](https://www.docker.com/) 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](https://pandas.pydata.org/) es una herramienta de código abierto basada en Python para el análisis y la manipulación de datos.
+ [Psycopg](https://www.psycopg.org/docs/) 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](https://www.python.org/) 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](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - -. in-lambda-to-interact with-postgres-database GitHub

## Prácticas recomendadas
<a name="import-psycopg2-library-lambda-best-practices"></a>

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](https://www.checkov.io/), que analiza las configuraciones de la infraestructura en la nube para detectar errores de configuración antes de implementar la infraestructura.

## Epics
<a name="import-psycopg2-library-lambda-epics"></a>

### Clonación del repositorio y configuración de la implementación
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clonar el repositorio. | Para clonar el GitHub repositorio en su máquina local, ejecute los siguientes comandos:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | AWS general | 
| Configurar su implementación. | Edite el `app.py` archivo con información sobre su Cuenta de AWS:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | AWS general | 

### Inicio de su cuenta de AWS e implementación de la aplicación
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Bootstrap tu. Cuenta de AWS | Si aún no ha iniciado [su entorno de AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), ejecute los siguientes comandos con las AWS credenciales de su AWS cuenta:<pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS general | 
| Implementar el código. | Para implementar la AWS CDK aplicación, ejecute el siguiente comando:<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS general | 

### Prueba de las funciones de Lambda desde la Consola de administración de AWS
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Tarea | Descripción | Habilidades 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)El código siguiente muestra el Dockerfile que crea la AWS CDK plantilla:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>El Dockerfile toma la imagen AWS Lambda proporcionada para el entorno de ejecución de Python e instala [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/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
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK documentación](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda documentación](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Información adicional
<a name="import-psycopg2-library-lambda-additional"></a>

En este patrón, la AWS CDK plantilla proporciona una AWS pila con tres recursos:
+ Un [rol de AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 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.