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__.pyDatei, - erstellen Sie eine
my_poetry_lambda/handler.pyDatei mit dem oben gezeigten Beispielcode für eine Lambda-Funktion, - und erstellen Sie eine Datei
pyproject.tomlmit 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 auchpoetry initausführen, um die Dateipyproject.tomlinteraktiv 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!
Unsere Ideen
Weitere Blogs
Contact




