Blog
Erhöhen Sie Ihre Entwicklungsgeschwindigkeit mit AWS Lambda Powertools

Es ist nicht möglich, sich alle Methoden und Eigenschaften aller Klassen zu merken, die Sie schreiben und verwenden.
Das ist der Grund, warum ich in meiner IDE gerne Typ-Hinweise habe. Ich nehme mir sogar Zeit, um sicherzustellen, dass es funktioniert. Ich habe sogar einen Blogbeitrag darüber geschrieben, wie man es einrichtet, als ich mit einer neuen Sprache experimentiert habe.
In diesem Beitrag gebe ich Ihnen ein paar Tipps, mit denen Sie schneller entwickeln können. Durch die Nutzung von Type Hinting mit den AWS Lambda Powertools.
LambdaContext
Wenn Sie AWS Lambda-Funktionen entwickeln, erhalten Sie eine event und eine context Eigenschaft. Wenn Sie Metadaten aus dem Kontext benötigen, können Sie die Dokumentation lesen oder Type Hinting verwenden.
Wie Sie im Beispiel sehen können, hilft Ihnen die IDE, die richtige Methode oder Eigenschaft zu finden. Aber was ist mit der event? Das Beispiel sagt Ihnen, dass wir eine Dict[str, Any] erwarten, aber das hängt davon ab, wie Sie die Lambda-Funktion aufrufen.
Ereignis-Quelldaten-Klassen
In den meisten Fällen wissen Sie, wie Sie Ihre Lambda-Funktion aufrufen. Zum Beispiel könnte eine API Gateway Proxy-Integration die Funktion auslösen:
Neben der Verwendung der Datenklasse können Sie auch einen Dekorator verwenden. Dann verwenden Sie den Typ-Hinweis in der Methodensignatur.
from aws_lambda_powertools.utilities.data_classes import event_source, APIGatewayProxyEvent
@event_source(data_class=APIGatewayProxyEvent)
def lambda_handler(event: APIGatewayProxyEvent, context):
if 'helloworld' in event.path and event.http_method == 'GET':
do_something_with(event.body, user)
Eine vollständige Liste finden Sie auf der AWS-Github-Seite Unterstützte Ereignisquellen.
Was ist mit meinen benutzerdefinierten Ereignissen?
Sie könnten auch eine Lambda-Funktion mit einer benutzerdefinierten Nutzlast aufrufen. Dieses Ereignis wird nicht als Datenklasse unterstützt.
Nehmen wir an, wir erhalten eine Bestellung mit einem oder mehreren Artikeln. Mit dem Parser können Sie das Ereignis in einem Modell definieren. Und Sie können dieses Modell für den Typ-Hinweis verwenden.
from typing import Optional
from aws_lambda_powertools.utilities.parser import event_parser, BaseModel, ValidationError
from aws_lambda_powertools.utilities.typing import LambdaContext
import json
class OrderItem(BaseModel):
id: int
quantity: int
description: str
class Order(BaseModel):
id: int
description: str
items: List[OrderItem] # use nesting models
optional_field: Optional[str] # this field may or may not be available when parsing
@event_parser(model=Order)
def handler(event: Order, context: LambdaContext):
print(event.id)
print(event.description)
print(event.items)
order_items = [items for item in event.items]
...
Aber mein benutzerdefiniertes Ereignis befindet sich in einer bestehenden Ereignisquelle
In diesem Fall müssen Sie die Ereignisquelle als Hüllkurve angeben.
from aws_lambda_powertools.utilities.parser import event_parser, parse, BaseModel, envelopes
from aws_lambda_powertools.utilities.typing import LambdaContext
class UserModel(BaseModel):
username: str
password1: str
password2: str
# Same behavior but using our decorator
@event_parser(model=UserModel, envelope=envelopes.EventBridgeEnvelope)
def handler(event: UserModel, context: LambdaContext):
assert event.password1 == event.password2
Fazit
Wenn Sie diesen Blog nützlich fanden, empfehle ich Ihnen, die offizielle Dokumentation zu lesen. Es ist eine kleine Investition, die sich durch schönen und sauberen Code auszahlt.
Sie müssen sich nicht alle Methoden und Eigenschaften merken und wissen, welche Typen sie erwarten und zurückgeben. Eine IDE kann das für Sie erledigen, so dass Sie sich auf die eigentliche Geschäftslogik konzentrieren können.
Verfasst von

Joris Conijn
Joris is the AWS Practise CTO of the Xebia Cloud service line and has been working with the AWS cloud since 2009 and focussing on building event-driven architectures. While working with the cloud from (almost) the start, he has seen most of the services being launched. Joris strongly believes in automation and infrastructure as code and is open to learning new things and experimenting with them because that is the way to learn and grow.
Unsere Ideen
Weitere Blogs
Contact


