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.
Verarbeiten von Application Load Balancer-Anfragen mit Lambda
Sie können eine Lambda-Ereignisfunktion verwenden, um Anfragen von einem Application Load Balancer zu verarbeiten. Elastic Load Balancing unterstützt Lambda Event Functions als Ziel für einen Application Load Balancer. Sie können Load Balancer-Regeln zum Weiterleiten von HTTP-Anforderungen an eine Funktion verwenden, basierend auf Pfad- oder Header-Werten. Verarbeiten Sie die Anfrage und geben Sie eine HTTP-Antwort von Ihrer Lambda-Ereignisfunktion zurück.
Elastic Load Balancing ruft Ihre Lambda Event Function synchron mit einem Ereignis auf, das den Anforderungstext und die Metadaten enthält.
Beispiel Anforderungsereignis von einem Application Load Balancer
{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/lambda-279XGJDqGZ5rsrHC2Fjr/49e9d65c45c6791a" } }, "httpMethod": "GET", "path": "/lambda", "queryStringParameters": { "query": "1234ABCD" }, "headers": { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "accept-encoding": "gzip", "accept-language": "en-US,en;q=0.9", "connection": "keep-alive", "host": "lambda-alb-123578498.us-east-1.elb.amazonaws.com", "upgrade-insecure-requests": "1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", "x-amzn-trace-id": "Root=1-5c536348-3d683b8b04734faae651f476", "x-forwarded-for": "72.12.164.125", "x-forwarded-port": "80", "x-forwarded-proto": "http", "x-imforwards": "20" }, "body": "", "isBase64Encoded": False }
Ihre Funktion verarbeitet das Ereignis und gibt ein Antwortdokument in JSON an den Load Balancer zurück. Elastic Load Balancing konvertiert das Dokument in eine HTTP-Erfolgs- oder Fehlerantwort und gibt es an den Benutzer zurück.
Beispiel Format des Antwortdokuments
{ "statusCode": 200, "statusDescription": "200 OK", "isBase64Encoded": False, "headers": { "Content-Type": "text/html" }, "body": "<h1>Hello from Lambda!</h1>" }
Um eine Application Load Balancer als Funktionsauslöser zu konfigurieren, gewähren Sie Elastic Load Balancing die Berechtigung zur Ausführung der Funktion, erstellen eine Zielgruppe, die Anforderungen an die Funktion weiterleitet und fügen dem Load Balancer eine Regel hinzu, die Anforderungen an die Zielgruppe sendet.
Sie können den Befehl add-permission verwenden, um der ressourcenbasierten Richtlinie Ihrer Funktion eine Berechtigungsanweisung hinzuzufügen.
aws lambda add-permission --function-namealb-function\ --statement-id load-balancer --action "lambda:InvokeFunction" \ --principal elasticloadbalancing.amazonaws.com
Die Ausgabe sollte folgendermaßen aussehen:
{ "Statement": "{\"Sid\":\"load-balancer\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"elasticloadbalancing.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-west-2:123456789012:function:alb-function\"}" }
Anweisungen zum Konfigurieren des Application Load Balancer-Listeners und der Zielgruppe finden Sie unter Lambda-Funktionen als Ziel im Benutzerhandbuch für Application Load Balancer.
Event Handler von Powertools für AWS Lambda
Der Event-Handler aus dem Powertools for AWS Lambda-Toolkit bietet Routing, Middleware, CORS-Konfiguration, Generierung von OpenAPI-Spezifikationen, Anforderungsvalidierung, Fehlerbehandlung und andere nützliche Funktionen beim Schreiben von Lambda-Ereignisfunktionen, die von einem Application Load Balancer aufgerufen werden. Das Dienstprogramm für den Ereignishandler ist für Python verfügbar. Weitere Informationen finden Sie unter Event Handler REST API in der Dokumentation zu Powertools for AWS Lambda (Python).
Python
import requests from requests import Response from aws_lambda_powertools import Logger, Tracer from aws_lambda_powertools.event_handler import ALBResolver from aws_lambda_powertools.logging import correlation_paths from aws_lambda_powertools.utilities.typing import LambdaContext tracer = Tracer() logger = Logger() app = ALBResolver() @app.get("/todos") @tracer.capture_method def get_todos(): todos: Response = requests.get("https://jsonplaceholder.typicode.com/todos") todos.raise_for_status() # for brevity, we'll limit to the first 10 only return {"todos": todos.json()[:10]} # You can continue to use other utilities just as before @logger.inject_lambda_context(correlation_id_path=correlation_paths.APPLICATION_LOAD_BALANCER) @tracer.capture_lambda_handler def lambda_handler(event: dict, context: LambdaContext) -> dict: return app.resolve(event, context)