AWS Lambda - Funktion in Python

In diesem Kapitel werden wir eine einfache AWS Lambda-Funktion in Python erstellen und deren Arbeitskonzepte anhand der folgenden Details verstehen.

Bevor Sie mit der Erstellung einer Lambda-Funktion in AWS beginnen, benötigen wir die Unterstützung des AWS-Toolkits für Python. Befolgen Sie dazu die unten angegebenen Schritte und beachten Sie die entsprechenden Screenshots im Anhang -

Schritt 1

Melden Sie sich bei der AWS-Konsole an, erstellen Sie die Lambda-Funktion und wählen Sie die Sprache als Python aus.

Schritt 2

Klicken Sie nun auf Create functionKlicken Sie auf die Schaltfläche und geben Sie die Details zum Erstellen eines einfachen AWS Lambda in Python ein. Dieser Code gibt die Nachricht zurückHello from Lambda using Python und sieht aus wie hier gezeigt -

Schritt 3

Speichern Sie nun die Änderungen und testen Sie den Code, um die Ausgabe anzuzeigen. Die folgenden Ausgaben und Protokolle sollten angezeigt werden, wenn Sie sie in der AWS-Konsole mithilfe der Testschaltfläche auf der Benutzeroberfläche testen.

Schritt 4

Jetzt können Sie Code in einen beliebigen Editor oder eine IDE für Python schreiben. Hier verwenden wir Visual Studio-Code zum Schreiben des Codes. Sie sollten die Datei später komprimieren und in die AWS-Konsole hochladen.

Hier haben wir den Code gezippt und die AWS-Konsole verwendet.

Schritt 5

Wählen Sie nun Upload a .ZIP file Option wie unten gezeigt -

Handler-Details für Python

Beachten Sie, dass der Handler der Name der Datei gefolgt vom Namen der Funktion sein muss. Im obigen Fall lautet unser Dateinamehellopython.py und Name der Funktion ist my_handler; so wird der Handler sein hellopython.my_handler.

Sobald der Upload abgeschlossen und die Änderungen gespeichert sind, werden die Details der Zip-Datei im Online-Editor in der AWS Lambda-Konsole angezeigt. Lassen Sie uns nun den Code testen, um die Ausgabe und die Protokolle anzuzeigen.

Lassen Sie uns nun die Details der Lambda-Funktion anhand des folgenden Beispielcodes verstehen:

def my_handler(event, context):
   return "aws lambda in python using zip file"

Im obigen Code hat der Funktionsname my_handler zwei Parameter, Ereignis und Kontext.

Kontextobjekt in Python

Das Kontextobjekt enthält Details wie den Namen der Lambda-Funktion, die verbleibende Zeit in Millisekunden, die Anforderungs-ID, den Namen der Cloud-Überwachungsgruppe, Zeitüberschreitungsdetails usw.

Die für das Kontextobjekt verfügbaren Methoden und Attribute sind in den folgenden Tabellen aufgeführt:

Sr.Nr. Methodenname & Beschreibung
1

get_remaining_time_in_millis()

Diese Methode gibt die verbleibende Zeit in Millisekunden an, bis die Lambda-Funktion die Funktion beendet

Sr.Nr. Attribut & Beschreibung
1

function_name

Dies gibt den Namen der aws-Lambda-Funktion

2

function_version

Dies gibt die Version der aws Lambda-Funktion aus, die ausgeführt wird

3

invoked_function_arn

Dies gibt ARN Details.

4

memory_limit_in_mb

Dies zeigt das Speicherlimit, das beim Erstellen der Lambda-Funktion hinzugefügt wurde

5

aws_request_id

Dies gibt die aws-Anforderungs-ID an.

6

og_group_name

Dies gibt den Namen der Cloudwatch-Gruppe an

7

log_stream_name

Dies gibt den Namen des Cloudwatch-Protokolldatenstromnamens an, in den die Protokolle geschrieben werden.

8

identity

Dies gibt Details über Amazon Cognito Identity Provider, wenn es mit aws mobile sdk verwendet wird. Details angegeben sind wie folgt -

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

client_context

Dies zeigt Details der Client-Anwendung an, wenn sie mit aws mobile sdk verwendet wird. Die angegebenen Details lauten wie folgt:

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom - Es werden benutzerdefinierte Werte aus der mobilen Client-App festgelegt
  • client_context.env - Enthält Umgebungsdetails aus dem AWS Mobile SDK

Sehen wir uns ein Arbeitsbeispiel in Python an, das die Kontextdetails ausgibt. Beachten Sie den unten angegebenen Code -

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

Die entsprechende Ausgabe des oben gezeigten Codes ist unten angegeben -

Protokollierung mit Python

Um Informationen mit Python zu protokollieren, können wir die verfügbare Druck- oder Protokollierungsfunktion verwenden. Verwenden wir das obige Beispiel für den Kontext und überprüfen Sie inCloudWatch, ob die Protokolle gedruckt werden. Beachten Sie den folgenden Code -

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

Die Ausgabe dieses Codes in CloudWatch ist wie folgt:

Beachten Sie das folgende Beispiel, um zu verstehen, wie Sie mit Logger Protokolle in CloudWatch drucken.

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
   logger.info('Using logger to print messages to cloudwatch logs')
   return "aws lambda in python using zip file"

Die Ausgabe hierfür erfolgt wie im folgenden Screenshot gezeigt -

Fehlerbehandlung in Python für Lambda-Funktion

In diesem Abschnitt sehen wir uns ein Arbeitsbeispiel an, das zeigt, wie Fehler in Python behandelt werden. Beachten Sie den hier angegebenen Code -

def error_handler(event, context):
   raise Exception('Error Occured!')

Die Protokollanzeige ist wie im Bild hier gezeigt -