

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Importieren Sie die psycopg2-Bibliothek, AWS Lambda um mit Ihrer PostgreSQL-Datenbank zu interagieren
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

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

[Psycopg](https://www.psycopg.org/docs/) ist ein PostgresSQL-Datenbankadapter für Python. Entwickler verwenden die `psycopg2` Bibliothek, um Python-Anwendungen zu schreiben, die mit PostgreSQL-Datenbanken interagieren.

Auf Amazon Web Services (AWS) verwenden Entwickler auch, [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)um Code für Anwendungen oder Backend-Services auszuführen. Lambda ist ein serverloser, ereignisgesteuerter Rechendienst, der Code ausführt, ohne dass Server bereitgestellt oder verwaltet werden müssen.

Wenn Sie eine neue Funktion erstellen, die eine von Lambda [unterstützte Python-Laufzeit verwendet, wird die Lambda-Laufzeitumgebung](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) standardmäßig aus einem [Basis-Image für Lambda](https://github.com/aws/aws-lambda-base-images) erstellt, das von bereitgestellt wird. AWS Bibliotheken wie `pandas` oder `psycopg2` sind nicht im Basis-Image enthalten. Um eine Bibliothek zu verwenden, müssen Sie sie in einem benutzerdefinierten Paket bündeln und an Lambda anhängen.

Es gibt mehrere Möglichkeiten, eine Bibliothek zu bündeln und anzuhängen, darunter die folgenden:
+ Stellen Sie Ihre Lambda-Funktion aus einem [ZIP-Dateiarchiv](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html) bereit.
+ Stellen Sie Ihre Lambda-Funktion von einem benutzerdefinierten Container-Image aus bereit.
+ Erstellen Sie eine [Lambda-Schicht](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) und fügen Sie sie Ihrer Lambda-Funktion hinzu.

Dieses Muster demonstriert die ersten beiden Optionen.

Mit einem ZIP-Bereitstellungspaket ist das Hinzufügen der `pandas` Bibliothek zu Ihrer Lambda-Funktion relativ einfach. Erstellen Sie einen Ordner auf Ihrem Linux-Computer, fügen Sie das Lambda-Skript zusammen mit der `pandas` Bibliothek und den Abhängigkeiten der Bibliothek zum Ordner hinzu, komprimieren Sie den Ordner und stellen Sie ihn als Quelle für Ihre Lambda-Funktion bereit.

Obwohl die Verwendung eines ZIP-Bereitstellungspakets eine gängige Praxis ist, funktioniert dieser Ansatz für die Bibliothek nicht. `psycopg2` Dieses Muster zeigt zunächst den Fehler, den Sie erhalten, wenn Sie ein ZIP-Bereitstellungspaket verwenden, um die `psycopg2` Bibliothek zu Ihrer Lambda-Funktion hinzuzufügen. Das Muster zeigt dann, wie Lambda aus einem Dockerfile bereitgestellt und das Lambda-Image bearbeitet wird, damit die Bibliothek funktioniert. `psycopg2`

[Informationen zu den drei Ressourcen, die das Muster bereitstellt, finden Sie im Abschnitt Zusätzliche Informationen.](#import-psycopg2-library-lambda-additional)

## Voraussetzungen und Einschränkungen
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Voraussetzungen**
+ Ein Aktiv AWS-Konto mit ausreichenden Berechtigungen, um die von diesem Muster verwendeten AWS Ressourcen bereitzustellen
+ AWS Cloud Development Kit (AWS CDK) wird global installiert, indem Folgendes ausgeführt wird `npm install -g aws-cdk`
+ Ein Git-Client
+ Python
+ Docker

**Einschränkungen**
+ Einige AWS-Services sind nicht in allen verfügbar AWS-Regionen. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie [AWS-Services unter Nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie auf der Seite [Dienstendpunkte und Kontingente](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html). Wählen Sie dort den Link für den Dienst aus.

**Produktversionen**
+ Python-Laufzeitversion, die [von Lambda unterstützt wird](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Psycopg2 Version 2.9.3
+ Pandas versie 1.5.2

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

**Überblick über die Lösung**

Um die Herausforderungen zu veranschaulichen, denen Sie bei der Verwendung der `psycopg2` Bibliothek in Lambda begegnen könnten, stellt das Muster zwei Lambda-Funktionen bereit:
+ Eine Lambda-Funktion mit der Python-Runtime, die aus einer ZIP-Datei erstellt wurde. [Die `pandas` Bibliotheken `psycopg2` und werden in diesem .zip-Bereitstellungspaket mithilfe von pip installiert.](https://pypi.org/project/pip/)
+ Eine Lambda-Funktion mit der Python-Laufzeit, die aus einem Dockerfile erstellt wurde. Das Dockerfile installiert die `pandas` Bibliotheken `psycopg2` und im Lambda-Container-Image.

Die erste Lambda-Funktion installiert die `pandas` Bibliothek und ihre Abhängigkeiten in einer ZIP-Datei, und Lambda kann diese Bibliothek verwenden.

Die zweite Lambda-Funktion zeigt, dass Sie die `psycopg2` Bibliotheken `pandas` und in Lambda ausführen können, indem Sie ein Container-Image für Ihre Lambda-Funktion erstellen.

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

**AWS-Services**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)ist ein Softwareentwicklungs-Framework, das Sie bei der Definition und Bereitstellung der AWS-Cloud-Infrastruktur im Code unterstützt.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne dass Sie Server bereitstellen oder verwalten müssen. Es führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

**Andere Tools**
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.
+ [pandas](https://pandas.pydata.org/) ist ein Python-basiertes Open-Source-Tool zur Datenanalyse und -manipulation.
+ [Psycopg](https://www.psycopg.org/docs/) ist ein PostgreSQL-Datenbankadapter für die Sprache Python, der für Multithread-Anwendungen entwickelt wurde. Dieses Muster verwendet Psycopg 2.
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache.

**Code-Repository**

Der Code für dieses Muster ist im [import-psycopg2- in-lambda-to-interact -Repository](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) unter verfügbar. with-postgres-database GitHub

## Best Practices
<a name="import-psycopg2-library-lambda-best-practices"></a>

Dieses Muster bietet Ihnen ein funktionierendes Beispiel für die Erstellung einer Lambda-Funktion aus einem Dockerfile. AWS CDK Wenn Sie diesen Code in Ihrer Anwendung wiederverwenden, stellen Sie sicher, dass die bereitgestellten Ressourcen alle Sicherheitsanforderungen erfüllen. Verwenden Sie Tools wie [Checkov](https://www.checkov.io/), das Cloud-Infrastrukturkonfigurationen scannt, um Fehlkonfigurationen zu finden, bevor die Infrastruktur bereitgestellt wird.

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

### Klonen Sie das Repository und konfigurieren Sie die Bereitstellung
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Führen Sie die folgenden Befehle aus, um das GitHub Repository auf Ihrem lokalen Computer zu klonen:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | Allgemeines AWS | 
| Konfigurieren Sie Ihre Bereitstellung. | Bearbeiten Sie die `app.py` Datei mit Informationen zu Ihren AWS-Konto:<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> | Allgemeines AWS | 

### Starten Sie Ihr AWS-Konto und stellen Sie die Anwendung bereit
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Bootstrap dein AWS-Konto. | Wenn Sie [Ihre AWS-Umgebung noch nicht gebootet](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) haben, führen Sie die folgenden Befehle mit den AWS Anmeldeinformationen Ihres AWS Kontos aus:<pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | Allgemeines AWS | 
| Stellen Sie den Code bereit. | Führen Sie den folgenden Befehl aus, um die AWS CDK Anwendung bereitzustellen:<pre>cdk deploy AWSLambdaPyscopg2</pre> | Allgemeines AWS | 

### Testen Sie die Lambda-Funktionen von der AWS-Managementkonsole aus
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Testen Sie die Lambda-Funktion, die aus der ZIP-Datei erstellt wurde. | Gehen Sie wie folgt vor, um die Lambda-Funktion zu testen, die aus der ZIP-Datei erstellt wurde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Da Lambda die erforderlichen PostgreSQL-Bibliotheken im Standard-Image nicht findet, kann es die Bibliothek nicht verwenden. `psycopg2` | Allgemeines AWS | 
| Testen Sie die Lambda-Funktion, die aus dem Dockerfile erstellt wurde. | Um die `psycopg2` Bibliothek in Ihrer Lambda-Funktion zu verwenden, müssen Sie das Lambda Amazon Machine Image (AMI) bearbeiten.Gehen Sie wie folgt vor, um die Lambda-Funktion zu testen, die aus dem Dockerfile erstellt wurde:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Der folgende Code zeigt das Dockerfile, das die AWS CDK Vorlage erstellt:<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>Das Dockerfile verwendet das AWS bereitgestellte Lambda-Image für die Python-Laufzeit und installiert [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), das die Bibliotheken enthält, die zum Kompilieren von Anwendungen benötigt werden, die direkt mit dem PostgreSQL-Managementserver interagieren. Das Dockerfile installiert auch die Bibliotheken und, die in der Datei angegeben sind. `pandas` `psycopg2` `requirements.txt` | Allgemeines AWS | 

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

## Zusätzliche Informationen
<a name="import-psycopg2-library-lambda-additional"></a>

In diesem Muster stellt die AWS CDK Vorlage einen AWS Stapel mit drei Ressourcen bereit:
+ Eine [AWS Identity and Access Management (IAM-) Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) für die Lambda-Funktionen.
+ Eine Lambda-Funktion mit einer Python-Laufzeit. Die Funktion wird aus dem `Constructs/lambda/lambda_deploy.zip` Bereitstellungspaket bereitgestellt.
+ Eine Lambda-Funktion mit einer Python-Laufzeit. Die Funktion wird über das Dockerfile unter dem Ordner bereitgestellt `Constructs`

Das Skript für beide Lambda-Funktionen prüft, ob die `psycopg2` Bibliotheken `pandas` und erfolgreich importiert wurden:

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

Das `lambda_deploy.zip` Bereitstellungspaket wird mit dem `Constructs/lambda/build.sh` Bash-Skript erstellt. Dieses Skript erstellt einen Ordner, kopiert das Lambda-Skript, installiert die `psycopg2` Bibliotheken `pandas` und und generiert die ZIP-Datei. Um die .zip-Datei selbst zu generieren, führen Sie dieses Bash-Skript aus und stellen Sie den Stack erneut bereit. AWS CDK 

Das Dockerfile beginnt mit dem AWS bereitgestellten Basis-Image für Lambda mit einer Python-Laufzeit. Das Dockerfile installiert die `psycopg2` Bibliotheken `pandas` und über dem Standard-Image.