Einführung
Ein Team für den Bestellabschluss benötigt eine Funktion, die eine Bestellsumme berechnet. Du stellst einen kurzen Python-Handler bereit, sendest zwei JSON-Eingaben und ergänzt die Berechnung um eine Bearbeitungsgebühr. Verwende ganzzahlige Centbeträge, um die Rechnung einfach zu halten, und entferne anschließend deine Funktion und Logs.
Schließe zuerst Erste Schritte mit AWS auf LabEx, Temporäre Zugangsdaten mit einer IAM-Rolle verwenden und Eine fehlgeschlagene Anfrage in CloudWatch Logs finden ab. Diese neue Umgebung stellt CLI, Arbeitsbereich und Ausführungsrolle bereit.
Bezug zu Zertifizierungen
Dieses Lab bietet praktische Übungen zu den folgenden Prüfungsthemen.
- Cloud Practitioner (CLF-C02) · Aufgabe 3.3: Lambda-Bereitstellung, JSON-Ereignisse und berechnete Antworten.
- Solutions Architect – Associate (SAA-C03) · Aufgabe 2.1: Lambda-Bereitstellung, JSON-Ereignisse und berechnete Antworten.
- Developer – Associate (DVA-C02) · Aufgabe 1.2: Lambda-Bereitstellung, JSON-Ereignisse und berechnete Antworten.
Eine Bestellberechnung bereitstellen
In diesem Schritt ersetzt du einen unfertigen Handler und stellst eine Funktion bereit. AWS Lambda führt deinen Code aus, wenn du eine Funktion aufrufst. Ein Ereignis ist die Eingabe für diesen Aufruf; ein Handler ist die Python-Funktion, die Lambda damit aufruft. Die Einstellung app.handler bezeichnet die Funktion namens handler in app.py.
Wechsle in den vorbereiteten Arbeitsbereich und prüfe das Gerüst. Es gibt derzeit ein leeres Objekt zurück und kann deshalb keine Bestellung berechnen.
cd /home/labex/project
cat app.py
Python verwendet Einrückungen, um Anweisungen innerhalb einer Funktion zu gruppieren. event["quantity"] liest einen Wert aus dem eingehenden JSON-Objekt. * multipliziert die Menge mit dem Stückpreis; return sendet das berechnete Objekt an den Aufrufer. context liefert Informationen zum Aufruf, obwohl diese Berechnung sie noch nicht benötigt.
Ersetze das Gerüst durch diesen vollständigen Handler. cat > app.py schreibt die Zeilen zwischen <<'PY' und dem abschließenden PY in die Datei. Die Abschlusszeile muss allein stehen.
cat > app.py <<'PY'
import json
def handler(event, context):
order_id = event["order_id"]
quantity = event["quantity"]
unit_price = event["unit_price_cents"]
total = quantity * unit_price
print("EVENT " + json.dumps(event))
return {"order_id": order_id, "total_cents": total}
PY
Die print-Anweisung schreibt die Eingabe in Ausführungslogs; sie gibt nicht die Antwort zurück. Halte Kundengeheimnisse aus Logs heraus. Diese Ereignisse enthalten nur synthetische Kennungen und Zahlen.
Erstelle ein Zip-Paket, das Archiv, das Lambda bereitstellt. Lege app.py auf seiner obersten Ebene ab, damit der Handler gefunden werden kann. Die Ausführungsrolle ist die Identität, die Lambda beim Ausführen deines Codes verwendet. Diese vorbereitete Rolle unterstützt die Protokollierung; Datenzugriff konfigurierst du in einem späteren Lab. Lies ihren ARN in eine Shellvariable ein. Ein ARN identifiziert eine bestimmte Ressource; die Variable erspart dir das manuelle Kopieren.
zip -q function.zip app.py
ROLE_ARN=$(aws iam get-role --role-name labex-fn01-execution --query 'Role.Arn' --output text)
Stelle die Funktion mit der Python-3.12-Laufzeit und einem Zeitlimit von fünf Sekunden bereit. fileb:// liest das Archiv als Bytes. Die Laufzeit wählt die Sprachumgebung; der Timeout-Wert begrenzt einen Aufruf.
aws lambda create-function --function-name labex-fn01-quote --runtime python3.12 --handler app.handler --role "$ROLE_ARN" --zip-file fileb://function.zip --timeout 5 --query '{Name:FunctionName,Runtime:Runtime,Handler:Handler,Timeout:Timeout,CodeSize:CodeSize}'
Erwarte Name labex-fn01-quote, Runtime python3.12, Handler app.handler, Timeout 5 und eine positive CodeSize. Das Erstellen der Funktion stellt Code bereit; es ruft den Handler nicht auf.
AWS View zeigt Funktion, Handler und Code-Fingerabdruck. Die Aufruflogs sind noch leer. Die Referenz-Log-Gruppe enthält unbeteiligte Plattformdaten und muss unverändert bleiben.
Zwei JSON-Ereignisse aufrufen
In diesem Schritt rufst du die bereitgestellte Funktion mit zwei unterschiedlichen Bestellungen auf und interpretierst ihre Antworten. JSON stellt ein Objekt mit benannten Feldern dar. Zahlen haben keine Anführungszeichen; Zeichenketten schon. Jeder Aufruf erhält sein eigenes Ereignis.

Schreibe das erste Ereignis: zwei Artikel zu je 375 Cent.
cat > small.json <<'JSON'
{"order_id":"fn01-small","quantity":2,"unit_price_cents":375}
JSON
Rufe die Funktion auf und speichere ihre Antwort. --cli-binary-format raw-in-base64-out ermöglicht der CLI, gewöhnliches JSON als Nutzdaten anzunehmen. file:// liest den Ereignistext; der abschließende Dateiname nimmt die zurückgegebenen Nutzdaten auf.
aws lambda invoke --function-name labex-fn01-quote --cli-binary-format raw-in-base64-out --payload file://small.json small-response.json
cat small-response.json
Der Befehl meldet StatusCode 200. Die Antwortdatei sollte {"order_id":"fn01-small","total_cents":750} enthalten. Der Status der Dienstanfrage und die vom Handler zurückgegebenen Daten sind unterschiedliche Nachweise; prüfe auch die Nutzdaten.
Sende eine zweite Bestellung, ohne den Code erneut bereitzustellen. Fünf Artikel zu 120 Cent sollten eine andere Summe ergeben.
cat > large.json <<'JSON'
{"order_id":"fn01-large","quantity":5,"unit_price_cents":120}
JSON
aws lambda invoke --function-name labex-fn01-quote --cli-binary-format raw-in-base64-out --payload file://large.json large-response.json
cat large-response.json
Erwarte {"order_id":"fn01-large","total_cents":600}. Die Eingabewerte bestimmen die Berechnung derselben Funktion.
Vergleiche in AWS View Bestell-IDs, Mengen, Preise und Summen. Die Funktionskonfiguration bleibt gleich, während sich die Aufrufeinträge ändern. Öffne Show logs für eine der Bestellungen, um ihre Eingabe und das zurückgegebene Ergebnis zu sehen.
Den Code aktualisieren und sein Ergebnis nachverfolgen
In diesem Schritt ergänzt du eine Bearbeitungsgebühr von 100 Cent und bestätigst, dass ein neuer Aufruf die aktualisierte Berechnung ausführt. Eine Änderung der lokalen Datei app.py ändert den bereitgestellten Code nicht; aktualisiere das Paket und sende es an Lambda.
Ersetze den Handler durch diese Überarbeitung. Nur die Berechnung ändert sich: + 100 addiert die Gebühr nach der Multiplikation.
cat > app.py <<'PY'
import json
def handler(event, context):
order_id = event["order_id"]
quantity = event["quantity"]
unit_price = event["unit_price_cents"]
total = quantity * unit_price + 100
print("EVENT " + json.dumps(event))
return {"order_id": order_id, "total_cents": total}
PY
zip -q function.zip app.py
aws lambda update-function-code --function-name labex-fn01-quote --zip-file fileb://function.zip --query '{Name:FunctionName,CodeSHA:CodeSha256}'
Die Bereitstellung gibt den Namen und einen SHA-Fingerabdruck des Codes zurück. AWS View zeigt den geänderten Fingerabdruck; frühere Aufrufergebnisse bleiben in Logs erhalten.
Zum Vergleich mit der Konsole zeigt das offizielle Beispiel die Python-Datei neben den Bedienelementen Deploy und Test. Seine lambda_function.py und lambda_handler entsprechen app.py und handler in diesem Lab; fahre hier mit dem Terminal-Arbeitsablauf fort.

Quelle: AWS-Lambda-Leitfaden.
Verwende die Mengen der ersten Bestellung mit einer neuen Zuordnungs-ID.
cat > revised.json <<'JSON'
{"order_id":"fn01-revised","quantity":2,"unit_price_cents":375}
JSON
aws lambda invoke --function-name labex-fn01-quote --cli-binary-format raw-in-base64-out --payload file://revised.json revised-response.json
cat revised-response.json
Erwarte {"order_id":"fn01-revised","total_cents":850}: 750 Cent für Artikel plus die Gebühr von 100 Cent. Die erste Antwort bleibt 750; das Aktualisieren des Codes schreibt den Verlauf nicht um.
Ausführungslogs werden in /aws/lambda/<function-name> gespeichert. Rufe Nachrichten mit dieser Bestell-ID ab, um ihr Ereignis mit der berechneten Antwort zu verbinden.
aws logs filter-log-events --log-group-name /aws/lambda/labex-fn01-quote --filter-pattern '"fn01-revised"' --query 'events[].message'
Erwarte die EVENT-Eingabe und das zurückgegebene Objekt mit der Summe 850. Vollständige Streams enthalten außerdem Aufrufbeginn, Aufrufende und Laufzeitberichte, getrennt von der Bestellantwort.
Kehre zu AWS View zurück. Vergleiche die drei tatsächlichen Einträge, öffne Show logs für fn01-revised und ordne seine Eingabe dem Ergebnis von 850 Cent zu. Die Referenz bleibt unverändert.

Die Funktion entfernen und Referenz-Logs erhalten
In diesem Schritt löschst du nur die Funktion und ihre Ausführungs-Log-Gruppe und bestätigst anschließend, dass die unbeteiligte Referenz erhalten bleibt. Funktion und Log-Gruppe sind separate Ressourcen; das Löschen der Funktion allein entfernt gespeicherte Logs nicht.
Lösche genau die Funktion und rufe anschließend erfolgreich den Bestand ab.
aws lambda delete-function --function-name labex-fn01-quote
aws lambda list-functions --query 'Functions[].FunctionName'
Erwarte eine leere Liste. Ein Authentifizierungs- oder Verbindungsfehler würde die Löschung nicht belegen.
Entferne die eigenen Ausführungslogs und liste die verbleibenden Gruppen auf.
aws logs delete-log-group --log-group-name /aws/lambda/labex-fn01-quote
aws logs describe-log-groups --query 'logGroups[].logGroupName'
Nur /labex/labex-fn01-reference sollte erhalten bleiben. Lies ihre Nachricht, um nachzuweisen, dass die Bereinigung unbeteiligte Daten erhalten hat.
aws logs get-log-events --log-group-name /labex/labex-fn01-reference --log-stream-name platform --query 'events[].message'
Erwarte INFO platform reference keep unchanged. AWS View zeigt keine bereitgestellte Funktion oder Aufruflogs, während die Referenz erhalten bleibt. Die vorbereitete Rolle und Identität sind Bestandteile der Umgebung; der Widerruf von Zugangsdaten und das Herunterfahren folgen auf die Ressourcenprüfungen.
Zusammenfassung
Du hast einen Python-Handler geschrieben, ein Zip-Paket bereitgestellt und Summen aus zwei JSON-Ereignissen berechnet. Du hast die bereitgestellte Berechnung aktualisiert, ihr neues Ergebnis Ausführungslogs zugeordnet und ausschließlich die Funktion sowie ihre Log-Gruppe gelöscht, während Referenzdaten erhalten geblieben sind.



