

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Importez la bibliothèque psycopg2 pour interagir avec votre base AWS Lambda de données PostgreSQL
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Résumé
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg](https://www.psycopg.org/docs/) est un adaptateur de base de données PostgressQL pour Python. Les développeurs utilisent la `psycopg2` bibliothèque pour écrire des applications Python qui interagissent avec les bases de données PostgreSQL.

Sur Amazon Web Services (AWS), les développeurs exécutent également du code pour des applications ou des services de backend. [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) Lambda est un service de calcul sans serveur piloté par les événements qui exécute du code sans qu'il soit nécessaire de provisionner ou de gérer des serveurs.

Par défaut, lorsque vous créez une nouvelle fonction qui utilise un environnement [d'exécution Python pris en charge par Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), l'environnement d'exécution Lambda est créé à partir d'une [image de base pour Lambda](https://github.com/aws/aws-lambda-base-images) fournie par. AWS Les bibliothèques, telles que `pandas` ou`psycopg2`, ne sont pas incluses dans l'image de base. Pour utiliser une bibliothèque, vous devez la regrouper dans un package personnalisé et l'associer à Lambda.

Il existe plusieurs méthodes pour regrouper et associer une bibliothèque, notamment les suivantes :
+ Déployez votre fonction Lambda à partir d'une archive de [fichier .zip.](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html)
+ Déployez votre fonction Lambda à partir d'une image de conteneur personnalisée.
+ Créez une [couche Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) et attachez-la à votre fonction Lambda.

Ce modèle illustre les deux premières options.

Avec un package de déploiement .zip, l'ajout de la `pandas` bibliothèque à votre fonction Lambda est relativement simple. Créez un dossier sur votre machine Linux, ajoutez le script Lambda ainsi que la `pandas` bibliothèque et les dépendances de la bibliothèque au dossier, compressez le dossier et fournissez-le comme source pour votre fonction Lambda.

Bien que l'utilisation d'un package de déploiement .zip soit une pratique courante, cette approche ne fonctionne pas pour la `psycopg2` bibliothèque. Ce modèle montre d'abord l'erreur que vous obtenez si vous utilisez un package de déploiement .zip pour ajouter la `psycopg2` bibliothèque à votre fonction Lambda. Le modèle montre ensuite comment déployer Lambda à partir d'un Dockerfile et modifier l'image Lambda pour faire fonctionner la bibliothèque. `psycopg2`

Pour plus d'informations sur les trois ressources déployées par le modèle, consultez la section [Informations supplémentaires](#import-psycopg2-library-lambda-additional).

## Conditions préalables et limitations
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Prérequis**
+ Un actif Compte AWS disposant des autorisations suffisantes pour déployer les AWS ressources utilisées par ce modèle
+ AWS Cloud Development Kit (AWS CDK) installé globalement en exécutant `npm install -g aws-cdk`
+ Un client Git
+ Python
+ Docker

**Limites**
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez la page [Points de terminaison et quotas du service](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien vers le service.

**Versions du produit**
+ Version d'exécution de Python [prise en charge par Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Version 2.9.3 de Psycopg2
+ Version 1.5.2 des Pandas

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

**Présentation de la solution**

Pour illustrer les défis auxquels vous pourriez être confronté lors de l'utilisation de la `psycopg2` bibliothèque dans Lambda, le modèle déploie deux fonctions Lambda :
+ Une fonction Lambda avec le moteur d'exécution Python créée à partir d'un fichier .zip. Les `pandas` bibliothèques `psycopg2` et sont installées dans ce package de déploiement .zip à l'aide de [pip](https://pypi.org/project/pip/).
+ Une fonction Lambda avec le runtime Python créée à partir d'un Dockerfile. Le Dockerfile installe les `pandas` bibliothèques `psycopg2` et dans l'image du conteneur Lambda.

La première fonction Lambda installe la `pandas` bibliothèque et ses dépendances dans un fichier .zip, et Lambda peut utiliser cette bibliothèque.

La deuxième fonction Lambda montre qu'en créant une image de conteneur pour votre fonction Lambda, vous pouvez exécuter les `pandas` bibliothèques `psycopg2` et dans Lambda.

## Outils
<a name="import-psycopg2-library-lambda-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure cloud AWS sous forme de code.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

**Autres outils**
+ [Docker](https://www.docker.com/) est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs.
+ [pandas](https://pandas.pydata.org/) est un outil open source basé sur Python pour l'analyse et la manipulation de données.
+ [Psycopg](https://www.psycopg.org/docs/) est un adaptateur de base de données PostgreSQL pour le langage Python conçu pour les applications multithread. Ce modèle utilise Psycopg 2.
+ [Python](https://www.python.org/) est un langage de programmation informatique polyvalent.

**Référentiel de code**

Le code de ce modèle est disponible dans le dépôt [import-psycopg2](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - - sur. in-lambda-to-interact with-postgres-database GitHub

## Bonnes pratiques
<a name="import-psycopg2-library-lambda-best-practices"></a>

Ce modèle vous fournit un exemple pratique d'utilisation AWS CDK pour créer une fonction Lambda à partir d'un Dockerfile. Si vous réutilisez ce code dans votre application, assurez-vous que les ressources déployées répondent à toutes les exigences de sécurité. Utilisez des outils tels que [Checkov](https://www.checkov.io/), qui analyse les configurations de l'infrastructure cloud pour détecter les erreurs de configuration avant le déploiement de l'infrastructure.

## Épopées
<a name="import-psycopg2-library-lambda-epics"></a>

### Cloner le référentiel et configurer le déploiement
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Pour cloner le référentiel. | Pour cloner le GitHub dépôt sur votre machine locale, exécutez les commandes suivantes :<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 général | 
| Configurez votre déploiement. | Modifiez le `app.py` fichier contenant les informations relatives à Compte 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 général | 

### Démarrez votre compte AWS et déployez l'application
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Bootstrap votre. Compte AWS | Si vous n'avez pas encore [amorcé votre environnement AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), exécutez les commandes suivantes avec les AWS informations d'identification de votre AWS compte :<pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS général | 
| Déployez le code. | Pour déployer l' AWS CDK application, exécutez la commande suivante :<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS général | 

### Testez les fonctions Lambda depuis l'AWS Management Console
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Testez la fonction Lambda créée à partir du fichier .zip. | Pour tester la fonction Lambda créée à partir du fichier .zip, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Comme Lambda ne trouve pas les bibliothèques PostgreSQL requises dans l'image par défaut, il ne peut pas utiliser la bibliothèque. `psycopg2` | AWS général | 
| Testez la fonction Lambda créée à partir du Dockerfile. | Pour utiliser la `psycopg2` bibliothèque dans votre fonction Lambda, vous devez modifier l'image Lambda Amazon Machine (AMI).Pour tester la fonction Lambda créée à partir du Dockerfile, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Le code suivant montre le Dockerfile créé par le AWS CDK modèle :<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>Le Dockerfile prend l'image AWS Lambda fournie pour le runtime Python et installe [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), qui contient les bibliothèques nécessaires pour compiler les applications qui interagissent directement avec le serveur de gestion PostgreSQL. Le Dockerfile installe également les `psycopg2` bibliothèques `pandas` et, qui sont indiquées dans le fichier. `requirements.txt` | AWS général | 

## Ressources connexes
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK documentation](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda documentation](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Informations supplémentaires
<a name="import-psycopg2-library-lambda-additional"></a>

Dans ce modèle, le AWS CDK modèle fournit une AWS pile de trois ressources :
+ Rôle [Gestion des identités et des accès AWS (IAM) pour les fonctions](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) Lambda.
+ Une fonction Lambda avec un environnement d'exécution Python. La fonction est déployée à partir du package `Constructs/lambda/lambda_deploy.zip` de déploiement.
+ Une fonction Lambda avec un environnement d'exécution Python. La fonction est déployée à partir du Dockerfile situé sous le dossier `Constructs`

Le script des deux fonctions Lambda vérifie si les `psycopg2` bibliothèques `pandas` et sont correctement importées :

```
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"}
```

Le package `lambda_deploy.zip` de déploiement est créé avec le script `Constructs/lambda/build.sh` bash. Ce script crée un dossier, copie le script Lambda, installe les `psycopg2` bibliothèques `pandas` et et génère le fichier .zip. Pour générer vous-même le fichier .zip, exécutez ce script bash et redéployez la pile. AWS CDK 

Le Dockerfile commence par l'image de base AWS fournie pour Lambda avec un environnement d'exécution Python. Le Dockerfile installe les `psycopg2` bibliothèques `pandas` et au-dessus de l'image par défaut.