Blog

Python-Poetry für AWS Lambda-Funktionen

Thomas de Ruiter

Aktualisiert Oktober 16, 2025
2 Minuten

Wenn Sie mit Poetry vertraut sind, möchten Sie es vielleicht für Ihre AWS Lambda-Funktionen verwenden. Die Erstellung eines AWS Lambda-Funktions-ZIP-Archivs für Ihren Funktionscode kann so einfach sein wie pip install -t lambda . ; cd lambda ; zip -x '*.pyc' -r ../lambda.zip . . Das ist eigentlich alles, was Sie wissen müssen, aber weiter unten werden wir es genauer erklären.

(Wir gehen davon aus, dass Sie Poetry bereits installiert haben.)

Die Lambda-Funktion

Als Beispiel stellen wir eine Lambda-Funktion zur Verfügung, die die AWS-Konto-ID zurückgibt. Um die Verwendung von Poetry für das Abhängigkeitsmanagement zu gewährleisten, verwenden wir das Paket qrcode, um das Ergebnis als ASCII-codierten QR-Code zurückzugeben.

import boto3  
import qrcode  
import io  

sts = boto3.client("sts")  

def text_qr(data):  
    qr = qrcode.QRCode()  
    qr.add_data(data)  
    f = io.StringIO()  
    qr.print_ascii(out=f)  
    f.seek(0)  
    return f.read()  

def handle(event, context):  
    response = sts.get_caller_identity()  
    account = response.get('Account', '???')  
    return text_qr(account)  

if __name__ == "__main__":  
    print(handle(None, None))

Bootstrap für das Projekt

In einem leeren Verzeichnis:

  • erstellen Sie eine leere my_poetry_lambda/__init__.py Datei,
  • erstellen Sie eine my_poetry_lambda/handler.py Datei mit dem oben gezeigten Beispielcode für eine Lambda-Funktion,
  • und erstellen Sie eine Datei pyproject.toml mit dem folgenden Inhalt:
[tool.poetry]
name = "my_poetry_lambda"  # no hypens -!
version = "0.1.0"
description = "Example AWS Lambda Function using Poetry"
authors = ["Author <author@example.com>"]

[tool.poetry.dependencies]
python = "^3.8"
boto3 = "^1.23.5"
qrcode = "^7.3.1"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Sie können auch poetry init ausführen, um die Datei pyproject.toml interaktiv zu erstellen.

Führen Sie poetry install aus, um eine Datei poetry.lock zu erzeugen und alle Abhängigkeiten zu installieren.

Schließlich können wir die Funktion testen, indem wir sie ausführen:

export AWS_PROFILE=xxxxxxxxxxxx  # your profile here
poetry run python my_poetry_lambda/handler.py

Verpacken Sie die Funktion

Wir verwenden pip, um unsere Funktion und ihre Abhängigkeiten in das Verzeichnis dist/lambda zu installieren. Dann erstellen wir ein ZIP-Archiv aus dessen Inhalt:

pip install -t dist/lambda .
cd dist/lambda
zip -x '*.pyc' -r ../lambda.zip .
Wenn Sie die kompilierten Bytecode-Dateien *.pyc aus dem Archiv ausschließen, verringert sich lediglich dessen Größe. Der Aufwand für ihre Neugenerierung ist gering und sie müssen möglicherweise ohnehin neu generiert werden, wenn die magische Bytecode-Nummer nicht mit der Python-Version in der Lambda-Laufzeitumgebung übereinstimmt.

Verwendung des Zip-Archivs in AWS Lambda

Wir haben ein Paket my_poetry_lambda mit einem Modul handler erstellt, das die Funktion handle enthält. Der Wert für den Handler in der Laufzeiteinstellung sollte daher my_poetry_lambda.handler.handle sein.

Verfasst von

Thomas de Ruiter

Cloud Consultant with a passion for everything Cloud. Likes to automate all the things. Believes security is everyone's responsibility!

Contact

Let’s discuss how we can support your journey.