AWS Lambda - Kurzanleitung

AWS Lambdaist ein Dienst, der Serverless Computing ausführt, bei dem ohne Server gerechnet wird. Der Code wird basierend auf der Reaktion von Ereignissen in AWS-Diensten ausgeführt, z. B. Hinzufügen / Entfernen von Dateien im S3-Bucket, Aktualisieren von Amazon Dynamo dB-Tabellen, HTTP-Anforderung vom Amazon API-Gateway usw.

Um damit zu arbeiten AWS Lambdamüssen wir nur den Code im AWS Lambda-Service pushen. Alle anderen Aufgaben und Ressourcen wie Infrastruktur, Betriebssystem, Serverwartung, Codeüberwachung, Protokolle und Sicherheit werden von AWS übernommen.

AWS Lambdaunterstützt Sprachen wie Java, NodeJS, Python, C # und Go. Beachten Sie, dass AWS Lambda nur mit AWS-Diensten funktioniert.

Was ist AWS Lambda?

Die Definition von AWS Lambda in der offiziellen Dokumentation lautet wie folgt:

AWS Lambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitzustellen oder zu verwalten. AWS Lambda führt Ihren Code nur bei Bedarf aus und skaliert automatisch von wenigen Anforderungen pro Tag bis zu Tausenden pro Sekunde. Sie zahlen nur für die Rechenzeit, die Sie verbrauchen. Wenn Ihr Code nicht ausgeführt wird, fallen keine Gebühren an.

Wie funktioniert AWS Lambda?

Das Blockdiagramm, das die Arbeitsweise von AWS Lambda in fünf einfachen Schritten erklärt, ist unten dargestellt:

Step 1 − Laden Sie AWS-Lambda-Code in eine der von AWS Lambda unterstützten Sprachen hoch, dh NodeJS, Java, Python, C # und Go.

Step 2 − Dies sind nur wenige AWS-Services, für die AWS Lambda ausgelöst werden kann.

Step 3 −AWS Lambda mit dem Upload-Code und den Ereignisdetails, bei denen der Trigger aufgetreten ist. Zum Beispiel Ereignisse von Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, mobiler App usw.

Step 4 − Führt AWS Lambda Code nur aus, wenn er von AWS Services unter folgenden Szenarien ausgelöst wird:

  • Der Benutzer lädt Dateien in den S3-Bucket hoch
  • http get / post Endpunkt URL wird getroffen
  • Daten werden in Dynamo-dB-Tabellen hinzugefügt / aktualisiert / gelöscht
  • Push-Benachrichtigung
  • Sammlung von Datenströmen
  • Hosting der Website
  • E-Mail senden
  • mobile App usw.

Step 5 − Denken Sie daran, dass AWS nur dann Gebühren erhebt, wenn der AWS-Lambda-Code ausgeführt wird, und nicht anders.

Vorteile der Verwendung von AWS Lambda

AWS Lambda bietet mehrere Vorteile, wenn Sie daran arbeiten. In diesem Abschnitt werden sie ausführlich erläutert -

Einfache Arbeit mit Code

AWS Lambda bietet Ihnen die Infrastruktur zum Hochladen Ihres Codes. Es kümmert sich um die Pflege des Codes und löst den Code aus, wenn das erforderliche Ereignis eintritt. Hier können Sie den Speicher und das für den Code erforderliche Zeitlimit auswählen.

AWS Lambda kann auch parallele Anforderungen gemäß den Ereignisauslösern ausführen.

Protokollbereitstellung

AWS Lambda gibt an, wie oft ein Code ausgeführt wurde und wie lange er ausgeführt wurde, wie viel Speicher benötigt wurde usw. AWS CloudWatch sammelt alle Protokolle, um den Ausführungsablauf zu verstehen und den Code zu debuggen.

Abrechnung nach Nutzung

Die AWS Lambda-Abrechnung erfolgt nach Speichernutzung, angeforderter Anforderung und Ausführung, die in Schritten von mindestens 100 ms abgerechnet wird. Bei einer Ausführung von 500 ms erfolgt die Abrechnung alle 100 ms. Wenn Sie Ihren AWS-Lambda-Code angeben, der in 500 ms ausgeführt werden soll, und die Ausführungszeit nur 200 ms beträgt, berechnet AWS Ihnen nur die benötigte Zeit, dh 200 ms Ausführungszeit anstelle von 500 ms. AWS berechnet immer die verwendete Ausführungszeit. Sie müssen nicht bezahlen, wenn die Funktion nicht ausgeführt wird.

Unterstützung für mehrere Sprachen

AWS Lambda unterstützt beliebte Sprachen wie Node. js, Python, Java, C # und Go. Dies sind weit verbreitete Sprachen, und jeder Entwickler wird es leicht finden, Code für AWS Lambda zu schreiben.

Einfache Erstellung und Bereitstellung von Code

Für Lambda stehen viele Optionen zum Erstellen und Bereitstellen von Code zur Verfügung. Zum Schreiben Ihres Codes können Sie den AWS-Online-Editor, die Visual Studio-IDE oder die Eclipse-IDE verwenden. Es unterstützt auch ein serverloses Framework, das das Schreiben und Bereitstellen von AWS Lambda-Code vereinfacht. Neben der AWS-Konsole verfügen wir über AWS-cli zum Erstellen und Bereitstellen von Code.

Andere Eigenschaften

Sie können AWS Lambda kostenlos verwenden, indem Sie sich bei AWS Free Tier anmelden. Sie erhalten 1 Jahr lang kostenlosen Service. Werfen Sie einen Blick auf die kostenlosen Services von AWS Free Tier.

Nachteile der Verwendung von AWS Lambda

Trotz vieler Vorteile weist AWS Lambda die folgenden Nachteile auf:

  • Es ist nicht für kleine Projekte geeignet.

  • Sie müssen Ihren Code sorgfältig analysieren und den Speicher und das Zeitlimit festlegen. Wenn Ihre Funktion mehr Zeit benötigt als zugewiesen, wird sie gemäß dem darin angegebenen Zeitlimit beendet und der Code wird nicht vollständig ausgeführt.

  • Da AWS Lambda für die Infrastruktur vollständig auf AWS angewiesen ist, können Sie keine zusätzliche Software installieren, wenn Ihr Code dies erfordert.

Ereignisse, die AWS Lambda auslösen

Die Ereignisse, die AWS Lambda auslösen können, sind wie folgt:

  • Eintrag in ein S3-Objekt
  • Einfügen, Aktualisieren und Löschen von Daten in die Dynamo DB-Tabelle
  • Push-Benachrichtigungen von SNS
  • GET / POST-Aufrufe an API Gateway
  • Änderung der Header beim Viewer oder Anforderung / Antwort des Ursprungs in CloudFront
  • Protokolleinträge im AWS Kinesis-Datenstrom
  • Protokollverlauf in CloudTrail

Anwendungsfälle von AWS Lambda

AWS Lambda ist ein Rechendienst, der hauptsächlich zum Ausführen von Hintergrundprozessen verwendet wird. Es kann ausgelöst werden, wenn es mit anderen AWS-Diensten verwendet wird. Die Liste der AWS-Services, bei denen wir AWS Lambda verwenden können, ist unten aufgeführt:

S3 Object und AWS Lambda

Amazon S3 übergibt die Ereignisdetails an AWS Lambda, wenn in S3 Dateien hochgeladen werden. Die Details zum Hochladen oder Löschen der Datei oder zum Verschieben der Datei werden an AWS Lambda übergeben. Der Code in AWS Lambda kann den erforderlichen Schritt ausführen, wenn er die Ereignisdetails empfängt. Zum Beispiel Erstellen einer Miniaturansicht des in S3 eingefügten Bildes.

DynamoDB und AWS Lambda

DynamoDB kann AWS Lambda auslösen, wenn Daten in der Tabelle hinzugefügt, aktualisiert und gelöscht werden. Das AWS Lambda-Ereignis enthält alle Details der AWS DynamoDB-Tabelle zum Einfügen / Aktualisieren oder Löschen.

API Gateway und AWS Lambda

API Gateway kann AWS Lambda bei GET / POST-Methoden auslösen. Wir können ein Formular erstellen und Details mit dem API Gateway-Endpunkt teilen und es mit AWS Lambda für die weitere Verarbeitung verwenden, z. B. um einen Eintrag der Daten in die DynamoDB-Tabelle vorzunehmen.

SNS und AWS Lambda

SNS wird für Push-Benachrichtigungen, das Senden von SMS usw. verwendet. Wir können AWS Lambda auslösen, wenn in SNS Push-Benachrichtigungen stattfinden. Wir können auch SMS an die Telefonnummer von AWS Lambda senden, wenn dieser den Auslöser empfängt.

Geplante Veranstaltungen und AWS Lambda

Geplante Ereignisse können für Cron-Jobs verwendet werden. Es kann AWS Lambda dazu veranlassen, die Aufgabe zum regulären Zeitmuster auszuführen.

CloudTrail und AWS Lambda

CloudTrail kann bei der Überwachung der Protokolle des Kontos hilfreich sein. Wir können AWS Lambda verwenden, um die CloudTrail-Protokolle weiterzuverarbeiten.

Kinesis und AWS Lambda

Kinesis wird zum Erfassen / Speichern von Echtzeit-Tracking-Daten verwendet, die von Website-Klicks, Protokollen, Social Media-Feeds stammen, und ein Auslöser für AWS Lambda kann zusätzliche Verarbeitung für diese Protokolle durchführen.

CloudFront und Lambda @ Edge

CloudFront ist ein Netzwerk zur Bereitstellung von Inhalten, in dem Sie Ihre Website hosten können. Mit Lambda @ Edge können die Header verarbeitet werden, die aus der Viewer-Anfrage, der Ursprungsanforderung, der Ursprungsantwort und der Viewer-Antwort stammen. Die Änderung der Header umfasst Aufgaben wie das Ändern von Cookie-Daten, das Umschreiben von URLs, das für AB-Tests zum Ändern der an den Benutzer zurückgesendeten Antwort verwendet wird, das Hinzufügen zusätzlicher Header-Informationen aus Sicherheitsgründen usw.

Bevor Sie mit AWS Lambda arbeiten können, müssen Sie sich mit der Amazon-Konsole anmelden. AWS Lambda unterstützt zwei IDEs:Visual studio und Eclipse. In diesem Kapitel werden wir die schrittweise Installation von AWS Lambda ausführlich erläutern.

Erstellen Sie eine Anmeldung in der AWS Console

Sie können Ihr Login in AWS Console kostenlos mit Amazon Free Tier erstellen. Sie können die folgenden Schritte ausführen, um mit amazon ein Login zu erstellen und die Amazon-Dienste zu nutzen.

Schritt 1

Gehe zu https://aws.amazon.com/free/und klicken Sie auf Kostenloses Konto erstellen. Sie können den Screenshot wie unten gezeigt sehen -

Schritt 2

Klicke auf Create a Free Account Klicken Sie auf die Schaltfläche und Sie werden wie unten gezeigt zum Bildschirm weitergeleitet.

Geben Sie nun die Details der E-Mail-Adresse, des Kennworts und des AWS-Kontonamens gemäß Ihrer Auswahl in das oben gezeigte Formular ein und klicken Sie auf Continue.

Schritt 3

Jetzt finden Sie den Bildschirm wie unten gezeigt -

Geben Sie alle erforderlichen Details in dieses Formular ein.

Beachten Sie, dass je nach ausgewähltem Land Mindestgebühren zu zahlen sind. Das Gleiche wird erstattet, sobald die eingegebenen Daten bestätigt wurden. Sie benötigen Kredit- oder Debitkartendaten, um das kostenlose Konto zu erstellen. Für indische BenutzerRs 2/- wird abgezogen und für US $1 wird dem jeweiligen Kartenbenutzer erstattet, sobald der Benutzer validiert ist.

Bitte beachten Sie, dass das Konto kostenlos ist und die Nutzung der Dienste begrenzt ist. Wenn die Nutzung das Limit überschreitet, wird dem Benutzer eine Gebühr berechnet.

Sobald die Details in das oben gezeigte Formular eingegeben wurden, klicken Sie auf Create Account and Continue.

Sie werden wie unten gezeigt zum nächsten Bildschirm weitergeleitet.

Schritt 4

Sie müssen die Zahlungsdetails (Kreditkarte oder Debitkarte) sowie das Ablaufdatum und den Namen des Karteninhabers wie unten angegeben eingeben.

Schritt 5

Sobald alle Details eingegeben wurden, klicken Sie auf Secure Submit und es wird die Karte bei der Bank validieren und Ihnen die geben OTPauf Ihrem Handy, das mit der Karte verknüpft ist. Sie finden ein Fenster wie unten gezeigt -

Geben Sie nun die ein OTP Details und klicken Make Payment. Sie werden basierend auf dem ausgewählten Land belastet.

Schritt 6

Sobald die Zahlung abgeschlossen ist, ist der nächste Schritt die telefonische Bestätigung. Sie müssen Ihre Handynummer wie unten gezeigt eingeben -

Sobald die Details ausgefüllt sind, klicken Sie auf Call Me Now. AWS ruft sofort über ein automatisiertes System an. Wenn Sie beim Anruf dazu aufgefordert werden, geben Sie die 4-stellige Nummer, die auf Ihrer AWS-Site angezeigt wird, über die Telefontastatur in Ihr Telefon ein. Dadurch wird Ihre Nummer überprüft und Sie erhalten die E-Mail-Aktivierung in der E-Mail-ID, die zu Beginn beim Erstellen der Anmeldung angegeben wurde.

Schritt 7

Klicken Sie auf den E-Mail-Link, geben Sie den Kontonamen oder die E-Mail-ID sowie das Kennwort ein und melden Sie sich wie unten gezeigt bei den AWS-Diensten an.

Der Kontoname wird wie oben gezeigt in der oberen rechten Ecke angezeigt. Sie können jetzt den AWS Lambda-Service verwenden. Für den AWS Lambda-Dienst werden NodeJS, Python, Java, C # und Go unterstützt.

Installation von Visual Studio 2017

Es gibt 2 mit AWS kompatible IDEs: Visual Studio und Eclipse. In diesem Abschnitt wird die Installation von Visual Studio 2017 unter Windows und Linux Mac erläutert. Gehen Sie zur offiziellen Website von Visual Studio:https://www.visualstudio.com/downloads/. Sie finden den Begrüßungsbildschirm wie gezeigt -

Laden Sie die Community-Version herunter, dh Visual Studio Community 2017da es jetzt kostenlos zum Üben ist. Nach der Installation werden Sie durch die Installationsschritte geführt, in denen Sie Pakete auswählen müssen, die später verwendet werden sollen. Sie können auswählen nodejs, python, c# Paket für uns später zu arbeiten.

AWS Toolkit-Unterstützung für Visual Studio 2017

Sobald Sie Visual Studio 2017 installiert haben, müssen Sie die angegebenen Schritte zum Installieren der AWS Toolkit-Unterstützung für Visual Studio 2017 ausführen.

Schritt 1

Gehe zu https://aws.amazon.com/visualstudio/ und laden Sie das AWS-Toolkit für Visual Studio herunter. Die Anzeige ist wie folgt:

Beachten Sie, dass das für Visual Studio 2017 heruntergeladene Paket lautet vsixPaket. Wenn Ihre Visual Studio-Version zwischen 2013 und 2015 liegt, wird a installiertmsiInstallateur. Drücke denDownload Taste wie unten gezeigt.

Schritt 2

Doppelklicken Sie nun auf das heruntergeladene vsix-Paket, um die folgenden Installationsschritte auszuführen.

Nach der erfolgreichen Installation von Visual Studio wird ein Fenster angezeigt (siehe unten).

Schritt 3

Öffnen Sie jetzt Visual Studio 2017 und Sie sollten eine Begrüßungsseite von AWS sehen, wie unten gezeigt -

Beachten Sie, dass Sie den Zugriffsschlüssel, den geheimen Schlüssel und die Kontonummer hinzufügen müssen, um loszulegen und die AWS-Dienste von Visual Studio.s zu verwenden

AWS Lambda BoilerPlate für NodeJS

Sie können es mit verwenden visual studio code Wie nachfolgend dargestellt.

Schritt 1

Sie können herunterladen Visual studio code kostenlos von der offiziellen Website:https://www.visualstudio.com/downloads/. Die Homepage von Visual Studio-Downloads sieht folgendermaßen aus:

Schritt 2

Öffnen Sie nun den Visual Studio-Code wie unten gezeigt -

Schritt 3

So installieren Sie die Unterstützung für AWS: support for nodejsOption ist in Erweiterungen verfügbar. Sie können nach AWS suchen und die Option wird wie folgt angezeigt:

Schritt 4

Installieren Sie nun die Boilerplate für AWS Lambda in nodejs wie gezeigt -

Schritt 5

Klicken Sie auf das Repository und klonen Sie es in Visual Studio, um die Lambda-Funktion in Visual Studio zu schreiben. Sie werden zu diesem Repository weitergeleitet, das wir in Visual Studio klonen können:https://github.com/loganarnett/vscode-lambda-snippets. Öffnen Sie nun die Befehlspalette vonView Option in Visual Studio.

Schritt 6

Klicken Sie darauf und wählen Sie den Git-Klon wie unten gezeigt -

Schritt 7

Geben Sie die Repository-URL ein und speichern Sie sie nach Ihrer Wahl lokal. Erstellenindex.js Datei wie unten gezeigt, um mit der Lambda-Funktion zu arbeiten -

Installation der Eclipse IDE

Jetzt müssen Sie die neueste Eclipse Java EE IDE installieren. Sie können es von der offiziellen Eclipse-Website herunterladen:https://www.eclipse.org/downloads/

AWS Toolkit-Unterstützung für Eclipse IDE

Führen Sie nach der Installation von Eclipse die folgenden Schritte aus:

Schritt 1

Gehen Sie zur Hilfe aus dem Menü und klicken Sie auf Install New Software.

Schritt 2

Eingeben https://aws.amazon.com/eclipse im beschrifteten Textfeld Work with am oberen Rand des Dialogs.

Schritt 3

Wählen Sie nun die gewünschte aus AWS Core Management Tools und andere optionale Elemente aus der unten gezeigten Liste.

Schritt 4

Klicken Sie nun auf Next. Eclipse führt Sie durch die verbleibenden Installationsschritte, wie in den folgenden Schritten angegeben.

Schritt 5

Die AWS-Kernmodule werden im folgenden Raster angezeigt (siehe Abbildung unten).

Schritt 6

Nach der Installation ist das AWS-Tool wie unten gezeigt in Eclipse verfügbar.

Schritt 7

Sie können den folgenden Bildschirm sehen, wenn Sie auf den Amazon-Dienst klicken.

Klicken Sie nun auf AWS Explorer, um die verfügbaren Dienste anzuzeigen. Wir werden in den nächsten Kapiteln diskutieren, wie man mit der installierten IDE arbeitet.

AWS Lambda ist ein Dienst, der sich um die Berechnung Ihres Codes ohne Server kümmert. Es soll serverloses Rechnen sein. Der Code wird basierend auf der Reaktion von Ereignissen in AWS-Diensten wie Hinzufügen / Entfernen von Dateien im S3-Bucket, Aktualisieren von Amazon DynamoDBtables, HTTP-Anforderungen vom Amazon Api-Gateway usw. ausgeführt.

AWS Lambda-Code kann in NodeJS, Java, C #, Python und Go geschrieben werden. In diesem Kapitel wird ausführlich auf das Erstellen der AWS Lambda-Funktion in der AWS-Konsole eingegangen.

AWS-Konsole

Melden Sie sich unter dem Link bei AWS Console an https://aws.amazon.com/console. Sobald Sie sich angemeldet haben, werden Sie zu dem Bildschirm weitergeleitet, auf dem AWS-Services angezeigt werden.

Beispiel: Erstellen einer Funktion

Lassen Sie uns die Funktionalität von AWS Console anhand eines Beispiels verstehen. Klicken Sie auf Lambda (oben markiert). Es wird umgeleitet, um eine Funktion wie unten gezeigt zu erstellen.

Klicken Create function Schaltfläche und der Bildschirm zeigt folgende Details an -

Beachten Sie, dass die Option standardmäßig ist Author from scratch. Mit dieser Option können Sie den Lambda-Code von Grund auf neu schreiben. Es wird nur eine einfache Funktion mit habenhello world Botschaft.

Die zweite Option Blue prints hat folgende Details.

Es enthält Details zu Code, der bereits für einige der aws-Dienste in den mit AWS Lambda verfügbaren Sprachen geschrieben wurde. Falls Sie AWS Lambda-Code für alle Dienste schreiben müssen, die Sie einchecken könnenblue prints und loslegen.

Die dritte Option Serverless Application Repository hat die Einrichtung einer serverlosen Anwendung, die bei der Bereitstellung des AWS Lambda-Codes hilft.

In der weiteren Diskussion werden wir an der ersten Option arbeiten, bei der wir die AWS-Lambda-Funktion mit erstellen Author from scratch.

Bevor wir die Lambda-Funktion erstellen, benötigen wir eine Rolle, dh die Berechtigung zum Arbeiten mit AWS-Diensten und aws lambda. Später muss die Rolle der aws-Lambda-Funktion zugewiesen werden.

Rollenerstellung in AWS Console

Um eine Rolle in AWS Console zu erstellen, gehen Sie zu AWS Console Services und klicken Sie wie unten gezeigt auf IAM.

Nun, wenn Sie klicken IAM, Sie werden den Bildschirm wie unten gezeigt -

Wenn Sie auswählen Roleskönnen Sie die folgenden Schaltflächen auf dem Bildschirm sehen -

Klicken Sie nun auf Create role. Sie werden aufgefordert, den Dienst auszuwählen, bei dem Sie die erstellte Rolle verwenden möchten.

Da wir diese Rolle mit AWS Lambda verwenden müssen, wählen Sie Lambda und klicken Sie auf Next:PermissionsTaste wie oben gezeigt. Der nächste Bildschirm zeigt den Richtliniennamen an, der gemäß AWS-Services verfügbar ist. Sie können die Richtlinie hier auswählen -

Wenn Sie beispielsweise möchten, dass AWS Lambda mit S3 und DynamoDB arbeiten darf, müssen Sie die Richtlinie auswählen. Geben Sie im Suchfeld den AWS-Service ein und klicken Sie auf das Kontrollkästchen. Sie können mehrere Richtlinien auswählen und später auf klickenNext:Review.

Es ist auch möglich, eigene Richtlinien zu erstellen. Zum Beispiel gibt es eine Dynamodb-Tabelle, und Sie müssen nur dieser Tabelle die Berechtigung erteilen. In solchen Fällen können Sie eine Richtlinie erstellen.

Klicke auf Create policySchaltfläche wie im obigen Bildschirm gezeigt. Im Folgenden werden die Details auf dem Bildschirm angezeigt.

Wähle ein Servicefür die Sie die Richtlinie erstellen. Später werden Daten für Aktionen angezeigt.resources und Request conditions.

Jetzt sollten wir den Service wählen. Lassen Sie uns auswählenAWS Dynamodb von der Suche. Actions hat folgende Details -

Geben Sie nun die ein Access levelSie möchten DynamoDB geben. Dann,resources zeigt die folgenden Details an -

Wählen Sie nun den Tabellenressourcentyp aus. Sie können die folgende Ausgabe sehen -

Für die Erlaubnis auf dem Tisch müssen Sie Add ARN. ARN sind die Details, die für die in AWS DynamoDB erstellte Tabelle eindeutig sind. Sie erhalten die Details, wenn die Tabelle in dynamodb erstellt wird.

Wenn Sie klicken Add ARN und es werden folgende Details angezeigt -

Nun, wenn Sie die eingeben ARN und die Region, Account und TableName wird ausgefüllt. Sie sollten klickenAddSchaltfläche, um die Richtlinie hinzuzufügen. Ebenso können Sie Richtlinien für andere Dienste erstellen.

Hier haben wir zwei Richtlinien ausgewählt AmazonS3FullAccess und AmazonDynamoDBFullACcess. In dieser Rolle haben wir vollen Zugriff auf S3 und DynamoDB gewährt. Es wird jedoch empfohlen, nur die erforderlichen Buckets und Tabellen zuzulassen.

Sie können die zuvor beschriebenen Schritte ausführen, um die Richtlinien mithilfe von zu erstellen ARN.

Schritt 1

Klicken Create roleSchaltfläche, um die Rolle zu erstellen. Alle erstellten Rollen werden wie gezeigt angezeigt -

Schritt 2

Beachten Sie, dass Sie die gewünschte Rolle auswählen können, falls Sie Änderungen für die erstellte Rolle benötigen. Wenn wir auswählenAuthor from scratch optionmüssen Sie eingeben Name, Runtime and Role.

Schritt 3

Sie können die folgenden Details in beobachten Runtime Dropdown -

Schritt 4

Sie können die Laufzeit Ihrer Wahl auswählen und wie gezeigt fortfahren.

Role Dropdown hat folgende Optionen -

  • Choose an existing role − Dadurch werden alle in den IAM-Rollen erstellten Rollen angezeigt.

  • Create new role from template(s) −Auf diese Weise können Sie eine Rolle erstellen und die Berechtigung anzeigen, für diese Rolle ausgewählt zu werden. Beachten Sie den Screenshot zum besseren Verständnis.

  • Create a custom role − Auf diese Weise kann der Benutzer Richtlinien erstellen, wie bereits erläutert.

Schritt 5

Wähle aus runtime, roleund fügen Sie die Funktion hinzu. Klicke aufCreate functionTaste, um die Lambda-Funktion zu erstellen. Der nächste angezeigte Bildschirm lautet wie folgt:

Teile der AWS Lambda-Funktion

Die AWS Lambda-Funktion besteht aus zwei Teilen:Configuration und Monitoring. Lassen Sie uns jedes im Detail besprechen.

Aufbau

Die folgenden Funktionen sind in der Konfiguration enthalten.

Add Triggers

Die Trigger, die zum Hinzufügen zur AWS Lambda-Funktion benötigt werden, werden wie folgt angezeigt:

Beachten Sie, dass wir bei der Auswahl eines Triggers die Konfigurationsdetails für diesen Trigger hinzufügen müssen. Zum Beispiel für den S3-Trigger müssen wir den Bucket-Namen auswählen. Für den Dynamodb-Trigger müssen wir den Tabellennamen auswählen.

Beispiel

Sehen wir uns ein Beispiel für Konfigurationsdetails für einen S3-Trigger an -

Fügen Sie nun Konfigurationsdetails für den hinzugefügten S3-Trigger hinzu -

Hier müssen Sie die auswählen bucket name, event type auf dem Sie Lambda, Präfix und Filtermuster auslösen möchten, falls vorhanden und Add der Auslöser.

Hinzufügen von Code in Lambda

Jetzt sollten wir uns auf den zu schreibenden Lambda-Code konzentrieren. Um Code in aws lambda hinzuzufügen, gibt es drei Möglichkeiten:

  • Verwenden des Inline-Editors
  • ZIP-Datei verwenden
  • Datei von Amazon S3 hochladen

Es wird im folgenden Screenshot gezeigt -

Lassen Sie uns jeden von ihnen im Detail besprechen.

Using the inline editor

Der Inline-Code-Editor, in den Sie Ihren Code schreiben können, lautet wie folgt:

Sie können Ihren Code schreiben, indem Sie die Sprache Ihrer Wahl auswählen. Hier können Sie die Laufzeit erneut auswählen.

Beachten Sie zum besseren Verständnis den folgenden Screenshot -

Der Code muss geschrieben werden index.js.Handler. Details unterscheiden sich je nach Laufzeit. Zumnodejs, es ist filename.export function Das ist gerade jetzt index.lambda handler.

Upload a .ZIP file

Sie können den Code zuerst schreiben, komprimieren und die ZIP-Datei hochladen, indem Sie auswählen Upload a .ZIP file.

Upload a file from Amazon S3

Sie können die Datei in den S3-Bucket hochladen und die Option auswählen Upload a file from Amazon S3.

Beachten Sie, dass für .ZIP und S3 Die Laufzeit kann nicht geändert werden.

Umgebungsvariablen

Sie nehmen Schlüsselwertpaare auf und teilen sie mit AWS Lambda-Code. Wir können Umgebungsvariablen in AWS Lambda zum Speichern der Datenbankverbindungsdetails, Dateidetails zum Speichern der Ausgabe, Protokolldateidetails usw. verwenden.

Stichworte

Es handelt sich um Schlüssel-Wert-Paare, die AWS Lambda hinzugefügt wurden, um die Funktion bei Verwendung in verschiedenen Regionen besser zu organisieren. Für einen einfachen Anwendungsfall ist dies nicht erforderlich. Wenn viele Lambda-Funktionen erstellt wurden, hilft das Tagging beim Filtern und Verwalten der Lambda-Funktionen.

Ausführungsrolle

Sie können die Rolle hier erneut ändern, wenn dies zu Beginn der Erstellung der Lambda-Funktion nicht ordnungsgemäß erfolgt. Hier können Sie eine neue Rolle aktualisieren oder erstellen. Es bietet dieselben Optionen, die zu Beginn der Erstellung der Lambda-Funktion angezeigt wurden.

Grundeinstellungen

Hier müssen Sie die kurze Beschreibung Ihrer Lambda-Funktion eingeben. Wählen Sie den Speicher und das Timeout aus, die für die Lambda-Funktion erforderlich sind.

Netzwerk

Auf diese Weise können Sie die VPC auswählen, mit der Sie von der VPC aus auf die Lambda-Funktion zugreifen können. Standardmäßig ist keine VPC ausgewählt.

Debugging und Fehlerbehandlung

Für das Debuggen und die Fehlerbehandlung können Sie den AWS-Service auswählen, um die Details zu senden. Die verfügbaren Optionen sindNone, SNS und SQS.

Parallelität

Auf diese Weise können Sie eine bestimmte Anzahl gleichzeitiger Ausführungen zuweisen, die für diese Funktion zulässig sind.

Prüfung und Einhaltung

Diese enthält Protokolle, die mit Hilfe von AWS CloudTrail verwaltet werden.

Sobald Sie fertig sind, müssen Sie die Änderungen über die Schaltfläche Speichern speichern, wie hier gezeigt -

Nun, wenn Sie klicken TestKlicken Sie auf die Schaltfläche, um nach einem Testereignis zu fragen. Sie können ein Beispieltestereignis wie folgt bestehen:

Das erstellte Testereignis ist wie hier gezeigt -

Speichern Sie nun das Testereignis und klicken Sie auf die Schaltfläche Test, um die Ausführung der AWS Lambda-Funktion anzuzeigen.

Der Code für index.js ist wie folgt -

exports.lambdahandler = (event, context, callback) => {
   // TODO implement
   console.log(event.key1);
   console.log(event.key2);
   console.log(event.key3);
   callback(null, 'Lambda test');
};

Beachten Sie, dass die Rückruffunktion aufgerufen wird, wenn ein Fehler oder Erfolg vorliegt. Wenn Erfolg, können Sie sehenLambda test wird angezeigt.

Überwachung

Wählen Sie die Registerkarte Überwachung, um die Ausführungsdetails der Lambda-Funktion anzuzeigen. Die Grafiken zeigen die Details der Ausführungszeit, aufgetretene Fehler usw.

Sie können die Protokolle auch in Cloudwatch anzeigen. Gehen Sie dazu zu AWS Services und wählen Sie Cloudwatch wie gezeigt aus -

Wählen Sie nun Protokolle von der linken Seite aus und geben Sie Ihren Funktionsnamen in den Filter ein -

Die AWS Lambda-Funktion führt beim Aufrufen einen Code aus. In diesem Kapitel werden alle diese Schritte im Lebenszyklus der AWS Lambda-Funktion ausführlich beschrieben.

Schritte zum Erstellen einer Lambda-Funktion

Der Lebenszyklus der Lambda-Funktion umfasst vier notwendige Schritte:

  • Authoring
  • Deploying
  • Monitoring
  • Troubleshooting

Verfassen des Lambda-Codes

Der AWS Lambda-Funktionscode kann in folgenden Sprachen geschrieben werden:

  • NodeJS
  • Java,
  • Python
  • C#
  • Go.

Wir können Code für AWS Lambda mithilfe der AWS-Konsole, der AWS CLI, der Eclipse-IDE, der Visual Studio-IDE, des serverlosen Frameworks usw. schreiben.

Die folgende Tabelle zeigt eine Liste der Sprachen sowie der verschiedenen Tools und IDE, mit denen die Lambda-Funktion geschrieben werden kann.

Sprache IDE zum Erstellen von Lambda-Code
NodeJS

AWS Lambda-Konsole

Visual Studio IDE

Java Eclipse IDE
Python AWS Lambda-Konsole
C #

Visual Studio IDE

.NET-Kern

Gehen AWS Lambda-Konsole

Bereitstellen von Lambda-Code

Sobald Sie die Sprache festgelegt haben, in die Sie die Lambda-Funktion schreiben möchten, gibt es zwei Möglichkeiten, den Code bereitzustellen:

  • Schreiben Sie den Code direkt in die AWS-Konsole
  • Zip oder jar die Dateien mit allen Dateien und Abhängigkeiten

Denken Sie jedoch daran, dass die richtige Berechtigung für die Zip-Datei erteilt werden muss.

Testen des Lambda-Codes

Lambda-Code kann auf Ereignisse in der AWS Lambda-Konsole getestet werden. Es ist auch möglich, die Lambda-Funktion über die AWS-CLI und die Serverless-CLI zu testen. Die AWS-Konsole verfügt auch über Ereignisdaten, die beim Testen der AWS Lambda-Funktion als Beispielereignisse verwendet werden können.

Überwachung der Lambda-Funktion

Die Überwachung der Lambda-Funktion kann mit der AWS CloudWatch erfolgen. Wir können die erforderlichen Protokollnachrichten in den von uns ausgewählten Sprachen hinzufügen und in AWS CloudWatch anzeigen.

Um mit dem Schreiben der Lambda-Funktion zu beginnen, muss ein Muster befolgt werden. Das Folgende sind die wichtigsten Kernkonzepte für das Schreiben einer Lambda-Funktion:

Handler

Handler ist ein Name der AWS-Lambda-Funktion, von der aus die Ausführung beginnt. Es wird in der AWS-Konsole wie unten gezeigt angezeigt -

Beachten Sie, dass wir hier den Standardhandler in einen anderen Namen geändert und diesen im Handler aktualisiert haben -

Beachten Sie, dass sich die Art und Weise, wie ein Handler aufgerufen wird, von den als Laufzeit ausgewählten Sprachen unterscheidet.

Parameter an Handler übergeben

Wenn Sie die Handlerfunktion beobachten, sind die übergebenen Parameter event, context und call back function wie unten gezeigt -

Event Der Parameter enthält alle Details für den verwendeten Trigger.

ContextDer Parameter kümmert sich im Wesentlichen um die Laufzeitdetails, damit die Lambda-Funktion ausgeführt werden kann. Wir können mit der Lambda-Funktion über die interagierencontextparam. Es enthält Details wie die verbleibende Zeit, bevor AWS Lambda eine Funktion beendet, dh das beim Erstellen der Lambda-Funktion angegebene Zeitlimit, den Namen der Lambda-Funktion, den Namen der Cloudwatch-Gruppe, Arn-Details usw.

Beispiel

Lassen Sie uns die Details des AWS Lambda-Kontextobjekts anhand eines Beispiels verstehen -

exports.lambdahandler = (event, context, callback) => {
   // TODO implement
   console.log("context object details");
   console.log(JSON.stringify(context));
   callback(null, 'Lambda test');
};

Wenn Sie die oben gezeigte Lambda-Funktion ausführen, sehen Sie die folgende Ausgabe:

Ausgabe

Das context Details sind wie folgt angegeben -

{
   "callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/myfirstlambdafunction",
   "logStreamName":"2018/05/20/[$LATEST]04f17ee4ff7048d5bb1fedffaa807c71","functionName":
   "myfirstlambdafunction","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":
   "c931e21c-5bf3-11e8-acfe-47fdbb39eee9","awsRequestId":"c931e21c-5bf3-11e8-acfe-47fdbb39eee9",
   "invokedFunctionArn":"arn:aws:lambda:us-east-1:625297745038:function:myfirstlambdafunction"
}

Beachten Sie, dass es Details wie Funktionsname, Speicherlimit, Anforderungs-ID usw. enthält.

Protokollierung

Die in der Lambda-Funktion hinzugefügten Protokolle werden in AWS CloudWatch angezeigt, wenn die AWS-Funktion ausgeführt wird. Die Protokollsyntax hängt von der ausgewählten Sprache ab. Zum Beispiel innodejsist es console.log.

Dies ist die Ausgabe, die Sie in AWSCloudWatch sehen können -

Fehlerbehandlung

Die AWS Lambda-Funktion bietet eine Rückruffunktion, mit der die Lambda-Funktion benachrichtigt wird, dass ein Fehler oder Erfolg aufgetreten ist. Beachten Sie, dass wir hier nodejs als Laufzeit verwendet haben. Die Fehlerbehandlung unterscheidet sich je nach ausgewählter Sprache.

Beachten Sie das hier gegebene Beispiel zum besseren Verständnis -

exports.lambdahandler = (event, context, callback) => {
   // TODO implement
   var error = new Error("There is error in code");
   callback(error);
};

Ausgabe

Wenn Sie den Lambda-Code testen, finden Sie die Ausgabe wie unten gezeigt -

Die Protokolldetails lauten wie folgt:

Nodejs ist eine der Sprachen, die von der AWS Lambda-Funktion unterstützt werden. Die von nodejs unterstützte Version ist v6.10 und v8.10. In diesem Kapitel werden wir verschiedene Funktionen der AWS Lambda-Funktion in NODEJS im Detail kennenlernen.

Handler in NodeJS

Um die AWS Lambda-Funktion in nodejs zu schreiben, sollten wir zuerst einen Handler deklarieren. Der Handler in nodejs ist der Name der Datei und der Name der Exportfunktion. Der Name der Datei lautet beispielsweiseindex.js und der Name der Exportfunktion lautet lambda handler, so ist sein entsprechender Handler index.lambdahandler

Beobachten Sie einen hier gezeigten Beispielhandler -

exports.lambdahandler = function(event, context, callback) {   //code goes here}

Parameter zum Handler

Der Handler ist der Hauptkern für den Aufbau der Lambda-Funktion. Der Handler akzeptiert drei Parameter:event, context und callback.

Ereignisparameter

Es werden alle Details des Ereignisses ausgelöst. Wenn wir beispielsweise die Lambda-Funktion verwenden, die in S3 ausgelöst wird, enthält das Ereignis Details zum S3-Objekt.

Kontextparameter

Es enthält die Details des Kontexts wie die Eigenschaften und Konfigurationsdetails der Lambda-Funktion.

Rückruffunktion

Es hilft dabei, dem Anrufer Details zurückzugeben. Die Struktur des Rückrufs sieht wie folgt aus:

callback(error, result);

Die Parameter der Rückruffunktion werden nachfolgend erläutert -

Error −Dies enthält Details, wenn während der Ausführung der Lambda-Funktion ein Fehler aufgetreten ist. Wenn die Lambda-Funktion erfolgreich ist,null kann als erster Parameter für die Rückruffunktion übergeben werden.

Result −Dies gibt die Details der erfolgreichen Ausführung der Lambda-Funktion an. Wenn ein Fehler auftritt, wird der Ergebnisparameter ignoriert.

Note −Die Rückruffunktion in AWS Lambda muss nicht verwendet werden. Falls keine Rückruffunktion vorhanden ist, gibt der Handler diese als null zurück.

Die gültigen Rückrufsignaturen sind unten angegeben -

callback();                // It will return success, but no indication to the caller
callback(null);            // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error);           //  It will return the error indication to the caller

Immer wenn AWS Lambda ausgeführt wird, werden die Rückrufdetails wie Fehler oder Erfolg in AWS CloudWatch zusammen mit etwaigen Konsolenmeldungen protokolliert.

Arbeiten mit AWS Lambda in Nodejs8.10

Lassen Sie uns verstehen, wie Sie mit AWS Lambda in nodejs8.10 arbeiten und die Funktion synchron und asynchron aufrufen.

Synchrones Aufrufen der Lambda-Funktion

Das folgende Beispiel gibt Ihnen eine Vorstellung davon, wie Sie die Lambda-Funktion synchron aufrufen können:

exports.handler = function(event, context, callback) {
   let arrItems = [4,5,6,8,9,10,35,70,80,31];
   function countevennumbers (items) {
      return new Promise(resolve => {
         setTimeout(() => {
            let a = 0;
            for (var i in items) {
               if (items[i] % 2 == 0) {
                  a++;
               } 
            }
            resolve(a);
         },2000);
      });
   }
   let evennumber = countevennumbers(arrItems);
   callback(null,'even numbers equals ='+evennumber);
};

Nach dem Testen dieses Codes in der AWS-Konsole können Sie die folgende Ausgabe beobachten:

Beachten Sie, dass die Ausgabe des obigen Codes ein Versprechungsobjekt ist. Die Anzahl wird nicht angegeben, da die Anzahl innerhalb eines setTimeout erhöht wird und der Funktionsaufruf nicht auf die Ausführung in setTimeout wartet und das Versprechen-Objekt zurückgibt.

Wenn wir hätten async/await Bei der Handler-Funktion wird die Lambda-Funktion exakt ausgegeben.

Asynchrones Aufrufen des Handlers

Das folgende Beispiel gibt Ihnen eine Vorstellung davon, wie Sie die Lambda-Funktion asynchron aufrufen können:

exports.handler = async function(event, context, callback) {
   let arrItems = [4,5,6,8,9,10,35,70,80,31];
   function countevennumbers (items) {
      return new Promise(resolve => {
         setTimeout(() => {
            let a = 0;
            for (var i in items) {
               if (items[i] % 2 == 0) {
                  a++;
               } 
            }
            resolve(a);
         }, 2000);
      });
   }
   let evennumber = await countevennumbers(arrItems);
   callback(null,'even numbers equals ='+evennumber);
};

Wir haben hinzugefügt async und awaitim obigen Code. Wenn wir verwendenawaitNeben dem Funktionsaufruf wird die Ausführung angehalten, bis das Versprechen innerhalb der Funktion aufgelöst wird. Beachten Sie, dassawait ist nur gültig für async Funktionen.

Nach dem Testen dieses Codes in der AWS-Konsole können Sie die folgende Ausgabe beobachten:

ContextDetails in NodeJS

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

Die folgende Tabelle zeigt die Liste der Methoden und Attribute, die mit dem Kontextobjekt verfügbar sind.

Methode für Kontextobjekt verfügbar

Sr.Nr. Methodenname & Beschreibung
1

getRemainingTimeInMillis()

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

Für das Kontextobjekt verfügbare Attribute

Sr.Nr. Attributname & Beschreibung
1

functionName

Dies gibt den AWS Lambda-Funktionsnamen an

2

functionVersion

Dadurch wird die Version der AWS Lambda-Funktion ausgeführt

3

nvokedFunctionArn

Dies gibt ARN Details.

4

memoryLimitInMB

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

5

awsRequestId

Dies gibt die AWS-Anforderungs-ID an.

6

logGroupName

Dies gibt den Namen des Cloudwatch-Gruppennamens an

7

logStreamName

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

8

identity

Dies gibt Details über den Amazon Cognito Identity Provider an, wenn er mit aws mobile sdk verwendet wird.

Details angegeben sind wie folgt -

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

clientContext

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

Schauen Sie sich das folgende Beispiel an, um eine bessere Vorstellung vom Kontextobjekt zu erhalten:

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log('Remaining time =>', context.getRemainingTimeInMillis());
   console.log('functionName =>', context.functionName);
   console.log('AWSrequestID =>', context.awsRequestId);
   console.log('logGroupName =>', context.log_group_name);
   console.log('logStreamName =>', context.log_stream_name);
   console.log('clientContext =>', context.clientContext);
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

Nach dem Testen dieses Codes in der AWS-Konsole können Sie die folgende Ausgabe beobachten:

Nach dem Testen dieses Codes in der AWS-Konsole können Sie die folgende Protokollausgabe beobachten:

Anmelden bei NodeJS

Wir können console.log zum Anmelden in NodeJS verwenden. Die Protokolldetails können vom CloudWatch-Dienst über die Lambda-Funktion abgerufen werden.

Beachten Sie zum besseren Verständnis das folgende Beispiel:

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log('Logging for AWS Lamnda in NodeJS');
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

Nach dem Testen dieses Codes in der AWS-Konsole können Sie die folgende Ausgabe beobachten:

Sie können den folgenden Screenshot von CloudWatch aus sehen -

Fehlerbehandlung in NodeJS

Lassen Sie uns verstehen, wie die Fehlerbenachrichtigung in NodeJS erfolgt. Beachten Sie den folgenden Code -

exports.handler = function(event, context, callback) {
   // This Source code only throws error. 
   var error = new Error("something is wrong");
   callback(error);   
};

In der Protokollausgabe können Sie Folgendes beobachten:

Die Fehlerdetails werden im Rückruf wie folgt angegeben:

{
   "errorMessage": "something is wrong",
   "errorType": "Error",
   "stackTrace": [    "exports.handler (/var/task/index.js:2:17)"  ]
}

In diesem Kapitel erfahren Sie im Detail, wie Sie eine einfache AWS Lambda-Funktion in Java im Detail erstellen.

JAR-Datei in Eclipse erstellen

Bevor Sie mit der Erstellung einer Lambda-Funktion in AWS beginnen, benötigen wir die Unterstützung des AWS-Toolkits für Eclipse. Anleitungen zur Installation derselben finden Sie in derEnvironment Setup Kapitel in diesem Tutorial.

Befolgen Sie nach Abschluss der Installation die hier angegebenen Schritte -

Schritt 1

Öffnen Sie die Eclipse-IDE und erstellen Sie ein neues Projekt mit AWS Lambda Java Project. Beachten Sie zum besseren Verständnis den folgenden Screenshot.

Schritt 2

Sobald Sie auswählen Nextwird der unten gezeigte Bildschirm umgeleitet -

Schritt 3

Jetzt wird ein Standardcode für den Eingabetyp erstellt Custom. Sobald Sie klickenFinish Schaltfläche Das Projekt wird wie unten gezeigt erstellt -

Schritt 4

Klicken Sie nun mit der rechten Maustaste auf Ihr Projekt und exportieren Sie es. WählenJava / JAR Datei aus dem Export Assistent und klicken Sie auf Next.

Schritt 5

Nun, wenn Sie klicken Nextwerden Sie aufgefordert, die Datei im Zielordner zu speichern, der beim Klicken auf Weiter gefragt wird.

Kehren Sie nach dem Speichern der Datei zur AWS-Konsole zurück und erstellen Sie die AWS Lambda-Funktion für Java.

Schritt 6

Laden Sie jetzt die .jar Datei, die wir mit dem erstellt haben Upload Schaltfläche wie im folgenden Screenshot gezeigt -

Handler-Details für Java

Handler ist package name und class name. Schauen Sie sich das folgende Beispiel an, um den Handler im Detail zu verstehen:

Beispiel

package com.amazonaws.lambda.demo;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
      
        { @Override public String handleRequest(Object input, Context context) { context.getLogger().log("Input: " + input); // TODO: implement your handler return "Hello from Lambda!"; } } 
      

Beachten Sie, dass der Handler aus dem obigen Code hervorgeht com.amazonaws.lambda.demo.LambdaFunctionHandler

Lassen Sie uns nun die Änderungen testen und die Ausgabe sehen -

Kontextobjekt in Java

Die Interaktion mit der Ausführung von AWS Lambda erfolgt über den Kontext. Es bietet die folgenden Methoden, die in Java verwendet werden können:

Sr.Nr. Kontextmethoden & Beschreibung
1

getMemoryLimitInMB()

Dies gibt das Speicherlimit an, das Sie beim Erstellen der Lambda-Funktion angegeben haben.

2

getFunctionName()

Dies gibt den Namen der Lambda-Funktion.

3

getFunctionVersion()

Dadurch wird die Version der Lambda-Funktion ausgeführt.

4

getInvokedFunctionArn()

Dies gibt die ARN an, die zum Aufrufen der Funktion verwendet wird.

5

getAwsRequestId()

Dies gibt die aws Anfrage ID. Diese ID wird für die Lambda-Funktion erstellt und ist eindeutig. Die ID kann mit aws-Unterstützung verwendet werden, falls Probleme auftreten.

6

getLogGroupName()

Dadurch wird der Name der aws-Cloudwatch-Gruppe angegeben, der mit der erstellten aws-Lambda-Funktion verknüpft ist. Es ist null, wenn der iam-Benutzer keine Berechtigung zur Cloudwatch-Protokollierung hat.

7

getClientContext()

Dies gibt Details über die App und das Gerät, wenn es mit aws mobile sdk verwendet wird. Es werden Details wie Versionsname und Code, Client-ID, Titel, Name des App-Pakets angegeben. Es kann null sein.

8

getIdentity()

Dies gibt Details über die Amazon Cognito-Identität bei Verwendung mit aws mobile sdk. Es kann null sein.

9

getRemainingTimeInMillis()

Dies gibt die verbleibende Zeitausführung in Millisekunden an, wenn die Funktion nach dem angegebenen Zeitlimit beendet wird.

10

getLogger()

Dadurch wird der Lambda-Logger mit dem Kontextobjekt verknüpft.

Lassen Sie uns nun den oben angegebenen Code aktualisieren und die Ausgabe für einige der oben aufgeführten Methoden beobachten. Beachten Sie zum besseren Verständnis den unten angegebenen Beispielcode -

package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      context.getLogger().log("Input: " + input);
      System.out.println("AWS Lambda function name: " + context.getFunctionName());
      System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
      System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
      System.out.println("Cloudwatch group name " + context.getLogGroupName());
      System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
      
      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

Sobald Sie den oben angegebenen Code ausgeführt haben, finden Sie die Ausgabe wie folgt:

Protokolle für den Kontext

Sie können die folgende Ausgabe beobachten, wenn Sie Ihre Protokollausgabe anzeigen:

Der für die Lambda-Funktion zugewiesene Speicher beträgt 512 MB. Die zugewiesene Zeit beträgt 25 Sekunden. Die oben angezeigte verbleibende Zeit beträgt 24961, was in Millisekunden angegeben ist. Für die Ausführung der Lambda-Funktion werden also 25000 - 24961 verwendet, was 39 Millisekunden entspricht. Beachten Sie, dass der Name der Cloudwatch-Gruppe und die Anforderungs-ID ebenfalls wie oben gezeigt angezeigt werden.

Beachten Sie, dass wir den folgenden Befehl verwendet haben, um Protokolle in Java zu drucken:

System.out.println (“log message”)

Das gleiche ist in CloudWatch verfügbar. Gehen Sie dazu zu AWS-Services und wählen SieCloudWatchservices und klicken Sie auf Logs.

Wenn Sie nun die Lambda-Funktion auswählen, werden die Protokolle wie unten gezeigt datumsmäßig angezeigt.

Anmelden in Java

Sie können Lambdalogger auch in Java verwenden, um die Daten zu protokollieren. Beachten Sie das folgende Beispiel, das dasselbe zeigt -

Beispiel

package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      LambdaLogger logger = context.getLogger();
      logger.log("Input: " + input);
      logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
      logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
      logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
      logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
      logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
      
      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

Der oben gezeigte Code gibt Ihnen die folgende Ausgabe -

Die Ausgabe in CloudWatch erfolgt wie folgt:

Fehlerbehandlung in Java für Lambda-Funktion

In diesem Abschnitt wird erläutert, wie Fehler in Java für die Lambda-Funktion behandelt werden. Beachten Sie den folgenden Code, der dasselbe anzeigt -

package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      throw new RuntimeException("Error from aws lambda");
   } 
}

Beachten Sie, dass die Fehlerdetails in angezeigt werden json Format mit errorMessage Error from AWS Lambda. Auch derErrorType und stackTrace gibt weitere Details zum Fehler.

Die Ausgabe und die entsprechende Protokollausgabe des oben angegebenen Codes sind in den folgenden Screenshots dargestellt:

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

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, 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 des Cloudwatch-Gruppennamens 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 den Amazon Cognito Identity Provider an, wenn er 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 Kontextbeispiel 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 -

Die Unterstützung von Go Language wurde kürzlich zu AWS hinzugefügt. Um mit Go arbeiten zu können, müssen Sie die Sprache in der AWS-Konsole auswählen, während Sie die AWS Lambda-Funktion erstellen. In diesem Kapitel erfahren Sie mehr über die AWS Lambda-Funktion in der Go-Sprache.

Go installieren

Um loszulegen, benötigen wir Unterstützung für Go Language. In diesem Abschnitt werden wir die folgenden Details durchgehen, um mit AWS Lambda in Go zu arbeiten. Dies ist die offizielle Seite für Go-Download:https://golang.org/dl/

Laden Sie jetzt das Paket gemäß dem Betriebssystem herunter. Befolgen Sie die hier angegebenen Schritte, um Go auf dem jeweiligen Betriebssystem zu installieren.

Installation unter Windows

Beachten Sie, dass für Windows 32-Bit- und 64-Bit-Downloads verfügbar sind. Laden Sie die Zip-Datei herunter, extrahieren Sie den Inhalt und speichern Sie ihn in einem Verzeichnis Ihrer Wahl.

Fügen Sie die Umgebungsvariablen hinzu, die unter verfügbar sind ControlPanel ---> System ---> Advanced system settings.

Klicken Sie nun auf Environment Variables Schaltfläche und fügen Sie den Verzeichnispfad wie hier gezeigt hinzu -

Sie können die Systemvariable auch wie hier gezeigt bearbeiten -

Sobald diese Schritte abgeschlossen sind, sollten Sie in der Lage sein, mit Go zu arbeiten. Öffnen Sie die Eingabeaufforderung und überprüfen Sie den Befehl Go auf Version. Beachten Sie dazu den folgenden Screenshot.

Installation für Linux und Mac OS

Befolgen Sie zum Installieren von Paketen unter Linux und Mac OS die folgenden Anweisungen:

Packen Sie die Pakete aus und lagern Sie sie am Ort /usr/local/go. Fügen Sie nun hinzu/usr/local/go/binauf die Umgebungsvariable PATH. Dies kann mit erfolgen/etc/profile oder $HOME/.profile.

Zu diesem Zweck können Sie den folgenden Befehl verwenden

export PATH=$PATH:/usr/local/go/bin

Verwenden Sie Folgendes in Ihrer Git-Befehlszeile, um AWS-Unterstützung für Windows, Linux und Mac hinzuzufügen:

go.exe get -u github.com/aws/aws-lambda-go/lambda 
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip

Verwenden Sie die folgenden Befehle, um den Code Windows / Linux / Mac zu kompilieren:

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

AWS Lambda-Funktion mit GO

Ein Programm, das beim Erstellen in Go zurückgegeben wird, liefert eine ausführbare Datei. Das Folgende ist ein einfaches Programm in Go mit AWS Lambda-Unterstützung. Wir müssen das importierengithub.com/aws/aws-lambda-go/lambda, da dies die Lambda-Programmierfunktionalität hat. Ein weiterer wichtiger Bedarf für AWS Lambda ist der Handler.

Main.go

// main.go
package main

import (
   "github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
   return "Hello Lambda", nil
}
func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Beachten Sie, dass die Ausführung der GoProgramm startet von Haupt, wo Lambda. start wird mit der Handlerfunktion aufgerufen. Beachten Sie den unten gezeigten Code -

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Lassen Sie uns nun die obige Datei mit dem Befehl Go ausführen und dann die ausführbare Datei komprimieren.

Die Struktur der Datei, die wir verwendet haben, ist wie hier gezeigt -

Mit go builderstellt eine ausführbare Datei mit dem Namen main.exe. Gehen Sie wie folgt vor, um die Datei zu komprimieren und in AWS Lambda hochzuladen:

Verwenden Sie die folgenden Befehle, um den Code Windows / Linux / Mac zu kompilieren:

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

Melden Sie sich dann bei der AWS-Konsole an und erstellen Sie die Lambda-Funktion mit Go als Laufzeit -

Laden Sie nach dem Erstellen der Funktion die oben erstellte ausführbare Zip-Datei hoch.

Lambda-Funktionshandler mit Go

Im Handler beginnt die Ausführung des Go-Programms. Vom Hauptanruf bislambda.startDie Ausführung wird mit der Handlerfunktion aufgerufen. Beachten Sie, dass der hinzuzufügende Handler sein wirdmain.

Beachten Sie den Code hier zum Verständnis -

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Befolgen Sie die folgenden Screenshots -

Speichern Sie nun die Funktion und testen Sie sie. Sie können das Ausführungsergebnis wie hier gezeigt sehen.

Die entsprechende Protokollausgabe wird wie hier gezeigt angezeigt -

Kontextobjekt mit Go

AWS Lambda in Go bietet die folgenden globalen Variablen und Eigenschaften für den Kontext.

  • MemoryLimitInMB - Speicherlimit in MB, das in aws lambda konfiguriert ist.

  • FunctionName - Name der aws Lambda-Funktion.

  • FunctionVersion - Die Version der aws Lambda-Funktion wird ausgeführt.

  • LogStreamName - Name des Cloudwatch-Protokolldatenstroms.

  • LogGroupName - Name der Cloudwatch-Gruppe.

Die im Kontext verfügbaren Eigenschaften sind wie folgt angegeben:

AwsRequestID

Dies ist die AWS-Anforderungs-ID, die Sie erhalten, wenn die AWS Lambda-Funktion aufgerufen wird.

ClientContext

Diese enthält Details zur Clientanwendung und zum Gerät, wenn diese über das AWS Mobile SDK aufgerufen werden. Es kann null sein. Der Clientkontext enthält Details wie Client-ID, Anwendungstitel, Versionsname, Versionscode und Name des Anwendungspakets.

InvokedFunctionArn

Die ARN der aufgerufenen Funktion. Ein nicht qualifizierter ARN führt die $ LATEST-Version aus und Aliase führen die Funktionsversion aus, auf die er zeigt.

Identität

Bei Verwendung mit dem AWS Mobile SDK werden Details zum Amazon Cognito-Identitätsanbieter angezeigt.

Die Änderungen wurden hinzugefügt main.go Kontextdetails drucken -

// main.go
package main

import (
   "context"
   "log"
   "github.com/aws/aws-lambda-go/lambda"
   "github.com/aws/aws-lambda-go/lambdacontext"
)

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Wir müssen das importieren log und lambda contextum es mit Go zu benutzen. Die Kontextdetails lauten wie folgt:

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);	
   return "Hello Lambda", nil
}

Sie können die folgende Ausgabe beim Testen des obigen Codes beobachten:

Daten protokollieren

Mit Go Sie können Daten mit dem Protokoll- oder FMT-Modul wie unten gezeigt protokollieren -

// main.go
package main

import (
   "log"
   "fmt"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() (string, error) {
   log.Print("Hello from Lambda Go using log");
   fmt.Print("Hello from Lambda Go using fmt");
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Die Ausgabe für dasselbe ist wie unten gezeigt -

Überprüfen von Protokollen in CloudWatch

Sie können die Protokolle auch in CloudWatch anzeigen. Gehen Sie dazu zum AWS-Service, wählen Sie Cloudwatch aus und klicken Sie aufLogsauf der linken Seite. Suchen Sie nun in der Liste nach der Lambda-Funktion, um die Protokolle anzuzeigen.

Funktionsfehler

Sie können eine benutzerdefinierte Fehlerbehandlung in AWS Lambda mithilfe des Fehlermoduls erstellen, wie im folgenden Code gezeigt.

// main.go
package main
import (
   "errors"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() error  {
   return errors.New("There is an error in the code!")
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Die Ausgabe für den oben gezeigten Code ist wie folgt:

In diesem Kapitel erfahren Sie ausführlich, wie Sie mit der AWS Lambda-Funktion in C # arbeiten. Hier verwenden wir Visual Studio, um den Code für AWS Lambda zu schreiben und bereitzustellen. Informationen und Hilfe zur Installation von Visual Studio und zum Hinzufügen von AWS Toolkit zu Visual Studio finden Sie in derIntroductionKapitel in diesem Tutorial. Wenn Sie mit der Installation von Visual Studio fertig sind, führen Sie die folgenden Schritte aus. Weitere Informationen finden Sie in den jeweiligen Screenshots.

Schritt 1

Öffnen Sie Ihr Visual Studio und befolgen Sie die Schritte zum Erstellen eines neuen Projekts. Klicke aufFile -> New -> Project.

Schritt 2

Nun wird der folgende Bildschirm angezeigt, in dem Sie auswählen AWS Lambda for Visual C#. WählenAWS Lambda Project (.NET Core).

Sie können den Namen bei Bedarf ändern, wobei hier der Standardname beibehalten wird. KlickenOK weitermachen.

Im nächsten Schritt werden Sie aufgefordert, a auszuwählen Blueprint.

Wählen Empty function für dieses Beispiel und klicken Sie auf Finish. Es wird eine neue Projektstruktur erstellt, wie unten gezeigt -

Wählen Sie nun Function.cs Dies ist die Hauptdatei, in der der Handler mit Ereignis und Kontext für AWS Lambda erstellt wird.

Die Anzeige der Datei Functions.cs lautet wie folgt:

Mit dem folgenden Befehl können Sie die Eingabe- und Ausgabeparameter für die AWS Lambda-Funktion serialisieren.

[assembly: 
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

Handler-Details für C #

Der Handler wird wie folgt angezeigt:

public string FunctionHandler(string input, ILambdaContext context) {
   return input?.ToUpper();
}

Verschiedene Komponenten des obigen Codes werden unten erklärt -

FunctionHandler −Dies ist der Ausgangspunkt der C # AWS Lambda-Funktion.

String input − Die Parameter zum Handler string input hat alle Ereignisdaten wie S3-Objekt, API-Gateway-Details usw.

ILambdaContext context −ILamdaContext ist eine Schnittstelle mit Kontextdetails. Es enthält Details wie den Namen der Lambda-Funktion, Speicherdetails, Timeout-Details usw.

Der Lambda-Handler kann synchron und asynchron aufgerufen werden. Wenn Sie wie oben gezeigt synchron synchronisieren, können Sie den Rückgabetyp verwenden. Wenn asynchron, muss der Rückgabetyp ungültig sein.

Lassen Sie uns nun das AWS Lambda C # bereitstellen und dasselbe testen. Klicken Sie mit der rechten Maustaste auf das Projekt und klicken Sie aufPublish to AWS Lambda wie unten gezeigt -

Füllen Sie die Function Name und klicken Sie auf Next. Der nächste angezeigte Bildschirm ist derAdvanced Function Details wie gezeigt -

Geben Sie die Role Name, Memory und Timeout. DetailsBeachten Sie, dass wir hier die vorhandene Rolle ausgewählt haben, die erstellt und Speicher als 128 MB und Timeout als 10 Sekunden verwendet wurde. Sobald Sie fertig sind, klicken SieUpload zum Veröffentlichen in der AWS Lambda-Konsole.

Nach dem Hochladen der AWS Lambda-Funktion wird der folgende Bildschirm angezeigt. KlickenInvokeum die erstellte AWS Lambda-Funktion auszuführen. Derzeit wird ein Fehler angezeigt, da gemäß dem geschriebenen Code eine Eingabe erforderlich ist.

Lassen Sie uns nun einige Beispieleingaben und eingeben Invokees wieder. Beachten Sie, dass wir hier Text in das Eingabefeld eingegeben haben und dasselbe beim Klickeninvokewird im Antwortbereich in Großbuchstaben angezeigt. Die Protokollausgabe wird unten angezeigt -

Lassen Sie uns nun auch die AWS-Konsole überprüfen, um festzustellen, ob die Funktion erstellt wurde, während wir die Funktion in Visual Studio bereitgestellt haben.

Die oben erstellte Lambda-Funktion ist aws lambda using csharp und dasselbe wird in der AWS-Konsole angezeigt, wie in den folgenden Screenshots gezeigt -

Handler-Unterschrift

Der Handler ist der Startpunkt für die Ausführung von AWS. Der Name des Handlers sollte definiert werden als -

ASSEMBLY::TYPE::METHOD

Die Details der Unterschrift werden wie folgt erklärt -

ASSEMBLY- Dies ist der Name der .NET-Assembly für die erstellte Anwendung. Dies ist im Grunde der Name des Ordners, aus dem das Projekt erstellt wird.

TYPE- Dies ist der Name des Handlers. Es ist im Grunde der Namespace.Klassenname.

METHOD - Dies ist der Name des Funktionshandlers.

Der Code für die Handlersignatur lautet wie folgt:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda3 {
   public class Function {

      /// <summary>
      /// A simple function that takes a string and does a ToUpper
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public string FunctionHandler(string input, ILambdaContext context) {
         return input?.ToUpper();
      }
   }
}

Beachten Sie, dass hier die Baugruppe ist AWSLamda3Typ ist Namespace.Klassenname AWSLambda3.Function und Methode ist FunctionHandler. Somit ist die HandlersignaturAWSLamda3::AWSLambda3.Function::FunctionHandler

Kontextobjekt in C #

Das Kontextobjekt enthält nützliche Informationen zur Laufzeit in einer AWS-Umgebung. Die im Kontextobjekt verfügbaren Eigenschaften sind in der folgenden Tabelle aufgeführt:

Sr.Nr. Eigenschaften & Beschreibung
1

MemoryLimitInMB

Hier finden Sie Details zum Speicher, der für die AWS Lambda-Funktion konfiguriert ist

2

FunctionName

Name der AWS Lambda-Funktion

3

FunctionVersion

Version der AWS Lambda-Funktion

4

InvokedFunctionArn

ARN wurde zum Aufrufen dieser Funktion verwendet.

5

AwsRequestId

AWS-Anforderungs-ID für die erstellte AWS-Funktion

6

LogStreamName

Name des Cloudwatch-Protokolldatenstroms

7

LogGroupName

Name der Cloudwatch-Gruppe

8

ClientContext

Informationen zur Clientanwendung und zum Clientgerät bei Verwendung mit AWS Mobile SDK

9

Identity

Informationen zur Amazon Cogbnito-Identität bei Verwendung mit AWS Mobile SDK

10

RemainingTime

Verbleibende Ausführungszeit bis zum Beenden der Funktion

11

Logger

Der dem Kontext zugeordnete Logger

Beispiel

Lassen Sie uns in diesem Abschnitt einige der oben genannten Eigenschaften in AWS Lambda in C # testen. Beachten Sie den unten angegebenen Beispielcode -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda6 {
   public class Function {

      /// <summary>
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public void FunctionHandler(ILambdaContext context) {
         LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
         context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
         LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
      }
   }
}

Die zugehörige Ausgabe, die Sie beobachten können, wenn Sie den obigen Code in aufrufen C# ist wie unten gezeigt -

Die zugehörige Ausgabe, die Sie beobachten können, wenn Sie den obigen Code in aufrufen AWS Console ist wie unten gezeigt -

Protokollierung mit C #

Für die Protokollierung können Sie zwei Funktionen verwenden:

  • context.Logger.Log

  • LambdaLogger.Log

Beachten Sie das folgende hier gezeigte Beispiel -

public void FunctionHandler(ILambdaContext context) {
   LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
   context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
   LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
}

Die entsprechende Ausgabe für den oben angegebenen Code wird hier angezeigt -

Sie können die Protokolle wie unten gezeigt von CloudWatch abrufen -

Fehlerbehandlung in C # für Lambda-Funktion

In diesem Abschnitt wird die Fehlerbehandlung in C # erläutert. Zur FehlerbehandlungException Klasse muss wie im folgenden Beispiel gezeigt erweitert werden -

Beispiel

namespace example {            
   public class AccountAlreadyExistsException : Exception {
      public AccountAlreadyExistsException(String message) :
         base(message) {
      }
   }
} 
namespace example {
   public class Handler {
     public static void CreateAccount() {
       throw new AccountAlreadyExistsException("Error in AWS Lambda!");
     }
   }
}

Die entsprechende Ausgabe für den oben angegebenen Code ist wie folgt:

{
   "errorType": "LambdaException",
   "errorMessage": "Error in AWS Lambda!"
}

In den vorherigen Kapiteln haben wir gelernt, wie Sie eine AWS Lambda-Funktion in der AWS-Konsole erstellen. Es gibt jedoch andere Parameter zum Erstellen einer Lambda-Funktion. Dazu gehören Speicherzuweisung, Zeitüberschreitung usw.

In diesem Kapitel werden die folgenden Konfigurationseigenschaften für AWS Lambda ausführlich erläutert.

Speicherzuweisung

Melden Sie sich bei der AWS-Konsole an und erstellen oder wählen Sie die vorhandene Lambda-Funktion aus. Drücke denConfigurationRegisterkarte, um die Details des zugewiesenen Speichers abzurufen. Schauen Sie sich den unten gezeigten Screenshot an -

Beachten Sie, dass standardmäßig der zugewiesene Speicher ist 128MB. Wenn Sie den Speicher vergrößern möchten, können Sie auf den Schieberegler klicken.

Der Speicher wird auf erhöht 64MBwie Sie den Schieberegler bewegen. Beachten Sie, dass der maximal verfügbare Speicher ist3008MB. Schauen Sie sich den unten gezeigten Screenshot an -

Sie können auch verwenden aws clivon der Eingabeaufforderung, um das Speicherlimit zu erhöhen. Sie müssen den Speicher in Schritten von 64 MB angeben.

Erhöhen wir nun das Speicherlimit von AWS Lambda mit folgendem Namen:myfirstlambdafunction.

Die Speicherdetails der Funktion sind im folgenden Screenshot dargestellt -

Der Befehl zum Ändern des Speichers mit aws cli ist wie folgt -

aws lambda update-function-configuration --function-name your function name --
region region where your function resides --memory-size memory amount --
profile admin user

Die entsprechende Ausgabe der AWS Lambda-Funktion myfirstlambdafunctionin der AWS-Konsole wird hier angezeigt. Beachten Sie, dass der Speicher von 128 MB auf 256 MB geändert wird.

Maximale Ausführungszeit

Timeout ist die Zeit, die der AWS Lambda-Funktion zugewiesen wird, um zu beenden, wenn das Timeout auftritt. Die AWS Lambda-Funktion wird entweder innerhalb der zugewiesenen Zeit ausgeführt oder beendet, wenn das angegebene Zeitlimit überschritten wird. Sie müssen die Zeit auswerten, die für die Ausführung der Funktion erforderlich ist, und entsprechend die Zeit in auswählenConfiguration Registerkarte in der AWS-Konsole wie unten gezeigt -

IAM-Rolle

Beim Erstellen der AWS Lambda-Funktion muss die Rolle oder die Berechtigung zugewiesen werden. Wenn Sie AWS Lambda für S3 oder dynamoDB benötigen, muss die Berechtigung für die Dienste von Lambda zugewiesen werden. Basierend auf der zugewiesenen Rolle entscheidet AWS Lambda über die auszuführenden Schritte. Wenn Sie beispielsweise vollen Zugriff auf dynamodb gewähren, können Sie die Zeilen zur dynamodb-Tabelle hinzufügen, aktualisieren und löschen.

Name des Handlers

Dies ist der Beginn der Ausführung der AWS Lambda-Funktion. Die Handlerfunktion enthält die Details des ausgelösten Ereignisses, des Kontextobjekts und des Rückrufs, der zurückgesendet werden musssuccess oder error von AWS Lambda.

Das Format der Handlerfunktion in nodejs wird hier angezeigt -

exports.handler = (event, context, callback) => {
   callback(null, "hello from lambda");
};

Lambda-Funktion unter Verwendung von Umgebungsvariablen

In diesem Abschnitt erstellen wir eine einfache Lambda-Funktion unter Verwendung von Umgebungsvariablen, die im Konfigurationsabschnitt hinzugefügt wurden. Befolgen Sie dazu die unten angegebenen Schritte und lesen Sie die entsprechenden Screenshots -

Schritt 1

Gehen Sie zur AWS-Konsole und erstellen Sie eine Funktion in Lambda wie gezeigt.

Schritt 2

Fügen Sie nun die Umgebungsvariablen wie gezeigt hinzu -

Schritt 3

Lassen Sie uns nun dasselbe im Lambda-Code wie folgt abrufen:

exports.handler = (event, context, callback) => {
   var hostName = process.env.host;   
   var userName = process.env.username;
   callback(null, "Environment Variables =>"+hostName+" and "+userName);
};

Schritt 4

Um die Details von Umgebungsvariablen zu erhalten, müssen wir verwenden process.envwie gezeigt. Beachten Sie, dass diese Syntax für istNodeJS Laufzeit.

var hostName = process.env.host;   
var userName = process.env.username;

Schritt 5

Die Ausgabe für die Lambda-Funktion bei Ausführung ist wie folgt:

Wir können die Lambda-Funktion erstellen und in der AWS-Konsole testen. In diesem Kapitel wird dies ausführlich erläutert. Zu diesem Zweck müssen Sie die hier angegebenen Schritte ausführen und die entsprechenden Screenshots beachten -

Schritt 1

Melden Sie sich bei AWS Console an https://aws.amazon.com/console/. Jetzt werden Sie zu dem Bildschirm weitergeleitet, auf dem die AWS-Services angezeigt werden.

Schritt 2

Klicken Sie nun auf LambdaService wie oben hervorgehoben. Dies wird umgeleitet, um eine Funktion wie unten gezeigt zu erstellen -

Schritt 3

Klicken Sie nun auf Create functionund geben Sie die Details der Funktion ein. Dann sehen Sie einen Bildschirm wie unten gezeigt -

Schritt 4

Sie können Ihren Code schreiben, indem Sie die Sprache Ihrer Wahl auswählen. Der Code muss im Editor geschrieben werden, wenn die ausgewählte Option Code inline bearbeiten ist. Die anderen verfügbaren Optionen sind wie folgt:

Schritt 5

Sobald Sie fertig sind, müssen Sie die Änderungen speichern, für die die Schaltfläche in der oberen rechten Ecke angezeigt wird (siehe unten).

Schritt 6

Klicken Sie nun auf TestTaste. Dies gibt alle Details der Ausführung der Lambda-Funktion wie unten gezeigt -

Schritt 7

Der Code für index.js ist wie folgt -

exports.handler = (event, context, callback) => {
   // TODO implement
   callback(null, 'Lambda test');
};

Dies wird die Callback functionund das Ergebnis kann Fehler oder Erfolg sein. Bei Erfolg sehen Sie eineLambda testBotschaft; Wenn ein Fehler auftritt, wird null übergeben.

Schritt 8

Das Role Details zur Lambda-Funktion sind Teil der Konfiguration und werden wie folgt angezeigt:

Schritt 9

Jetzt können Sie die Rolle bei Bedarf aktualisieren und die Lambda-Funktion speichern. Anschließend werden die Speicher- und Timeout-Details für die Lambda-Funktion wie folgt angezeigt:

Schritt 10

Jetzt müssen wir der Lambda-Funktion einen Trigger hinzufügen, damit sie ausgeführt wird, wenn das Ereignis eintritt. Die Triggerdetails werden am Anfang des AWS Lambda-Funktionsbildschirms angezeigt (siehe unten).

Daraus können Sie den Trigger auswählen, den Ihre Lambda-Funktion auslösen soll. Wenn Sie den Trigger auswählen, müssen die Konfigurationsdetails für den Trigger hinzugefügt werden.

Zum Beispiel müssen für den Trigger in S3 die Konfigurationsdetails wie folgt hinzugefügt werden:

Schritt 11

Wählen Sie nun den Bucket aus, für den Sie den Trigger aktivieren möchten. Der Ereignistyp enthält die folgenden Details:

Schritt 12

Für den Trigger können Sie auch die Dateien vom Präfixtyp oder das Dateimuster erwähnen, der Lambda muss Trigger sein. Die Details sind wie gezeigt -

Schritt 13

Füllen Sie nun die erforderlichen Details für den Auslöser aus und klicken Sie auf Add Speichern Sie die Lambda-Funktion, damit der Trigger hinzugefügt wird. Wenn Sie die Funktion speichern, werden die Details bereitgestellt, und von nun an wird der Lambda ausgelöst, sobald Dateien zum S3-Bucket hinzugefügt werden.

Beachten Sie den folgenden Screenshot, der den zu AWS Lambda hinzugefügten S3-Trigger zeigt -

Schritt 14

Lassen Sie uns nun das S3-Beispielereignis verwenden, um die Lambda-Funktion zu testen. Der Code dafür wird hier angezeigt -

Amazon S3 Put-Beispielereignis

{
   "Records": [{
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
         "ExampleIPAddress": "127.0.0.1"
      },
      "s3": {
         "configurationId": "testConfigRule",
         "object": {
            "eTag": "0123456789abcdef0123456789abcdef",
            "sequencer": "0A1B2C3D4E5F678901",
            "key": "HappyFace.jpg",
            "size": 1024
         },
         "bucket": { 
            "arn": bucketarn,
            "name": "Examplebucket",
            "ownerIdentity": {
               "principalId": "Example"
            }
         },
         "s3SchemaVersion": "1.0"
      },
      "responseElements": { 
         "x-amz-id-2": "Example123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
         "x-amz-request-id": "Example123456789"
      },
      "awsRegion": "us-east-1",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
         "principalId": "Example"
      },
      "eventSource": "aws:s3"
   }]
}

Sie müssen den folgenden Befehl verwenden, um die Details der vom S3-Put-Ereignis hochgeladenen Datei abzurufen.

event.Records[0].s3.object.key     //will display the name of the file

Sie müssen den folgenden Befehl verwenden, um den Bucket-Namen zu erhalten:

event.Records[0].s3.bucket.name    //will give the name of the bucket.

Sie müssen den folgenden Befehl verwenden, um den EventName abzurufen -

event.Records[0].eventName        // will display the event name

Schritt 15

Lassen Sie uns nun den AWS Lambda-Code aktualisieren, um die S3-Details wie unten gezeigt auszudrucken.

exports.lambdahandler = (event, context, callback) => {
   callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+"  
   File name:"+event.Records[0].s3.object.key );
};

Schritt 16

Speichern Sie die Änderungen. KlickenTest und geben Sie das S3-Beispielereignis ein -

Schritt 17

Klicken Sie nun auf Test und Sie können die Ausgabe wie gezeigt sehen -

Schritt 18

Laden Sie eine Datei in den S3-Bucket hoch, um den Trigger in S3 mithilfe des S3 AWS-Dienstes zu testen: test bucket trigger. Aktualisieren Sie die mit Lambda verwendete Rolle, um S3- und SES-Richtlinien (zum Senden von E-Mails) für Berechtigungen zu verwenden. Dadurch wird der AWS Lambda-Code aktualisiert, um E-Mails zu senden, damit der Trigger funktioniert.

Der aktualisierte AWS Lambda-Code lautet wie folgt:

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.lambdahandler = function(event, context, callback) {
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data: "Bucket name: "+event.Records[0].s3.bucket.name+"  File name:"+event.Records[0].s3.object.key
            }
         },
         Subject: {
            Data: "S3 and AWS Lambda"
         }
      },
      Example: "[email protected]"
   };
   console.log('===SENDING EMAIL===');
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
         else {
            console.log("===EMAIL SENT===");
            console.log("EMAIL CODE END");
            console.log('EMAIL: ', email);
            context.succeed(event);
            callback(null, "email is send");
         }
   });
};

Der entsprechende Screenshot ist wie hier gezeigt -

Schritt 19

Laden Sie nun die Datei hoch und überprüfen Sie die im AWS Lambda-Code angegebene E-Mail-ID.

AWS CLIist ein Befehlszeilentool, mit dem Sie mit AWS-Services arbeiten können. Wir können es verwenden, um die aws lambda-Funktion zu erstellen, zu aktualisieren, zu löschen und aufzurufen. In diesem Kapitel werden Sie die Installation und Verwendung von AWS CLI ausführlich erläutern.

Installation von AWS CLI

Dieser Abschnitt führt Sie durch die Installation von AWS CLI auf verschiedenen Betriebssystemen. Befolgen Sie die angegebenen Schritte und beachten Sie die entsprechenden Screenshots, sofern vorhanden.

Für Windows

Überprüfen Sie Ihre Windows-Konfiguration und wählen Sie einen der folgenden Links für die Installation von AWS CLI MSI:

  • Für Windows 64 Bit - AWS CLI MSI-Installation für Windows (64 Bit )

  • Für Windows 32 Bit - AWS CLI MSI-Installation für Windows (32)

Sobald Sie den entsprechenden Link ausgewählt und darauf geklickt haben, finden Sie ein Fenster wie hier gezeigt -

Als nächstes stellen Sie die Environment path in windows wie in den Screenshots unten gezeigt -

Anschließend können Sie den folgenden Befehl an der Eingabeaufforderung verwenden, um festzustellen, ob aws cli ist installiert -

aws --version

Es zeigt die Details der aws-cli-Version an, wie im folgenden Screenshot gezeigt -

Für Linux / Mac

Für die Installation unter Linux und Mac benötigen Sie Python 2.6.3 oder eine höhere Version. Verwenden Sie dann die folgenden Befehle für weitere Installationsvorgänge:

$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

Jetzt müssen wir die AWS-Einstellungen konfigurieren. Zu diesem Zweck können Sie den folgenden Befehl verwenden:

aws configure

Zu diesem Zweck sind Details wie - erforderlich.

  • AWS Access Key ID
  • AWS Secret Access Key
  • Standardregionsname
  • Standardausgabe vom Format

Sie können diese Details von Ihrer aws-Konsole erhalten. Gehen Sie wie gezeigt zu Ihrem Kontonamen in der oberen rechten Ecke -

Klicken Sie nun auf My Security Credentialsund wählen Sie Benutzer von der linken Seite aus. Fügen Sie den Benutzer mit den angeforderten Details hinzu.

Fügen Sie den Benutzer hinzu und erhalten Sie den Zugriffsschlüssel und den geheimen Schlüssel. Um den neuen Zugriffsschlüssel anzuzeigen, wählen SieShow. Ihre Anmeldeinformationen sehen wie folgt aus:

Access key ID − AOSAIOSFOCDD7Example

Secret access key − aJuirCVtnROUN/K7MDENG/bPxRfiCYExampleKEY

Referenzbefehle für AWS CLIS

In der folgenden Tabelle sind Befehlsreferenzen aufgeführt, mit denen Sie arbeiten können aws cli.

Name des Befehls aws cli Befehlsreferenz
create-function create-function --function-name <Wert> --runtime <Wert> --role <Wert> --handler <Wert> [--code <Wert>] [--description <Wert>] [--timeout < value>] [--memory-size <Wert>] [--environment <Wert>] [--kms-key-arn <Wert>] [--tags <Wert>] [--zip-file <Wert> ] [--cli-input-json <Wert>]
list-functions Listenfunktionen [--master-region <Wert>] [--Funktionsversion <Wert>] [--max-Elemente <Wert>] [--cli-input-json <Wert>] [--starting- Token <Wert>] [--Seitengröße <Wert>] [--generate-cli-skeleton <Wert>]
get-function get-function --function-name <Wert> [--qualifier <Wert>] [--cli-input-json <Wert>] [--generate-cli-skeleton <Wert>]
get-function-configuration get-function-configuration --funktionsname <Wert> [--qualifier <Wert>] [--cli-input-json <Wert>] [--generate-cli-skeleton <Wert>]
get-account-settings get-account-settings [--cli-input-json <Wert>] [--generate-cli-skeleton <Wert>]
update-function-configuration update-function-configuration --funktionsname <wert> [--role <wert>] [--handler <wert>] [--description <wert>] [--timeout <wert>] [--memory- Größe <Wert>] [--vpc-config <Wert>] [--environment <Wert>] [--runtime <Wert>] [--dead-letter-config <Wert>] [--kms-key- arn <Wert>] [--tracing-config <Wert>] [--revision-id <Wert>] [--cli-input-json <Wert>] [--generate-cli-skeleton <Wert>]
update-function-code Update-Funktionscode - Funktionsname <Wert> [--zip-Datei <Wert>] [--s3-Bucket <Wert>] [--s3-Schlüssel <Wert>] [--s3-Objekt- version <Wert>] [--publish | --no-publish] [--dry-run | --no-dry-run] [--revision-id <Wert>] [- cli-input-json <Wert>] [- generate-cli-skeleton <Wert>]
delete-function Löschfunktion - Funktionsname <Wert> [--qualifier <Wert>] [--cli-input-json <Wert>] [--generate-cli-skeleton <Wert>]

Lassen Sie uns nun diese Befehle einzeln im Detail besprechen.

Erstellungsfunktion

Diese API erstellt eine neue Lambda-Funktion. Der Code muss im Zip-Format angegeben werden. Wenn die zu erstellende Funktion bereits vorhanden ist, schlägt die API fehl. Beachten Sie, dass der Funktionsname zwischen Groß- und Kleinschreibung unterscheidet.

Befehle enthalten

Die Liste der Befehle, die Sie mit create-function verwenden können, finden Sie hier -

create-function 
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>] 
[--description <value>] 
[--timeout <value>] 
[--memory-size <value>] 
[--environment <value>] 
[--kms-key-arn <value>] 
[--tags <value>] 
[--zip-file <value>] 
[--cli-input-json <value>]

Optionen enthalten

Verschiedene Optionen, die Sie mit den oben genannten Funktionen verwenden können, sind folgende:

--function-name (string)- Dies nimmt den Namen der Funktion an. Der Name kann aus 64-Bit-Zeichen bestehen.

--runtime(string)- Hier müssen Sie die Laufzeitumgebung angeben, dh die Sprachauswahl. Die Details der Laufzeit sind wie folgt angegeben -

Optionen verfügbar Laufzeit
Python v3.6 python3.6
Python v2.7 python2.7
NodeJS v6.10 nodejs6.10
NodeJS v8.10 nodejs8.10
Java java8
C # 1 dotnetcore1.0
C # 2 dotnetcore2.0
Gehen go1.x.

--role(string)- Dies ist der Name der Lambda-Richtlinie, dh die Rolle, die der Lambda-Funktion für den Zugriff auf andere Dienste zugewiesen wird. Es verfügt über die Berechtigung gemäß der angegebenen Rolle.

--handler (string) - Dies ist der Name des Handlers, in dem die Ausführung des Lambda-Codes beginnt.

  • Für nodejs ist der Handlername der Modulname, den wir exportieren.
  • Für Java ist es package.classname :: handler oder package.classname
  • Für Python lautet der Handler nameofthefile.

--code (structure) −AWS Lambda-Code

--description (string) - Beschreibung für die AWS Lambda-Funktion

--timeout (integer)- Timeout hat den Zeitpunkt, zu dem die Lambda-Funktion die Ausführung beenden muss. Der Standardwert ist 3s.

--memory-size (integer)- Dies ist der Speicher, der der aws-Lambda-Funktion zugewiesen wird. AWS weist die Menge der CPU- und Speicherzuweisung basierend auf dem angegebenen Speicher zu.

--environment (structure) - Es ist ein Objekt mit Umgebungsdetails, die in der aws-Lambda-Funktion erforderlich sind.

e.g : Variables = {Name1 = string, Name2 = string}

--kms-key-arn (string)- Dies ist der Amazon Resource Name (ARN), der zum Verschlüsseln der Umgebungsvariablen verwendet wird. Wenn nicht angegeben, werden die Standardeinstellungen zum Verschlüsseln verwendet.

--zip-file (blob) - Pfad der Zip-Datei mit den Details des Codes.

--cli-input-json (string): Führt eine Serviceoperation basierend auf der bereitgestellten JSON-Zeichenfolge aus. Die JSON-Zeichenfolge folgt dem von --generate-cli-skeleton bereitgestellten Format. Wenn in der Befehlszeile andere Argumente angegeben werden, überschreiben die CLI-Werte die von JSON bereitgestellten Werte.

Lassen Sie uns nun eine einfache AWS Lambda-Funktion mit der Laufzeit als Knoten erstellen und einige zu druckende console.logs hinzufügen.

Betrachten Sie einen Beispielcode, um dasselbe zu verstehen -

exports.handler = async (event) => {
   console.log("Using aws cli");
   return 'Hello from Lambda from aws cli!'
};

Komprimieren Sie nun die Datei und speichern Sie sie als awscli.zip.

ARN bekommen

Verwenden wir für die Rolle die arnaus der bestehenden Rolle, die wir geschaffen haben. Um die ARN zu erhalten, müssen Sie die hier gezeigten Schritte ausführen. Beachten Sie die entsprechenden Screenshots, wo immer sie angehängt sind -

Schritt 1

Gehen Sie zu IAM und wählen Sie die gewünschte Rolle aus Roles. Die ARN-Details für die Rolle werden wie unten gezeigt angezeigt. VerwendenRole ARN mit create-function im aws cli.

Beachten Sie hier, dass die Rolle arn lautet: arn: aws: iam :: 625297745038: role / lambdaapipolicy

Der Befehl mit Werten für create-function ist wie folgt -

aws lambda create-function 
--function-name "awslambdausingcli" 
--runtime "nodejs8.10" 
--role "arn:aws:iam::625297745038:role/lambdaapipolicy" 
--handler "awscli.handler" 
--timeout 5 
--memory-size 256 
--zip-file "fileb://awscli.zip"

Wenn Sie nun den Befehl in aws cli ausführen, finden Sie eine Ausgabe wie unten gezeigt -

In der AWS-Konsole wird die Lambda-Funktion wie folgt angezeigt:

Die Details der Funktionen sind wie hier gezeigt -

Die Details der Konfiguration sind wie folgt:

Sie können die Funktion testen und die Ausgabe wie gezeigt überprüfen -

Die entsprechende Protokollausgabe wird hier angezeigt -

Listenfunktionen

Diese API enthält die Liste der Funktionen, die bisher in AWS Lambda erstellt wurden.

Befehle enthalten

Die folgenden Befehle sind mit dieser API verknüpft:

list-functions
[--master-region <value>]
[--function-version <value>]
[--max-items <value>]
[--cli-input-json <value>]

Optionen unter Listenfunktionen

Das Folgende sind verschiedene Optionen, die Sie unter dieser Listenfunktion API verwenden können -

--master-region(string)- optional. Die Region, aus der die Funktionen angezeigt werden sollen.

--function-version(string)- optional. Dies gibt die Funktionsversion.

--max-items(integer)- optional. Dadurch erhalten die Elemente den angegebenen Wert.

--cli-input-json(string)- optional. Führt den Vorgang basierend auf der bereitgestellten JSON-Datei aus.

Der Befehl mit Werten list-functions ist wie folgt -

aws lambda list-functions --max-items 3

Der Befehl zeigt Details wie folgt an:

get-Funktion

Diese API enthält Details zu den Funktionen sowie einen URL-Link, über den die Zip-Datei mit der Funktion create hochgeladen wurde. Die URL mit den Zip-Details ist nur 10 Minuten gültig.

Befehle enthalten

Das Folgende sind die Befehle, die dieser API zugeordnet sind -

get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Optionen enthalten

--function-name- Name der AWS Lambda-Funktion. Sie können auch den Amazon-Ressourcennamen der Funktion angeben.

--qualifier(string)- Optional. Die Funktionsversion kann verwendet werden, um die Details der Funktion abzurufen.

Der Befehl mit den Werten für get-function lautet -

aws lambda get-function --function-name awslambdausingcli

Die Details der Befehlsanzeige lauten wie folgt:

Es gibt die URL an, auf die die Postleitzahl hochgeladen wurde. Im obigen Fall lautet die URL -

https://prod-04-2014-
tasks.s3.amazonaws.com/snapshots/625297745038/awslambdausingcli-97048f8d-4a08
-4ed9-99d9-acb00d2063d2?versionId=d04HKvPu9S2zz8pzjbW6Rmf5o5fxnc_r&X-Amz-Security
-Token=FQoDYXdzEKT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDCpTmGvtwKToPBiWcyK3A96UcJEnwvYDhMbbxu
%2Bg2gffK2ocfnlEeiCHak8QqqE1RFpbKrdks9NzxP9gNbagL4M9RValxJ1a9PUY%2FOdAekscRHOiX00MVAxUlI8
2pKryhdOwLJWSj0uRzqvOxCcBwJenHrSNPeG6lMa2ZDo0qZFEUDONSaTg4nuSnJK1f6t3pMAKu4vF9wPvf92G%2BU
60rUxwleggigISmD9l1IlZse3%2BVF1JlNuN%2F5d85v0y2Q%2F%2BO515CybcZpn91sHPYG8JMJ00LsrkQ2Ww4VU
9Zz5c5QYH4JYPj0CyEgSz9b%2FMceMPpOoPUAMjctb%2FEwQqcShZeqAr9%2Fcd2ZI%2BXl2%2Bs4ri0ucgPvQQvs
eGIIiZbX3GqdwR2jb1nylrAEIfiuFMoSWfcFYoYtuL0MZnjGR9jy2GNkp6MB%2BlHHr7%2BnuFRUzU26rgDYmdE1w
Rb3%2B21Jm49WGDa9opRLvUxFaux57Or70haib2FuKzN6Gf3Vzzk5KPdWsYUpaLyf%2B1ovEytOZhB1JEXuCs%2FG
IlOXS88yxT%2BpOKmyxweiezpGgI%2FAkSAQTbSRsYQKIOFyIJNHzplwrJKhy28vy60numIBIo9Zqq2AU%3D
&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20180527T112426Z&X-Amz-
SignedHeaders=host&X-Amz-Expires=600&X-Amz-
Credential=ASIAICSQHLSBWFP37U4Q%2F20180527%2Fus-
east-1%2Fs3%2Faws4_request&X-Amz-Signature=
8b97e7d6d7da13313068e027894d2c875be5e50a0c5a62550f55307985bdc1aa

get-function-configuration

Dadurch werden die Konfigurationsdetails der AWS Lambda-Funktion angezeigt.

Das Folgende sind die Befehle, die zusammen mit dieser API verwendet werden -

get-function-configuration
--function-name <value>
[--qualifier <value>]

The following are the options used with

--function-name (string) −Name der aws Lambda-Funktion. Sie können auch den Amazon-Ressourcennamen der Funktion angeben.

--qualifier(string) − Optional. Die Funktionsversion kann verwendet werden, um die Details der Funktion abzurufen.

Der Befehl mit den Werten für get-function lautet -

aws lambda get-function-configuration --function-name awslambdausingcli

Der Befehl zeigt Details wie folgt an:

get-account-einstellungen

Diese API gibt die Kontoeinstellungen an.

Beteiligte Befehle

Der Befehl, den Sie mit dieser API verwenden können, ist -

get-account-settings
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Beteiligte Optionen

Sie können die folgenden Optionen mit dieser API verwenden -

--cli-input-json(string) − Führt den Dienst basierend auf der bereitgestellten JSON-Zeichenfolge aus.

--generate-cli-skeleton(string) − Es druckt die JSON-Ausgabe, ohne die API-Anforderung zu senden.

Sie können den folgenden Befehl für Kontoeinstellungen verwenden -

aws lambda get-account-settings

Sie können die folgende Ausgabe sehen, wenn Sie den oben angegebenen Befehl ausführen:

Update-Funktionskonfiguration

Diese API hilft beim Aktualisieren der Konfigurationsdetails für die erstellte AWS Lambda-Funktion. Sie können den Speicher, das Timeout, den Handler, die Rolle, die Laufzeit, die Beschreibung usw. ändern.

Beteiligte Befehle

Die folgenden Befehle sind in der API zur Aktualisierung der Funktionskonfiguration enthalten:

update-function-configuration
--function-name <value>
[--role <value>]
[--handler <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--runtime <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Beteiligte Optionen

Im Folgenden sind die Optionen aufgeführt, die in der Update-Funktionskonfigurations-API enthalten sind:

--function-name − Name der aws Lambda-Funktion

--role (string) −Optional. Die ARN der Rolle muss aktualisiert werden.

--handler (string) −Optional. Die Handler-Details der aws-Lambda-Funktion.

--description(string) −Optional. Beschreibung für die Funktion.

--timeout(integer) −Optional. Zeit erforderlich, damit die aws-Lambda-Funktion beendet werden kann.

--memory-size(integer) −Optional. Dies ist der Speicher, der der aws-Lambda-Funktion zugewiesen wird. AWS weist die Menge der CPU- und Speicherzuweisung basierend auf dem angegebenen Speicher zu.

--environment (structure) −Optional. Es ist ein Objekt mit Umgebungsdetails, die in der aws-Lambda-Funktion erforderlich sind.

e.g: Variables = {Name1 = string, Name2 = string}

--runtime(string) − Hier müssen Sie die Laufzeitumgebung angeben, dh die Sprachauswahl.

Die Details der Laufzeit sind in der folgenden Tabelle aufgeführt -

Optionen verfügbar Laufzeit
Python v3.6 python3.6
Python v2.7 python2.7
NodeJS v6.10 nodejs6.10
NodeJS v8.10 nodejs8.10
Java java8
C # 1 dotnetcore1.0
C # 2 dotnetcore2.0
Gehen go1.x.

--cli-input-json (string) −Optional. Dadurch wird die Operation auf der API ausgeführt, wie in der bereitgestellten JSON-Zeichenfolge angegeben.

--generate-cli-skeleton (string) −Optional. Dadurch wird das JSON-Skelett aller Details ausgegeben, ohne die API auszuführen. Der Ausgang kann als Eingang für verwendet werden--cli-input-json.

Lassen Sie uns nun den Speicher und das Timeout der zuvor erstellten AWS Lambda-Funktion überprüfen. Befolgen Sie die unten angegebenen Schritte und beachten Sie die entsprechenden Screenshots, die zu diesem Zweck beigefügt sind -

Schritt 1

Der Speicher und das Zeitlimit vor der Änderung sind wie folgt:

Schritt 2

Jetzt mit update-function-configurationLassen Sie uns den Speicher und das Timeout auf 320 MB und das Timeout auf 10 Sekunden ändern. Verwenden Sie dazu den folgenden Befehl mit Werten -

aws lambda update-function-configuration --function-name “awslambdusingcli” 
--timeout 10 --memory-size 320

Schritt 3

Dann können Sie die folgende Ausgabe als Anzeige sehen -

Schritt 4

Die Anzeige in der AWS-Konsole nach der Verwendung update-function-configuration ist wie folgt -

Update-Funktionscode

Diese API aktualisiert den Code für eine vorhandene AWS Lambda-Funktion.

Beteiligte Befehle

update-function-code
--function-name <value>
[--zip-file <value>]
[--s3-bucket <value>]
[--s3-key <value>]
[--s3-object-version <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Beteiligte Optionen

Die folgenden Optionen sind mit der Update-Funktionscode-API verbunden:

--function-name(string) − Name der aws Lambda-Funktion

--zip-file (blob) −Optional. Pfad der Zip-Datei mit dem zu aktualisierenden Code.

--s3-bucket(string) −Optional. S3-Bucket-Name, bei dem die Zip-Datei mit dem Code hochgeladen wurde.

--s3-key(string) −Optional. Name des AWS s3-Objektschlüssels, der hochgeladen werden muss.

--s3-object-version (string) −Optional. AWS s3-Objektversion.

--cli-input-json (string) −Optional. Dadurch wird die Operation auf der API ausgeführt, wie in der bereitgestellten JSON-Zeichenfolge angegeben.

--generate-cli-skeleton (string) −Optional. Dadurch wird das JSON-Skelett aller Details ausgegeben, ohne die API auszuführen. Die Ausgabe kann als Eingabe für --cli-input-json verwendet werden.

Der aktualisierte Code ist wie folgt:

exports.handler = async (event, context) => {
   console.log("Using aws cli");
   console.log()
   return 'Hello from Lambda from aws cli!'
};

Sie können Folgendes verwenden command with values for this purpose - -

aws lambda update-function-code --function-name "awslambdausingcli" 
--zip-file "fileb://awscli.zip"

Die entsprechende Ausgabe ist wie hier gezeigt -

Die Anzeige von der AWS-Konsole ist wie hier gezeigt -

Die entsprechende Protokollausgabe ist wie folgt:

Löschfunktion

Das delete aws cli api löscht die angegebene Funktion.

Befehle enthalten

Die Befehlsdetails dafür finden Sie hier -

delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Optionen enthalten

Die in dieser API enthaltenen Optionen sind wie folgt:

--function-name(string) − Dies nimmt den Namen der Lambda-Funktion oder den Arn der aws-Lambda-Funktion an.

--qualifier (string) −Dies ist optional. Hier können Sie die Version von aws lambda angeben, die gelöscht werden muss.

-- cli-input-json(string) −Führt eine Serviceoperation basierend auf der bereitgestellten JSON-Zeichenfolge aus. Die JSON-Zeichenfolge folgt dem von --generate-cli-skeleton bereitgestellten Format. Wenn in der Befehlszeile andere Argumente angegeben werden, überschreiben die CLI-Werte die von JSON bereitgestellten Werte.

--generate-cli-skeleton(string) − Es druckt das JSON-Skelett in die Standardausgabe, ohne die API-Anforderung zu senden.

aws lambda delete-function --function-name "lambdatestcli"

Beachten Sie nun, dass die Funktion in der AWS Lambda-Funktionsliste nicht angezeigt wird -

AWS Lambda kann mithilfe eines serverlosen Frameworks erstellt und bereitgestellt werden. Sie können damit AWS Lambda-Trigger erstellen und diese auch bereitstellen, indem Sie die erforderlichen Rollen erstellen. Das serverlose Framework ermöglicht die einfachere Abwicklung großer Projekte. Die erforderlichen Ereignisse und Ressourcen werden an einer Stelle geschrieben, und nur wenige Befehle helfen bei der Bereitstellung der vollen Funktionalität auf der AWS-Konsole.

In diesem Kapitel erfahren Sie ausführlich, wie Sie mit dem serverlosen AWS-Framework beginnen.

Installieren Sie Serverless Framework mit npm install

Zunächst müssen Sie zuerst installieren nodejs. Sie können wie folgt nach Knoten suchen:

Sie müssen den folgenden Befehl verwenden, um serverlos mit dem Paket npm zu installieren:

npm install -g serverless

Führen Sie nach Abschluss von npm den Befehl serverless aus, der die Liste der Befehle anzeigt, die zum Erstellen und Bereitstellen der AWS Lambda-Funktion verwendet werden sollen. Beachten Sie die folgenden Screenshots -

Sie können auch sls anstelle von serverless verwenden. sls ist der Kurzbefehl für serverlos.

Falls Sie Hilfe zum Befehl benötigen sls, Sie können den folgenden Befehl verwenden:

sls create --help

Um ein serverloses Framework zu erstellen, müssen Sie die folgenden Schritte ausführen:

Schritt 1

Um das serverlose Framework verwenden zu können, müssen Sie die Anmeldeinformationen hinzufügen. Auf diese Weise können Sie den Benutzer zuerst in der AWS-Konsole wie folgt ausführen:

Schritt 2

Klicke auf Next:PermissionsSchaltfläche zum Hinzufügen von Berechtigungen. Sie müssen die vorhandenen Richtlinien oder den Administratorzugriff an diesen Benutzer anhängen.

Schritt 3

Klicken Create Userum den Benutzer hinzuzufügen. Es werden der Zugriffsschlüssel und der geheime Schlüssel angezeigt, die wir zum Konfigurieren des serverlosen Frameworks benötigen.

Konfigurieren Sie AWS Serverless Framework

Lassen Sie uns sehen, wie das serverlose AWS-Framework konfiguriert wird. Zu diesem Zweck können Sie den folgenden Befehl verwenden:

sls config credentials --provider aws --key accesskey --secret secretkey

Beachten Sie, dass die Details der eingegebenen Anmeldeinformationen, d. H. access key und secret key sind in der gespeichert file /aws/credentials.

Erstellen Sie zunächst einen Ordner, in dem Ihre Projektdateien gespeichert werden sollen.

Als nächstes beginnen wir die Arbeit in aws-serverless Mappe.

Erstellen Sie AWS Lambda mit Serverless Framework

Lassen Sie uns nun eine Lambda-Funktion mit dem serverlosen Framework mithilfe der folgenden Schritte erstellen:

Schritt 1

Im Folgenden finden Sie die Details für Serverless create Befehl -

Schritt 2

Jetzt müssen wir die Vorlage wie folgt zuweisen:

AWS-nodejs, aws-nodejs-typescript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle etc.

Schritt 3

Wir werden Gebrauch machen aws-nodejsVorlage zum Erstellen unseres ersten Projekts mit serverlosem Framework. Der Befehl für den gleichen Zweck ist wie hier gezeigt -

sls create --template aws-nodejs

Beachten Sie, dass dieser Befehl eine Boilerplate für die Vorlage aws-nodejs erstellt.

Schritt 4

Öffnen Sie nun den in einer IDE erstellten Ordner. Hier verwenden wir Visual Studio-Code und die Ordnerstruktur ist wie folgt:

Schritt 5

Es wurden 2 Dateien erstellt: handler.js und Serverless.yml

Die Details der AWS Lambda-Grundfunktion sind in dargestellt handler.js wie folgt -

'use strict';

module.exports.hello = (event, context, callback) => {
   const response = {
      statusCode: 200,
      body: JSON.stringify({
         message: 'Go Serverless v1.0! Your function executed successfully!',
         input: event,
      }),
   };
   callback(null, response);

   // Use this code if you don't use the http event with the LAMBDA-PROXY integration
   // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};

Diese Datei Serverless.yml hat die Konfigurationsdetails des serverlosen Frameworks wie unten gezeigt -

# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
#    docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
 name: aws
 runtime: nodejs6.10

# you can overwrite defaults here
#  stage: dev
#  region: us-east-1

# you can add statements to the Lambda function's IAM Role here
#  iamRoleStatements:
#    - Effect: "Allow"
#      Action:
#        - "s3:ListBucket"
#      Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ]  }
#    - Effect: "Allow"
#      Action:
#        - "s3:PutObject"
#      Resource:
#        Fn::Join:
#          - ""
#          - - "arn:aws:s3:::"
#            - "Ref" : "ServerlessDeploymentBucket"
#            - "/*"

# you can define service wide environment variables here
#  environment:
#    variable1: value1

# you can add packaging information here
#package:
#  include:
#    - include-me.js
#    - include-me-dir/**
#  exclude:
#    - exclude-me.js
#    - exclude-me-dir/**

functions:
 hello:
   handler: handler.hello

#    The following are a few example events you can configure
#    NOTE: Please make sure to change your handler code to work with those events
#    Check the event documentation for details
#    events:
#      - http:
#          path: users/create
#          method: get
#      - s3: ${env:BUCKET}
#      - schedule: rate(10 minutes)
#      - sns: greeter-topic
#      - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
#      - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
#      - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
#      - iot:
#          sql: "SELECT * FROM 'some_topic'"
#      - cloudwatchEvent:
#          event:
#            Example:
#              - "aws.ec2"
#            detail-type:
#              - "EC2 Instance State-change Notification"
#            detail:
#              state:
#                - pending
#      - cloudwatchLog: '/aws/lambda/hello'
#      - cognitoUserPool:
#          pool: MyUserPool
#          trigger: PreSignUp

#    Define function environment variables here
#    environment:
#      variable2: value2

# you can add CloudFormation resource templates here
#resources:
#  resources:
#    NewResource:
#      Type: AWS::S3::Bucket
#      Properties:
#        BucketName: my-new-bucket
#  Outputs:
#     NewOutput:
#       Description: "Description for the output"
#       Value: "Some output value"

Jetzt müssen wir Änderungen in der Datei serverless.yml gemäß unseren Anforderungen hinzufügen. Sie können die folgenden Befehle verwenden:

Sie können den folgenden Befehl für verwenden Service - -

service: aws-nodejs # NOTE: update this with your service name

Ändern Sie nun den Dienst hier und fügen Sie den angegebenen Namen wie gezeigt in unseren Ordner ein.

service: aws-serverless # NOTE: update this with your service name

Die Anbieterdetails sind wie gezeigt -

provider:
   name: aws
   runtime: nodejs6.10

Der Anbieter ist aws und Laufzeit ist nodejs6.10. Wir müssen das hinzufügenregion in dem wir arbeiten werden und die stage, das ist dev or prodUmgebung für das Projekt. Also hier sind die aktualisierten Details des Anbieters: Anbieter -

name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1

IAM-Rolle

Das iam roleDas heißt, der Code für die Erlaubnis, mit Lambda zu arbeiten, wird hier in der .yml Datei -

#  iamRoleStatements:
#    - Effect: "Allow"
#      Action:
#        - "s3:ListBucket"
#      Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ]  }
#    - Effect: "Allow"
#      Action:
#        - "s3:PutObject"
#      Resource:
#        Fn::Join:
#          - ""
#          - - "arn:aws:s3:::"
#            - "Ref" : "ServerlessDeploymentBucket"
#            - "/*"

Beachten Sie, dass wir im obigen Abschnitt die Details der Rolle angeben müssen, dh die Berechtigung, die für andere AWS-Services erforderlich ist.

AWS Lambda Handler Details

Der Name der Exportfunktion in handler.jsist hallo Der Handler ist also der Name der Datei, gefolgt vom Exportnamen.

functions:
   hello:
      handler: handler.hello

Die Ressourcendetails zum s3-Dienst wurden wie unten gezeigt hinzugefügt -

# you can add CloudFormation resource templates here
#resources:
#  resources:
#    NewResource:
#      Type: AWS::S3::Bucket
#      Properties:
#        BucketName: my-new-bucket
#  Outputs:
#     NewOutput:
#       Description: "Description for the output"
#       Value: "Some output value"

Stellen Sie AWS Lambda mit Serverless Framework bereit

Lassen Sie uns die obige Lambda-Funktion auf der AWS-Konsole bereitstellen. Zu diesem Zweck können Sie die folgenden Schritte ausführen:

Schritt 1

Zunächst müssen Sie den folgenden Befehl verwenden:

sls deploy

Schritt 2

Jetzt sollte die Funktion in der AWS-Konsole wie gezeigt angezeigt werden. Die Details von serverlosem AWS werden in der AWS-Cloud-Formation protokolliert. Gehen Sie zu diesem Zweck zum AWS-Service und wählen SieCloudFormation. Die Details des AWS Lambda werden wie folgt angezeigt:

Beachten Sie, dass der angegebene Name der Projektname ist, gefolgt von der verwendeten Stufe.

Schritt 3

Es erstellt die iam-Rolle für AWS Lambda und die Protokollgruppe für AWS Cloudwatch. Es wird ein S3-Bucket erstellt, in dem die Codedetails und die Konfigurationsdetails gespeichert sind.

Dies wird durch den Befehl erstellt sls deploy. Sie müssen die iam-Rolle nicht angeben, sondern sie wird standardmäßig während der erstelltdeploy Bühne.

Schritt 4

Der detaillierte Ablauf der Ereignisse wird unten im Cloud Formation Service angezeigt.

AWS Lambda Code

Der AWS Lambda-Code und seine Ausführungseinstellungen werden im folgenden Screenshot gezeigt -

Wenn Sie die Lambda-Funktion testen, finden Sie die folgende Ausgabe:

Die Protokollausgabe für die obige Funktion wird hier angezeigt -

Wir können die AWS Lambda-Funktion auch mit dem Befehl serverless testen, wie unten gezeigt -

sls invoke --function hello

Die Syntax des Aufrufbefehls wird hier angezeigt -

sls invoke --function hello

Dieser Aufrufbefehl löst die AWS Lambda-Funktion aus und zeigt die Ausgabe in der Eingabeaufforderung wie unten gezeigt an -

Sie können die Lambda-Funktion auch vor der Bereitstellung und den entsprechenden Befehl mit dem folgenden Befehl testen:

sls invoke local --function hello

Bitte beachten Sie, dass es nicht immer möglich ist, lokal zu testen, da die Ressourcen wie S3 und DynanoDB in der lokalen Umgebung nicht simuliert werden können. Nur die grundlegenden Funktionsaufrufe können lokal getestet werden.

Verwenden von API Gateway und AWS Lambda mit Serverless Framework

Lassen Sie uns sehen, wie Sie ein neues Projekt für die Arbeit mit Lambda und API Gateway erstellen. Zu diesem Zweck können Sie den folgenden Befehl verwenden:

sls create --template aws-nodejs

Jetzt offen aws-apiProjekt in visuellem Code. Sie können sehen, dass diehandler.js und serverless.ymlDateien erstellt. Lassen Sie uns die Änderungen daran vornehmen, um das API-Gateway hinzuzufügen.

Sie müssen die folgenden Änderungen in vornehmen serverless.yml - -

Jetzt werden die Ereignisdetails für die Aktivierung des API-Gateways mit AWS Lambda hinzugefügt -

Hier wurde eine neue Sache namens hinzugefügt events. Wir haben das Ereignis als angegebenhttpzusammen mit seinem Weg und seiner Methode.

Der Pfad ist der Endpunkt, den wir verwenden, wenn der API-Gateway-Pfad erstellt wird und die verwendete Methode GET ist.

Beachten Sie, dass der Handler ist handler.hellound hallo ist der Exportname von handler.js.

Beachten Sie, dass Sie das API-Gateway hier nicht bereitstellen müssen, da das serverlose Framework dies ausführt.

Jetzt werden wir das ausführen sls deploy Befehl zum Erstellen einer AWS Lambda-Funktion mit Trigger als api gateway.

sls deploy

Beachten Sie, dass die Bereitstellungsdetails oben aufgeführt sind. Es gibt dieGetURL mit dem Endpunkt als Pfaddetails. Die Bühne istprodso wird das gleiche in der url verwendet. Der Name der Funktion lautetaws-api-prod-hello.

Lassen Sie uns die URL drücken und die Ausgabe sehen. Sie können die folgenden Antworten sehen, die wir vom API-Gateway erhalten, erhalten URL -

{"message":"Go Serverless v1.0! Your function executed 
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":
"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":
"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":
"false","CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.
amazonaws.com","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 
(Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
 Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 707912794802dbb4825c79b7d8626a5d.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"j70MMqkWFp6kmvuauzp_nvTbI-WwKIQmm2Jl5hzSoN6gkdvX11hh-g==",
 "X-Amzn-Trace-Id":"Root=1-5b13f9ef-5b012e36b7f40b5013a326fc","X-Forwarded-For":"157.33.133.217, 54.182.242.73","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},
 "queryStringParameters":null,"pathParameters":null,"stageVariables":null,
 "requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
 "GET","extendedRequestId":"H6P9fE-MoAMFdIg=","requestTime":"03/Jun/2018:14:23:
 43 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
 "stage":"prod","requestTimeEpoch":1528035823928,"requestId":"b865dbd6-6739-11e8-b135
 -a30269a8ec58","identity":{"cognitoIdentityPoolId":null,"accountId":null,
 "cognitoIdentityId":null,"caller":null,"SourceIp":"157.33.133.217","accessKey":null,
 "cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
 "userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
 Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":null,
 "isBase64Encoded":false}}

Die Ereignisdetails sind auch in der Ausgabe verfügbar, wenn Sie auf die URL klicken. Die httpMethod ist GET und die queryStringParameters sind null, da in der Abfragezeichenfolge nichts übergeben wird. Die Veranstaltungsdetails werden an gegebeninput die wir im AWS Lambda-Handler angegeben haben -

Die Ausgabe, die wir vom API-Gateway erhalten, ist nur die body Details wie message und input. Die Antwort wird vollständig vom API-Gateway gesteuert und wie sie als Ausgabe angezeigt wird.

Lassen Sie uns nun Eingaben an die GET-URL in der Abfragezeichenfolge übergeben und die Anzeige sehen -

Dann können Sie die Ausgabe von Querystring wie unten gezeigt sehen -

{"message":"Go Serverless v1.0! Your function executed 
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, 
br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https",
"CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false",
"CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false",
"CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com",
"upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)
 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 
 8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==",
 "X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For":
 "157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString
 Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null,
 "requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
 "GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3-
673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
 Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":
 null,"isBase64Encoded":false}}

Lassen Sie uns die AWS Lambda-Funktion ändern, um nur die Querystring-Details wie unten gezeigt anzuzeigen -

'use strict';
module.exports.hello = (event, context, callback) => {
   const response = {
      statusCode: 200,
      body: JSON.stringify({
         message:(event.queryStringParameters &&     event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : 'Go Serverless v1.0! Your function executed successfully!'
      }),
   };
   callback(null, response);
   // Use this code if you don't use the http event with the LAMBDA-PROXY integration
   // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};

Beachten Sie, dass wir die Nachricht basierend auf dem Querystring geändert haben display message. Dadurch wird die Funktion erneut bereitgestellt und die Ausgabe überprüft. Es zeigt die Details an, die in der Meldung zur Anzeige von Abfragezeichenfolgenvariablen enthalten sind (siehe unten).

Lassen Sie uns jetzt hinzufügen post Methode zu den Ereignissen wie unten gezeigt erstellt -

Stellen Sie nun die vorgenommenen Änderungen bereit, und Sie können die folgende Ausgabe des Bereitstellungsbefehls sehen:

Beachten Sie, dass das direkte Testen der Post-URL im Browser keine Details enthält. Sie sollten die Post-URL in testenpostman.

Um einen Postboten zu bekommen, gehen Sie zu https://www.getpostman.com/apps. Laden Sie die App gemäß Ihrem Betriebssystem herunter. Nach der Installation sollten Sie in der Lage sein, Ihre Post-URL wie unten gezeigt zu testen.

Dies zeigt die Meldung an, die wir in der Lambda-Funktion hinzugefügt haben.

In diesem Kapitel werden der Prozess zum Ausführen und Aufrufen der Lambda-Funktion und die damit verbundenen Schritte ausführlich erläutert.

AWS Lambda-Ausführungsmodell

Die Ausführung von AWS hängt von den Konfigurationsdetails ab, die für die AWS Lambda-Funktion hinzugefügt wurden. Wenn die Funktion erstellt wird, gibt es einememory und time allotted, die für die Ausführung der AWS Lambda-Funktion verwendet wird.

Mit Hilfe der Konfigurationsdetails erstellt AWS Lambda einen Ausführungskontext. Der Ausführungskontext ist eine temporäre Laufzeitumgebung, die mit externen Abhängigkeiten wie Datenbankverbindungen, http-Endpunkten, Bibliotheken von Drittanbietern usw. vorbereitet wird.

Wenn die AWS Lambda-Funktion zum ersten Mal aufgerufen wird oder wenn die Lambda-Funktion aktualisiert wird, wird aufgrund der Einrichtung des Ausführungskontexts nur eine geringe Latenz hinzugefügt. Die nachfolgenden Anrufe sind jedoch schneller als die ersten. AWS Lambda versucht, den Ausführungskontext erneut zu verwenden, wenn die Lambda-Funktion in kürzerer Zeit aufgerufen wird.

Die Wiederverwendung des Ausführungskontexts hat folgende Auswirkungen:

  • Wenn für die Ausführung von Lambda eine Datenbankverbindung hergestellt wurde, wird die Verbindung zur Wiederverwendung beibehalten. Der Lambda-Code muss also so sein, dass die Verbindung zuerst überprüft werden muss - falls vorhanden und wiederverwendet; Andernfalls müssen wir eine neue Verbindung herstellen.

  • Der Ausführungskontext verwaltet einen Speicherplatz von 500 MB in /tmpVerzeichnis. Die erforderlichen Daten werden in diesem Verzeichnis zwischengespeichert. Sie können den Code zusätzlich überprüfen lassen, um festzustellen, ob die Daten vorhanden sind.

  • Wenn die Rückrufe oder einige Hintergrundprozesse nicht vollständig sind, als die Lambda-Funktion aufgerufen wurde, wird die Ausführung gestartet, wenn die Lambda-Funktion erneut aufgerufen wird. Falls dies nicht erforderlich ist, stellen Sie sicher, dass alle Prozesse ordnungsgemäß abgeschlossen sind, wenn die Funktionsausführung abgeschlossen ist.

Sie sollten den Ausführungskontext und die im tmp-Verzeichnis gespeicherten Daten verwenden. Sie müssen dem Code die erforderlichen Überprüfungen hinzufügen, um festzustellen, ob die erforderlichen Daten vorhanden sind, bevor Sie neue erstellen. Dies spart Zeit bei der Ausführung und beschleunigt die Ausführung.

Aufrufen der AWS Lambda-Funktion

Wir können AWS manuell mit aufrufen aws cli. Wir haben bereits gesehen, wie AWS Lambda mithilfe von erstellt und bereitgestellt wirdcli. Hier erstellen wir zunächst eine Funktion mitaws cli und rufen Sie das gleiche auf.

Erstellen einer AWS Lambda-Funktion mit AWS CLI

Mit den folgenden Befehlen können Sie die AWS Lambda-Funktion mit erstellen aws cli - -

Commands

create-function 
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>] 
[--description <value>] 
[--timeout <value>] 
[--memory-size <value>] 
[--environment <value>] 
[--kms-key-arn <value>] 
[--tags <value>] 
[--zip-file <value>] 
[--cli-input-json <value>]

Command with values

aws lambda create-function 
--function-name "lambdainvoke" 
--runtime "nodejs8.10" 
--role "arn:aws:iam::625297745038:role/lambdaapipolicy" 
--handler "index.handler" 
--timeout 5 
--memory-size 256 
--zip-file "fileb://C:\nodeproject\index.zip"

Die Ausgabe ist wie unten gezeigt -

Die in der AWS-Konsole erstellte Funktion ist wie folgt:

Jetzt können Sie die Funktion mit dem folgenden Befehl aufrufen:invoke

--function-name <value>
[--invocation-type <value>]
[--log-type <value>]
[--client-context <value>]
[--payload <value>]
[--qualifier <value>]
outfile <value>

Options

--function-name − Geben Sie den Namen der Funktion an, die Sie aufrufen möchten.

--invocation-type(string) − Standardmäßig ist der Aufruftyp requestresponse. Die Werte, die für den Aufruftyp verfügbar sind, sindRequestResponse, Event und DryRun.

  • Der Ereignisaufruftyp soll für die asynchrone Antwort verwendet werden.

  • DryRun ist zu verwenden, wenn Sie die Lambda-Funktion überprüfen möchten, ohne sie ausführen zu müssen.

--log-type − Es wird sein Tailwenn der Aufruftyp RequestResponse ist. Es gibt die letzten 4 KB Base64-codierten Protokolldaten an. Mögliche Werte sindTail und None.

--client-context −Sie können kundenspezifische Details an die Lambda-Funktion übergeben. Der Client-Kontext muss im JSON-Format und Base64-codiert sein. Die maximale Dateigröße beträgt 3583 Byte.

--payload − Eingabe im JSON-Format für Ihre Lambda-Funktion.

--qualifier −Sie können die Lambda-Funktionsversion oder den Aliasnamen angeben. Wenn Sie die Funktionsversion übergeben, verwendet die API die qualifizierte Funktion arn, um die Lambda-Funktion aufzurufen. Wenn Sie einen Aliasnamen angeben, verwendet die API den Alias ​​ARN, um die Lambda-Funktion aufzurufen.

outfile − Dies ist der Dateiname, in dem der Inhalt gespeichert wird.

Command with values

aws lambda invoke --function-name "lambdainvoke" --log-type 
Tail C:\nodeproject\outputfile.txt

Sie können die Payload-Option verwenden, um ein Dummy-Ereignis im JSON-Format an die Lambda-Funktion zu senden, wie unten gezeigt.

Der zugehörige AWS Lambda-Code lautet wie folgt:

exports.handler = async (event, callback) => {
   console.log("Hello => "+ event.name);
   console.log("Address =>"+ event.addr);
   callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};

Beachten Sie, dass wir im Code eine Konsole haben event.name und event.addr. Lassen Sie uns nun die Payload-Option in aws cli verwenden, um das Ereignis mit Namen und Adresse wie folgt zu senden:

aws lambda invoke --function-name "lambdainvoke" --log-type 
Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt

Thenpayload nimmt die Eingabe als Dateipfad mit json-Eingabe wie gezeigt -

{"name":"Roy Singh", "addr":"Mumbai"}

Die entsprechende Ausgabe ist wie unten gezeigt -

Die Ausgabe wird in der Datei gespeichert C:\clioutput\outputfile.txt wie folgt -

"Hello Roy Singh and address is Mumbai"

Beispielereignisse

Sie können die AWS Lambda-Funktion testen, indem Sie ein Beispielereignis übergeben. Dieser Abschnitt enthält einige Beispielereignisse für AWS Services. Du kannst den ... benutzeninvokeBefehl zum Testen der Ausgabe, wenn sie mit einem der Dienste ausgelöst wird. Beachten Sie die Codes für die entsprechenden Beispielereignisse unten -

Amazon S3 Put-Beispielereignis

{
  "Records": [{
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
         "SourceIPAddress": "127.0.0.1"
      },
      "s3": {
         "configurationId": "testConfigRule",
         "object": {
            "eTag": "0123456789abcdef0123456789abcdef",
            "sequencer": "0A1B2C3D4E5F678901",
            "key": "HappyFace.jpg",
            "size": 1024
         },
         "bucket": { 
            "arn": bucketarn,
            "name": "Sourcebucket",
            "ownerIdentity": {
               "principalId": "EXAMPLE"
            }
         },
         "s3SchemaVersion": "1.0"
      },
      "responseElements": {
         "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
         "x-amz-request-id": "EXAMPLE123456789"
      },
      "awsRegion": "us-east-1",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
         "principalId": "EXAMPLE"
      },
      "eventSource": "aws:s3"
   }]
}

Um das zu bekommen details of the file from the s3 put eventkönnen Sie den folgenden Befehl verwenden:

event.Records[0].s3.object.key   //will display the name of the file

Zu get the bucket namekönnen Sie den folgenden Befehl verwenden:

event.Records[0].s3.bucket.name  //will give the name of the bucket.

Zu see the EventNamekönnen Sie den folgenden Befehl verwenden:

event.Records[0].eventName    // will display the eventname

Amazon S3 Beispielereignis löschen

{
   "Records": [{
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
         "SourceIPAddress": "127.0.0.1"
      },
      "s3": {
         "configurationId": "testConfigRule",
         "object": {
            "sequencer": "0A1B2C3D4E5F678901",
            "key": "HappyFace.jpg"
         },
         "bucket": {
            "arn": bucketarn,
            "name": "Sourcebucket",
            "ownerIdentity": {
               "principalId": "EXAMPLE"
            }
         },
        "s3SchemaVersion": "1.0"
      },
      "responseElements": {
         "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
         "x-amz-request-id": "EXAMPLE123456789"
      },
      "awsRegion": "us-east-1",
      "eventName": "ObjectRemoved:Delete",
      "userIdentity": {
         "principalId": "EXAMPLE"
      },
      "eventSource": "aws:s3"
   }]
}

Amazon DynamoDB

Amazon DynamoDB kann ein Ereignis in AWS Lambda sein, wenn Änderungen an der DynamoDB-Tabelle vorgenommen werden. Wir können Vorgänge wie das Hinzufügen von Einträgen, das Aktualisieren und Löschen von Datensätzen aus der DynamodDB-Tabelle ausführen.

Ein Beispielereignis für das Hinzufügen, Einfügen und Löschen von DynamoDB-Ereignissen wird hier angezeigt.

{
  "Records": [{
      "eventID": "1",
      "eventVersion": "1.0",
      "dynamodb": {
         "Keys": {
            "Id": {
               "N": "101"
            }
         },
         "NewImage": {
            "Message": {
               "S": "New item!"
            },
            "Id": {
               "N": "101"
            }
         },
         "StreamViewType": "NEW_AND_OLD_IMAGES",
         "SequenceNumber": "111",
         "SizeBytes": 26
      },
      "awsRegion": "us-west-2",
      "eventName": "INSERT",
      "eventSourceARN": eventSourcearn,
      "eventSource": "aws:dynamodb"
   },
   {
      "eventID": "2",
      "eventVersion": "1.0",
      "dynamodb": {
         "OldImage": {
            "Message": {
               "S": "New item!"
            },
            "Id": {
               "N": "101"
            }
         },
        "SequenceNumber": "222",
        "Keys": {
            "Id": {
               "N": "101"
            }
         },
        "SizeBytes": 59,
        "NewImage": {
            "Message": {
               "S": "This item has changed"
            },
            "Id": {
				   "N": "101"
            }
         },
         "StreamViewType": "NEW_AND_OLD_IMAGES"
      },
      "awsRegion": "us-west-2",
      "eventName": "MODIFY",
      "eventSourceARN": Sourcearn,
      "eventSource": "aws:dynamodb"
   },
   {      
   "eventID": "3",
      "eventVersion": "1.0",
      "dynamodb": {
         "Keys": {
            "Id": {
               "N": "101"
            }
         },
         "SizeBytes": 38,
         "SequenceNumber": "333",
         "OldImage": {
            "Message": {
               "S": "This item has changed"
            },
            "Id": {
               "N": "101"
            }
         },
         "StreamViewType": "NEW_AND_OLD_IMAGES"
      },      "awsRegion": "us-west-2",
      "eventName": "REMOVE",
      "eventSourceARN": Sourcearn,
      "eventSource": "aws:dynamodb"    
   }]
}

Amazon Simple Notification Service

AWS Lambda kann hilfreich sein, um die in erstellte Benachrichtigung zu verarbeiten Simple Notification Service (SNS). Immer wenn eine Nachricht in SNS veröffentlicht wird, kann die Lambda-Funktion mit einem SNS-Ereignis ausgelöst werden, das Details zu den Nachrichten enthält. Diese Nachrichten können innerhalb der Lambda-Funktion verarbeitet und je nach Anforderung an andere Dienste gesendet werden.

Sobald die Nachricht eingegeben wurde, löst SNS die Lambda-Funktion aus. Wenn ein Fehler versucht, die Lambda-Funktion aufzurufen, versucht SNS erneut, die Lambda-Funktion bis zu dreimal aufzurufen.

Amazon SNS-Beispielereignis

Ein Beispielereignis, das alle Details enthält, die in der AWS Lambda-Funktion verfügbar sind, um den weiteren Prozess auszuführen, ist unten dargestellt -

{
  "Records": [{
      "EventVersion": "1.0",
      "EventSubscriptionArn": eventsubscriptionarn,
      "EventSource": "aws:sns",
      "Sns": {
         "SignatureVersion": "1",
         "Timestamp": "1970-01-01T00:00:00.000Z",
         "Signature": "EXAMPLE",
         "SigningCertUrl": "EXAMPLE",
         "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
         "Message": "Hello from SNS!",
         "MessageAttributes": {
            "Test": {
               "Type": "String",
               "Value": "TestString"
            },
            "TestBinary": {
               "Type": "Binary",
               "Value": "TestBinary"
            }
         },
         "Type": "Notification",
         "UnsubscribeUrl": "EXAMPLE",
         "TopicArn": topicarn,
         "Subject": "TestInvoke"
      }
   }]
}

Amazon Simple Mail Service

Der Amazon Simple Mail Service kann zum Senden und Empfangen von Nachrichten verwendet werden. Die AWS Lambda-Funktion kann beim Empfang der Nachricht im Simple Mail Service aufgerufen werden.

Beispielereignis für Amazon SES-E-Mail-Empfang

Die Details des SES-Ereignisses bei Verwendung in AWS Lambda sind nachstehend aufgeführt:

{
  "Records": [{
      "eventVersion": "1.0",
      "ses": {
         "mail": {
            "commonHeaders": {
               "from": [
                  "Jane Doe <[email protected]>"
               ],
            "to": [
               "[email protected]"
            ],
            "returnPath": "[email protected]",
            "messageId": "<0123456789Source.com>",
            "date": "Wed, 7 Oct 2015 12:34:56 -0700",
            "subject": "Test Subject"
         },
         "example": "[email protected]",
         "timestamp": "1970-01-01T00:00:00.000Z",
         "destination": [
            "[email protected]"
         ],
         "headers": [{
            "name": "Return-Path",
            "value": "<[email protected]>"
         },
         {
            "name": "Received",
            "value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)"
         },
         {
            "name": "DKIM-Signature",
            "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV"
         },
         {
            "name": "MIME-Version",
            "value": "1.0"
         },
         {
            "name": "From",
            "value": "Jane Doe <[email protected]>"
         },
         {
            "name": "Date",
            "value": "Wed, 7 Oct 2015 12:34:56 -0700"
         },
         {
            "name": "Message-ID",
            "value": "<0123456789example.com>"
         },
         {
            "name": "Subject",
            "value": "Test Subject"
         },
         {
            "name": "To",
            "value": "[email protected]"
         },
         {
            "name": "Content-Type",
            "value": "text/plain; charset=UTF-8"
         }],
         "headersTruncated": false,
         "messageId": "o3vrnil0e2ic28tr"
      },
      "receipt": {
         "recipients": [
            "[email protected]"
         ],
         "timestamp": "1970-01-01T00:00:00.000Z",
         "spamVerdict": {
            "status": "PASS"
         },
         "dkimVerdict": {
            "status": "PASS"
         },
         "processingTimeMillis": 574,
         "action": {
            "type": "Lambda",
            "invocationType": "Event",
            "functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example"
         },
         "spfVerdict": {
            "status": "PASS"
         },
         "virusVerdict": {
            "status": "PASS"
         }
      }
   },
   "eventexample": "aws:ses"
   }]
}

Amazon Cloudwatch-Protokolle

AWS Lambda kann über das Amazon CloudWatch-Protokoll ausgelöst werden CloudWatch Logs Subscriptions. CloudWatch Logs-Abonnements enthalten Echtzeitdaten zu den Protokollen, die in AWS Lambda verarbeitet und analysiert werden können oder zum Laden auf andere Systeme verwendet werden können.

Beispielereignis für Amazon CloudWatch-Protokolle

{
   "awslogs": {
      "data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW
      QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL
      wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ
      DQiMdxRQEAAA=="
   }
}

Amazon API Gateway

Die AWS Lambda-Funktion kann am aufgerufen werden httpsURL. IT kann am durchgeführt werdenGET, POST, PUT. Wenn die https-URL aufgerufen wird, wird auch die AWS Lambda-Funktion ausgelöst und die mit get / post an https übergebenen Daten können in AWS Lambda zur Verfügung gestellt werden, um sie in DynamoDB einzufügen oder E-Mails zu senden usw.

API-Gateway-Proxy-Anforderungsereignis

{
   "path": "/test/hello",
   "headers": {
      "Accept":  "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
      "Accept-Encoding": "gzip, deflate, lzma, sdch, br",
      "Accept-Language": "en-US,en;q=0.8",
      "CloudFront-Forwarded-Proto": "https",
      "CloudFront-Is-Desktop-Viewer": "true",
      "CloudFront-Is-Mobile-Viewer": "false",
      "CloudFront-Is-SmartTV-Viewer": "false",
      "CloudFront-Is-Tablet-Viewer": "false",
      "CloudFront-Viewer-Country": "US",
      "Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
      "Upgrade-Insecure-Requests": "1",
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
      "Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
      "X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
      "X-Forwarded-For": "192.168.100.1, 192.168.1.1",
      "X-Forwarded-Port": "443",
      "X-Forwarded-Proto": "https"
   },
   "pathParameters": {
      "proxy": "hello"
   },
   "requestContext": {
      "accountId": "123456789012",
      "reexampleId": "us4z18",
      "stage": "test",
      "requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
	   "identity": {
         "cognitoIdentityPoolId": "",
         "accountId": "",
         "cognitoIdentityId": "",
         "caller": "",
         "apiKey": "",
         "exampleIp": "192.168.100.1",
         "cognitoAuthenticationType": "",
         "cognitoAuthenticationProvider": "",
         "userArn": "",
         "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
         "user": ""
      },
      "reexamplePath": "/{proxy+}",
      "httpMethod": "GET",
      "apiId": "wt6mne2s9k"
   },
   "reexample": "/{proxy+}",
   "httpMethod": "GET",
   "queryStringParameters": {
      "name": "me"
   },
   "stageVariables": {
      "stageVarName": "stageVarValue"
   }
}

API Gateway Proxy Response Event

{
   "statusCode": 200,
   "headers": {
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
      "Accept-Encoding": "gzip, deflate, lzma, sdch, br",
      "Accept-Language": "en-US,en;q=0.8",
      "CloudFront-Forwarded-Proto": "https",
      "CloudFront-Is-Desktop-Viewer": "true",
      "CloudFront-Is-Mobile-Viewer": "false",
      "CloudFront-Is-SmartTV-Viewer": "false",
      "CloudFront-Is-Tablet-Viewer": "false",
      "CloudFront-Viewer-Country": "US",
      "Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
      "Upgrade-Insecure-Requests": "1",
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
      "Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
      "X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
      "X-Forwarded-For": "192.168.100.1, 192.168.1.1",
      "X-Forwarded-Port": "443",
      "X-Forwarded-Proto": "https"
   },
   "body": "Hello World"
}

Durch Löschen der AWS Lambda-Funktion wird das AWS Lambda von der AWS-Konsole entfernt. Es gibt zwei Möglichkeiten, die AWS Lambda-Funktion zu löschen.

  • Verwenden der AWS-Konsole.
  • Verwenden des AWS CLI-Befehls

In diesem Kapitel werden diese beiden Möglichkeiten ausführlich erläutert.

Verwenden der AWS-Konsole

Führen Sie die folgenden Schritte aus, um eine Lambda-Funktion über die AWS-Konsole zu löschen:

Schritt 1

Melden Sie sich bei der AWS-Konsole an und rufen Sie den AWS Lambda-Service auf. Sie können feststellen, dass die bisher erstellten AWS-Lambda-Funktionen in der AWS-Konsole aufgeführt sind (siehe unten).

Die Liste zeigt, dass bisher 23 AWS Lambda-Funktionen erstellt wurden. Sie können sie mithilfe der oben angegebenen Paginierung anzeigen oder das AWS Lambda mithilfe des Suchfelds durchsuchen.

Schritt 2

Beachten Sie, dass sich für jede AWS Lambda-Funktion ein Optionsfeld befindet. Wählen Sie die Funktion aus, die Sie löschen möchten. Beachten Sie den unten gezeigten Screenshot -

Schritt 3

Sobald Sie die AWS Lambda-Funktion ausgewählt haben, wird die ActionDas zuvor ausgegraute Dropdown-Menü wird jetzt hervorgehoben. Öffnen Sie nun das Kombinationsfeld und es werden die angezeigten Optionen angezeigt -

Schritt 4

Wähle aus DeleteSchaltfläche zum Löschen der AWS Lambda-Funktion. Sobald Sie klickenDeletezeigt die Meldung wie folgt an:

Schritt 5

Lesen Sie die Nachricht sorgfältig durch und klicken Sie später auf Delete Taste, um die AWS Lambda-Funktion dauerhaft zu entfernen.

Note- Durch das Löschen von aws lambda wird die verknüpfte Rolle nicht gelöscht. Um die Rolle zu entfernen, müssen Sie zu IAM gehen und die Rolle entfernen.

Schritt 6

Die Liste der bisher erstellten Rollen wird unten angezeigt. Beachten Sie, dass es eine gibtCreate role Taste und Delete role Taste.

Aktivieren Sie das Kontrollkästchen für die Rolle, die Sie löschen möchten. Sie können auch mehrere Rollen auswählen, die gleichzeitig gelöscht werden sollen.

Schritt 7

Sobald Sie auf die Schaltfläche Löschen klicken, wird eine Bestätigungsmeldung angezeigt (siehe unten).

Lesen Sie nun die genannten Details sorgfältig durch und klicken Sie später Yes, delete Taste.

Verwenden des AWS CLI-Befehls

Lassen Sie uns zuerst eine Lambda-Funktion mit aws cli erstellen und dieselbe mit demselben Befehl löschen. Befolgen Sie zu diesem Zweck die unten angegebenen Schritte -

Schritt 1

Der Befehl mit Werten für die Erstellungsfunktion lautet wie folgt:

aws lambda create-function 
--function-name "lambdatestcli" 
--runtime "nodejs8.10" 
--role "arn:aws:iam::625297745038:role/lambdaapipolicy" 
--handler "index.handler" 
--timeout 5 
--memory-size 256 
--zip-file "fileb://C:\demotest\index.zip"

Die entsprechende Ausgabe wird hier angezeigt -

Schritt 2

Die erstellte AWS Lambda-Funktion ist lambdatestcli. Wir haben die vorhandene Rolle arn verwendet, um die Lambda-Funktion zu erstellen.

Diese Funktion wird dann in der AWS-Konsole angezeigt (siehe unten).

Schritt 3

Rufen wir nun die Funktion auf, um die Ausgabe mit dem angezeigten Befehl zu testen -

aws lambda invoke --function-name "lambdatestcli" --log-type Tail 
C:\demotest\outputfile.txt

Dieser Befehl gibt Ihnen die Ausgabe wie gezeigt -

Schritt 4

Sie können Protokolle von Cloudwatch für die Lambda-Funktion beobachten lambdatestcli

Schritt 5

Kommen wir nun zum eigentlichen Teil des Löschens der AWS-Funktion. Delete aws cli apilöscht die angegebene Funktion. Die Details des zu diesem Zweck verwendeten Befehls sind unten angegeben -

Command

delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Options

--function-name(string) - Dies übernimmt den Namen der Lambda-Funktion oder den Arn der AWS Lambda-Funktion.

--qualifier (string)- Dies ist optional. Hier können Sie die Version von AWS Lambda angeben, die gelöscht werden muss.

-- cli-input-json(string)- Führt eine Serviceoperation basierend auf der bereitgestellten JSON-Zeichenfolge aus. Die JSON-Zeichenfolge folgt dem angegebenen Formatby --generate-cli-skeleton. Wenn in der Befehlszeile andere Argumente angegeben werden, überschreiben die CLI-Werte die von JSON bereitgestellten Werte.

--generate-cli-skeleton(string) - Es druckt das JSON-Skelett in die Standardausgabe, ohne die API-Anforderung zu senden.

Command with values

aws lambda delete-function --function-name "lambdatestcli"

Die entsprechende Ausgabe wird unten angezeigt -

Schritt 6

Wenn Sie dies jetzt überprüfen, können Sie feststellen, dass die Funktion nicht in der AWS Lambda-Funktionsliste angezeigt wird (siehe Abbildung unten).

Arbeiten mit Amazon API Gateway

Die AWS Lambda-Funktion kann am aufgerufen werden HTTPSURL. Dies kann auf GET, POST, PUT erfolgen. Wenn die HTTPS-URL aufgerufen wird, kann auch die AWS Lambda-Funktion ausgelöst und die Daten mithilfe von an HTTPS übergeben werdenget/post kann in AWS Lambda zur Verfügung gestellt werden, um zum Einfügen in DynamoDB oder zum Senden von E-Mails usw. verwendet zu werden.

In diesem Kapitel werden verschiedene Prozesse für die Arbeit mit AWS Lambda und API Gateway ausführlich beschrieben.

Beteiligte Prozesse

Im Folgenden sind die Prozesse aufgeführt, die bei der Arbeit mit AWS Lambda und API Gateway erforderlich sind:

  • Erstellen Sie eine IAM-Rolle für die Berechtigung
  • Erstellen Sie eine AWS-Lambda-Funktion
  • API-Gateway erstellen
  • Verknüpfen Sie die Lambda-Funktion mit dem API-Gateway
  • Übergabe von Daten an das API-Gateway

Ein grundlegendes Diagramm, das die Funktionsweise von API-Gateway und AWS Lambda erklärt, finden Sie hier:

Diese Prozesse werden in diesem Kapitel mit relevanten Screenshots näher erläutert.

Erstellen Sie eine IAM-Rolle für die Berechtigung

Wählen Sie unter Amazon-Dienste (siehe unten) die Option IAM aus, um Rollen zu erstellen, die von der Lambda-Funktion verwendet werden sollen.

Gehen Sie zu IAM und wählen Sie Roles vom linken Seitenabschnitt wie unten gezeigt -

Klicken Create role für Lambda-Funktion.

Wählen Sie Lambda und klicken Sie auf Permissionsunten. Wählen Sie die Berechtigung aus, die für das API-Gateway und Lambda erforderlich ist.

Suchen Sie in der Suche nach dem API-Gateway, und es werden alle zugehörigen Berechtigungen aufgelistet. Hier haben wir den vollständigen Zugriff auf das API-Gateway ausgewählt, wie unten gezeigt -

Suchen Sie nun nach dem API-Gateway und es werden alle zugehörigen Berechtigungen aufgelistet. Hier haben wir den vollständigen Zugriff auf das API-Gateway ausgewählt, wie unten gezeigt -

Sie müssen den gleichen Vorgang auch für Richtlinien wiederholen.

Wenn Sie mit der Auswahl der erforderlichen Richtlinien fertig sind, klicken Sie auf Reviewfür den nächsten Schritt. Geben Sie den Namen der Rolle gemäß Ihrer Auswahl ein, wie unten gezeigt -

Es zeigt die Richtlinien an, die der Rolle zugeordnet sind. KlickenCreate role und wir sind mit der Rollenerstellung fertig und können mit der Lambda-Funktion fortfahren.

Erstellen Sie eine AWS Lambda-Funktion

Gehen Sie zu AWS-Services und klicken Sie auf Lambda-Service, um eine Funktion zum Verbinden mit dem API-Gateway zu erstellen.

Der UI-Bildschirm für die Lambda-Funktion ist unten dargestellt. KlickenCreate function Schaltfläche, um mit der Erstellung der Lambda-Funktion fortzufahren.

Geben Sie den Namen der Funktion ein und wählen Sie die vorhandene Rolle aus, die wir oben erstellt haben.

Es blinkt eine Meldung, dass die Funktion mit dem Namen lambdawithapigateway wird erfolgreich erstellt.

Beachten Sie, dass wir hier verwenden werden nodejsLaufzeit zum Schreiben des Codes. Der AWS-Code mithelloworld Nachricht ist wie unten gezeigt -

AWS Lambda-Code ist in vorhanden index.jsDatei. Die als Handler bezeichnete Funktion hat nämlich die Parameterevents, context und callback.

Die Rückruffunktion enthält grundsätzlich den Fehler und die Erfolgsmeldung. Beachten Sie, dass wir hier keinen fehlerbezogenen Code haben, daher wird null übergeben und die Erfolgsmeldung lautetHelloWorld from lambda.

Speichern Sie zum Schluss die hinzugefügten Änderungen und lassen Sie uns fortfahren, um die Lambda-Funktion zum API-Gateway hinzuzufügen.

API-Gateway erstellen

Melden Sie sich bei Ihrem AWS-Konto an und öffnen Sie das API-Gateway wie unten gezeigt -

Klicken Sie auf API-Gateway, um zum Bildschirm zu gelangen, auf dem ein neues API-Gateway erstellt werden kann.

Klicken Create API und fügen Sie Details wie unten gezeigt hinzu -

Drücke den Create APISchaltfläche auf der rechten Seite des Bildschirms. Dadurch wird die neu erstellte API auf der linken Seite des Bildschirms angezeigt.

Drücke den Actions Dropdown-Liste zum Erstellen einer neuen Ressource für die API.

Erstellen Sie nun eine neue Ressource wie unten gezeigt -

Geben Sie die Resource NameWie nachfolgend dargestellt. Sie sehen den Namen der Ressource in der am Ende erstellten URL. KlickenCreate Resource und Sie werden es auf dem Bildschirm wie folgt sehen -

Hinzufügen GET/POSTMethoden für die Ressource wie unten gezeigt erstellt. Wählen Sie die Methode ausActions Dropdown-Liste.

Drücke den GET Methode zum Hinzufügen der Methode zur API.

Der nächste Schritt ist die Integration, die es in die Lambda-Funktion integriert. Fügen Sie nun die Lambda-Funktion hinzu, wie unten gezeigt -

Verknüpfen Sie die Lambda-Funktion mit dem API-Gateway

Wählen Sie die zuvor erstellte Lambda-Funktion aus.

Speichern Sie die Änderungen und Sie sehen ein Dialogfeld, in dem Sie um Erlaubnis gebeten werden (siehe unten).

Klicken OKfür die Erlaubnis. Dies sind die Ausführungsdetails zwischen der HTTP-Anforderung des API-Gateways und der Lambda-Funktion.

Lassen Sie uns nun die Änderungen am API-Gateway bereitstellen. Zu diesem Zweck müssen wir die auswählenDeploy API von Actions Dropdown wie unten gezeigt -

Wählen Deploy API. Es wird nach dem Bereitstellungsstatus gefragt. WählenNew Stage Klicken Sie in der Dropdown-Liste Bereitstellungsphase auf und fügen Sie den Stufennamen als hinzu Production.

Klicken Deploy Schaltfläche und es wird Sie zur URL weiterleiten, wie unten gezeigt -

Wähle aus GETMethode von links, um die URL zu erhalten. Öffnen Sie die URL in einem neuen Tab, um die Nachricht von der Lambda-Funktion anzuzeigen.

Dies ist ein grundlegendes Beispiel für die Arbeit mit AWS Lambda und AWS API Gateway. Im obigen Beispiel haben wir die Nachricht in der Lambda-Funktion fest codiert.

Nehmen wir nun die Nachrichtendetails vom API-Gateway. Falls der HTTPS-Aufruf von einer anderen Domäne aufgerufen werden muss, z. B. ein AJAX-Aufruf der API, müssen wir CORS für das erstellte API-Gateway aktivieren.

Wählen Sie die für die API erstellte Ressource aus und klicken Sie auf Actions Dropdown -

Jetzt, Enable CORS öffnet den folgenden Bildschirm -

Sie können nur wenige Methoden verwenden, um CORS zu aktivieren. Access-Control-Allow-Origin ist als * markiert, was bedeutet, dass Inhalte vom API-Gateway von jeder Domäne abgerufen werden können.

Sie können auch den Domänennamen angeben, mit dem Sie mit der API arbeiten möchten. KlickenEnable CORS and replace existing CORS headers Schaltfläche und es wird eine Bestätigungsmeldung wie unten gezeigt angezeigt -

Klicken Yes, replace existing valuesSchaltfläche, um es zu aktivieren. DasEnable CORS Bildschirm sieht aus wie unten gezeigt -

Daten an API Gateway übergeben

Öffnen Sie die in API Gateway erstellte API displayhelloworld wie unten gezeigt -

Klicken Integration Request Daten wie unten gezeigt senden -

Wählen Body Mapping Templates und fügen Sie die Content-Type für dieses Beispiel als application/json. Klicken Sie auf den hinzugefügten Inhaltstyp und fügen Sie die Details wie folgt hinzu:

Fügen Sie nun die Vorlage im JSON-Format wie unten gezeigt hinzu -

Beachten Sie, dass wir die Nachricht als Parameter verwendet haben, um Daten vom API-Gateway abzurufen und für AWS Lambda freizugeben. Die Syntax zum Abrufen der Details ist wie oben gezeigt.

Stellen Sie nun die API bereit, um die Änderungen auf der API-Gateway-URL verfügbar zu machen. Dazu müssen wir die Lambda-Funktion ändern, um die Daten basierend auf der API-Gateway-URL anzuzeigen. Der Code für die Lambda-Funktion ist unten angegeben. Beachten Sie, dass wir die Nachricht vom Ereignis nehmen und an den Rückruf weiterleiten.

exports.handler = (event, context, callback) => {
   let message = event.message;
   callback(null, message);
};

Speichern Sie nun die Änderungen in Lambda und klicken Sie auf die URL, um die Änderungen anzuzeigen. Beachten Sie den folgenden Screenshot -

Klicken Sie auf die URL wie unten gezeigt -

https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway

Beachten Sie, dass wir hier eine Nachricht als Abfragezeichenfolge an die GET-URL übergeben. Dann können Sie die Ausgabe wie unten gezeigt beobachten -

Es liest die an die Nachricht gesendeten Details von der URL und zeigt diese im Browser an.

Verwenden der Lambda-Funktion mit Amazon S3

Der Amazon S3-Dienst wird für die Dateispeicherung verwendet, in der Sie Dateien hochladen oder entfernen können. Wir können AWS Lambda auf S3 auslösen, wenn Dateien in S3-Buckets hochgeladen werden. AWS Lambda verfügt über eine Handlerfunktion, die als Startpunkt für die AWS Lambda-Funktion dient. Der Handler hat die Details der Ereignisse. In diesem Kapitel erfahren Sie, wie Sie mit AWS S3 die AWS Lambda-Funktion auslösen, wenn Sie Dateien in den S3-Bucket hochladen.

Schritte zur Verwendung der AWS Lambda-Funktion mit Amazon S3

Um AWS Lambda mit Amazon S3 verwenden zu können, benötigen wir Folgendes:

  • Erstellen Sie einen S3-Bucket
  • Erstellen Sie eine Rolle, die berechtigt ist, mit s3 und lambda zu arbeiten
  • Erstellen Sie eine Lambda-Funktion und fügen Sie s3 als Trigger hinzu.

Beispiel

Sehen wir uns diese Schritte anhand eines Beispiels an, das die grundlegende Interaktion zwischen Amazon S3 und AWS Lambda zeigt.

  • Der Benutzer lädt eine Datei in den Amazon S3-Bucket hoch

  • Sobald die Datei hochgeladen wurde, wird im Hintergrund die AWS Lambda-Funktion ausgelöst, die eine Ausgabe in Form einer Konsolenmeldung anzeigt, dass die Datei hochgeladen wurde.

  • Der Benutzer kann die Nachricht in Cloudwatch-Protokollen sehen, sobald die Datei hochgeladen wurde.

Das Blockdiagramm, das den Ablauf des Beispiels erklärt, wird hier gezeigt -

S3-Bucket erstellen

Beginnen wir zunächst mit der Erstellung eines s3-Buckets in der AWS-Konsole. Führen Sie dazu die folgenden Schritte aus:

Schritt 1

Gehen Sie zu Amazon Services und klicken Sie auf S3 im Speicherbereich wie im Bild unten hervorgehoben -

Schritt 2

Klicken Sie auf S3-Speicher und Create bucket Hier werden die hochgeladenen Dateien gespeichert.

Schritt 3

Sobald Sie klicken Create bucket Schaltfläche, können Sie einen Bildschirm wie folgt sehen -

Schritt 4

Geben Sie die Details ein Bucket name, Select the Region und klicken Sie auf CreateSchaltfläche unten links. So haben wir einen Eimer mit Namen erstellt:workingwithlambdaands3.

Schritt 5

Klicken Sie nun auf den Bucket-Namen und Sie werden aufgefordert, Dateien wie unten gezeigt hochzuladen.

Damit sind wir mit der Bucket-Erstellung in S3 fertig.

Erstellen Sie eine Rolle, die mit S3 und Lambda funktioniert

Führen Sie die folgenden Schritte aus, um eine Rolle zu erstellen, die mit S3 und Lambda funktioniert.

Schritt 1

Gehen Sie zu AWS Services und wählen Sie IAM wie unten gezeigt aus -

Schritt 2

Klicken Sie nun auf IAM -> Roles wie unten gezeigt -

Schritt 3

Klicken Sie nun auf Create roleund wählen Sie die Dienste aus, die diese Rolle verwenden. Wählen Sie Lambda und klicken Sie aufPermission Taste.

Schritt 4

Fügen Sie die Berechtigung von unten hinzu und klicken Sie auf Review.

Schritt 5

Beachten Sie, dass wir die folgenden Berechtigungen ausgewählt haben:

Beachten Sie, dass die von uns ausgewählten Richtlinien sind AmazonS3FullAccess, AWSLambdaFullAccess und CloudWatchFullAccess.

Schritt 6

Geben Sie nun den Rollennamen und die Rollenbeschreibung ein und klicken Sie auf Create Role Schaltfläche unten.

So wurde unsere Rolle benannt lambdawiths3service geschaffen.

Erstellen Sie die Lambda-Funktion und fügen Sie den S3-Trigger hinzu

In diesem Abschnitt erfahren Sie, wie Sie eine Lambda-Funktion erstellen und einen S3-Trigger hinzufügen. Zu diesem Zweck müssen Sie die folgenden Schritte ausführen:

Schritt 1

Gehen Sie zu AWS Services und wählen Sie Lambda wie unten gezeigt aus -

Schritt 2

Klicken Lambda und folgen Sie dem Verfahren zum Hinzufügen Name. Wählen Sie dasRuntime, Roleusw. und erstellen Sie die Funktion. Die von uns erstellte Lambda-Funktion ist im folgenden Screenshot dargestellt -

Schritt 3

Fügen wir nun den S3-Trigger hinzu.

Schritt 4

Wählen Sie den Auslöser von oben und fügen Sie die Details wie unten gezeigt hinzu -

Schritt 5

Wählen Sie den aus der Bucket-Dropdown-Liste erstellten Bucket aus. Der Ereignistyp enthält folgende Details:

Wählen Object Created (All), da wir einen AWS Lambda-Trigger benötigen, wenn eine Datei hochgeladen, entfernt usw. wird.

Schritt 6

Sie können Präfix und Dateimuster hinzufügen, mit denen die hinzugefügten Dateien gefiltert werden. Zum Beispiel, um Lambda nur für JPG-Bilder auszulösen. Lassen Sie es vorerst leer, da wir Lambda für alle hochgeladenen Dateien auslösen müssen. KlickenAdd Schaltfläche, um den Auslöser hinzuzufügen.

Schritt 7

Sie finden die Triggeranzeige für die Lambda-Funktion wie unten gezeigt -

Fügen wir die Details für die aws-Lambda-Funktion hinzu. Hier verwenden wir den Online-Editor, um unseren Code hinzuzufügen und nodejs als Laufzeitumgebung zu verwenden.

Schritt 8

Um S3 mit AWS Lambda auszulösen, müssen wir das S3-Ereignis im Code wie unten gezeigt verwenden -

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

Beachten Sie, dass der Ereignisparameter die Details des S3event enthält. Wir haben den Bucket-Namen und den Dateinamen getröstet, die protokolliert werden, wenn Sie ein Bild in S3bucket hochladen.

Schritt 9

Speichern wir nun die Änderungen und testen die Lambda-Funktion mit S3upload. Im Folgenden sind die in AWS Lambda hinzugefügten Codedetails aufgeführt:

Schritt 10

Fügen wir nun die Rolle, den Speicher und das Timeout hinzu.

Schritt 11

Speichern Sie nun die Lambda-Funktion. Öffnen Sie S3 über Amazon-Dienste und öffnen Sie den zuvor erstellten Bucketworkingwithlambdaands3.

Laden Sie das Bild wie unten gezeigt hoch -

Schritt 12

Klicken Upload Schaltfläche zum Hinzufügen von Dateien wie gezeigt -

Schritt 13

Klicken Add filesDateien hinzufügen. Sie können die Dateien auch ziehen und ablegen. Klicken Sie nun aufUpload Taste.

Daher haben wir ein Bild in unseren S3-Bucket hochgeladen.

Schritt 14

Um die Triggerdetails anzuzeigen, gehen Sie zum AWS-Service und wählen Sie CloudWatch. Öffnen Sie die Protokolle für die Lambda-Funktion und verwenden Sie den folgenden Code:

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

Die Ausgabe, die Sie in Cloudwatch beobachten können, ist wie folgt:

Die AWS Lambda-Funktion wird ausgelöst, wenn die Datei in den S3-Bucket hochgeladen wird und die Details in Cloudwatch wie unten gezeigt protokolliert werden.

Verwenden der Lambda-Funktion mit Amazon DynamoDB

DynamoDB kann AWS Lambda auslösen, wenn die Daten zu den Tabellen hinzugefügt, aktualisiert oder gelöscht werden. In diesem Kapitel werden wir an einem einfachen Beispiel arbeiten, das der DynamoDB-Tabelle und AWS Lambda Elemente hinzufügt, die die Daten lesen und E-Mails mit den hinzugefügten Daten senden.

Voraussetzungen

Um Amazon DB und AWS Lambda zu verwenden, müssen Sie die folgenden Schritte ausführen:

  • Erstellen Sie eine Tabelle in DynamoDB mit dem Primärschlüssel

  • Erstellen Sie eine Rolle, die berechtigt ist, mit DynamoDBand AWS Lambda zu arbeiten.

  • Funktion in AWS Lambda erstellen

  • AWS Lambda Trigger zum Senden von E-Mails

  • Fügen Sie Daten in DynamoDB hinzu

Lassen Sie uns jeden dieser Schritte im Detail besprechen.

Beispiel

Wir werden das folgende Beispiel erarbeiten, das die grundlegende Interaktion zwischen DynamoDB und AWS Lambda zeigt. Dieses Beispiel hilft Ihnen, die folgenden Vorgänge zu verstehen:

  • Erstellen einer Tabelle mit dem Namen customer in der Dynamodb-Tabelle und Eingeben von Daten in diese Tabelle.

  • Auslösen der AWS Lambda-Funktion nach Eingabe der Daten und Senden von E-Mails über den Amazon SES-Dienst.

Das grundlegende Blockdiagramm, das den Ablauf des Beispiels erklärt, ist wie folgt:

Erstellen Sie eine Tabelle in DynamoDB mit dem Primärschlüssel

Melden Sie sich bei der AWS-Konsole an. Gehen Sie zu AWS Services und wählen Sie DynamoDB wie unten gezeigt aus. Wählen Sie DynamoDB.

DynamoDB zeigt die Optionen wie unten gezeigt -

Klicken Sie nun auf Create tableum die Tabelle wie gezeigt zu erstellen. Wir haben die Tabelle als benanntcustomer mit Primärschlüssel für diese Tabelle als cust_id. Klicke aufCreate Schaltfläche, um die Tabelle zu dynamodb hinzuzufügen.

Die erstellte Tabelle ist wie folgt:

Wir können der wie folgt erstellten Tabelle Elemente hinzufügen:

Klicken Items und klicken Sie auf Create item Taste wie abgebildet -

Erstellen einer Rolle mit Berechtigungen zum Arbeiten mit DynamoDB und AWS Lambda

Wechseln Sie zum Erstellen einer Rolle zu AWS-Services und klicken Sie auf IAM.

Erstellen wir eine Richtlinie, die nur für die zuvor erstellte DynamoDB-Tabelle verwendet wird.

Wählen Sie nun a Service. Beachten Sie, dass der von uns ausgewählte Service istDynamoDB. ZumActions wir haben alle genommen DynamodbAktionen dh Zugriff auf Liste, Lesen und Schreiben. Zumresourceswerden wir die Aktionen des Tabellenressourcentyps auswählen. Wenn Sie darauf klicken, sehen Sie einen Bildschirm wie folgt:

Wählen Sie nun table und Add ARNdazu wie gezeigt. Wir werden bekommenARN Details aus customer table erstellt wie unten gezeigt -

Eingeben arn Details hier -

Klicken AddSchaltfläche, um die Änderungen zu speichern. Einmal getanClick on Review policy. Geben Sie den Namen der Richtlinie, Beschreibung usw. wie unten gezeigt ein -

Klicke auf create policyum es zu speichern. Fügen Sie die Richtlinie der zu erstellenden Rolle hinzu. WählenRole von links und geben Sie die Details ein.

Beachten Sie, dass die hinzugefügten Richtlinien sind newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess und amazonsesfullaccess. Fügen Sie die Rolle hinzu und verwenden Sie sie beim Erstellen der AWS Lambda-Funktion.

Funktion in AWS Lambda erstellen

Daher haben wir die aufgerufene Lambda-Funktion erstellt newlambdafordynamodb wie gezeigt.

Fügen wir nun dem erstellten AWS Lambda einen DynamodDB-Trigger hinzu. Die Laufzeit, die wir verwenden werden, ist Node.js.

Die folgenden Details finden Sie im Dynamodb-Trigger, die für AWS Lambda konfiguriert werden sollen:

Klicken Sie jetzt einfach auf Add um den Trigger zu AWS Lambda hinzuzufügen.

AWS Lambda-Trigger zum Senden von E-Mails

AWS Lambda wird ausgelöst, wenn Daten in AWS Lambda eingefügt werden. In den Ereignisparameter werden die Dynamodb-Daten eingefügt. Dadurch werden die Daten der Veranstaltung gelesen und eine E-Mail gesendet.

Eine E-Mail senden

Um eine E-Mail zu senden, müssen Sie die folgenden Schritte ausführen:

Schritt 1

Gehen Sie zum AWS-Service und wählen Sie SES (einfacher E-Mail-Service). Überprüfen Sie die E-Mail, an die wir eine E-Mail senden müssen, wie gezeigt.

Schritt 2

Drück den Knopf Verify a New Email Address um die E-Mail-Adresse hinzuzufügen.

Schritt 3

Geben Sie eine E-Mail-Adresse ein, um dies zu überprüfen. Die E-Mail-Adresse erhält und aktiviert Aktivierungs-E-Mails von Amazon, auf die geklickt werden muss. Nach Abschluss der Aktivierung wird die E-Mail-ID überprüft und kann mit AWS-Diensten verwendet werden.

Schritt 4

Der AWS Lambda-Code, der Daten vom Ereignis liest und E-Mails sendet, ist unten angegeben:

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log(event);
   let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
   console.log(tabledetails.NewImage.address.S);
   let customerid = tabledetails.NewImage.cust_id.S;
   let name = tabledetails.NewImage.name.S;
   let address = tabledetails.NewImage.address.S;
	
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
            }
         },
         Subject: {
            Data: "Data Inserted in Dynamodb table customer"
         }
      },
      Source: "[email protected]"
   };
   console.log('===SENDING EMAIL===');
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
}

Speichern Sie nun die Lambda-Funktion und die Daten in der DynamoDB-Tabelle.

Daten in DynamoDB hinzufügen

Verwenden Sie die folgende Sequenz, um Daten in DynamoDB hinzuzufügen.

Schritt 1

Geh zum Tisch customer erstellt in Dynamodb.

Schritt 2

Klicken Create item.

Schritt 3

Klicken Save Klicken Sie auf die Schaltfläche und überprüfen Sie die in AWS Lambda angegebene E-Mail-ID, um festzustellen, ob die E-Mail von AWS Lambda gesendet wurde.

Verwenden der Lambda-Funktion mit geplanten Ereignissen

Geplante Ereignisse treten basierend auf einem Regelsatz in regelmäßigen Abständen auf. Geplante Ereignisse werden verwendet, um die Lambda-Funktion nach einem Intervall auszuführen, das in Cloudwatch-Diensten definiert ist. Sie eignen sich am besten für die Arbeit an Cron-Jobs zusammen mit AWS Lambda. In diesem Kapitel wird anhand eines einfachen Beispiels erläutert, wie Sie alle 5 Minuten E-Mails mit geplanten Ereignissen und AWS Lambda senden.

Voraussetzungen

Die Anforderungen für die Verwendung der Lambda-Funktion mit geplanten Ereignissen lauten wie folgt:

  • Überprüfen Sie die E-Mail-ID mit AWS SES
  • Erstellen Sie eine Rolle für die Verwendung von AWS SES, Cloudwatch und AWS Lambda
  • Erstellen Sie eine Lambda-Funktion zum Senden von E-Mails
  • Regel für geplante Ereignisse aus AWS CloudWatch hinzufügen

Beispiel

In dem Beispiel, das wir betrachten werden, wird der AWS Lambda-Funktion ein CloudWatch-Ereignis hinzugefügt. Cloudwatch löst AWS Lambda basierend auf dem damit verbundenen Zeitmuster aus. Im folgenden Beispiel haben wir beispielsweise 5 Minuten als Auslöser verwendet. Dies bedeutet, dass alle 5 Minuten AWS Lambda ausgelöst wird und AWS Lambda bei jeder Auslösung E-Mails sendet.

Das grundlegende Blockdiagramm dafür ist unten gezeigt -

Überprüfen Sie die E-Mail-ID mit AWS SES

Melden Sie sich bei AWS an und rufen Sie den AWS SES-Service auf (siehe unten).

Klicken Sie nun auf Simple Email Service wie abgebildet -

Klicken Email Addresses auf der linken Seite wie gezeigt -

Es wird eine Schaltfläche angezeigt Verify a New Email Address. Klick es.

Eingeben Email AddressSie möchten überprüfen. KlickenVerify This Email AddressTaste. Sie erhalten von AWS E-Mails mit dieser E-Mail-ID und dem Betreff der E-Mail: Amazon Web Services - Anfrage zur Überprüfung der E-Mail-Adresse in der Region US East (N. Virginia)

Klicken Sie auf den in der E-Mail angegebenen Link, um die E-Mail-Adresse zu überprüfen. Nach der Überprüfung wird die E-Mail-ID wie folgt angezeigt:

Erstellen Sie eine Rolle für die Verwendung von AWS SES, Cloudwatch und AWS Lambda

Sie können auch eine Rolle erstellen, die die Berechtigung zur Verwendung der Dienste erteilt. Gehen Sie dazu zu IAM und wählen Sie Rolle. Fügen Sie die erforderlichen Richtlinien hinzu und erstellen Sie die Rolle. Beachten Sie, dass die hier erstellte Rolle istevents with lambda.

Erstellen Sie eine Lambda-Funktion zum Senden von E-Mails

Sie müssen die Schritte ausführen, um eine Lambda-Funktion unter Verwendung der Laufzeit als Knoten zu erstellen.

Fügen Sie nun wie gezeigt einen Trigger zu Lambda hinzu -

Details hinzufügen zu CloudWatch Events Trigger wie unten gezeigt -

Beachten Sie, dass das Ereignis gemäß dem erstellten Regelauslöser alle 5 Minuten ausgelöst wird.

Der Lambda-Code zum Senden einer E-Mail ist unten angegeben -

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data: "this mail comes from aws lambda event scheduling"
            }
         },
         Subject: {
            Data: "Event scheduling from aws lambda"
         }
      },
      Source: "[email protected]"
   };
   console.log('===SENDING EMAIL===');
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
};

Jetzt brauchen wir den AWS SES-Service. Sie können dies mit dem folgenden Code hinzufügen:

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});

Mail senden von nodejs, Wir haben erschaffen eParams Objekt, das Details wie das hat example mail, to mail id und the body with message wie folgt -

var eParams = {
   Destination: {
      ToAddresses: ["[email protected]"]
   },
   Message: {
      Body: {
         Text: {
            Data: "this mail comes from aws lambda event scheduling"
         }
      },
      Subject: {
         Data: "Event scheduling from aws lambda"
      }
   },
   Source: "[email protected]"
};

Der Lambda-Code zum Senden von E-Mails lautet wie folgt:

var email = ses.sendEmail(eParams, function(err, data) {
   if (err) console.log(err);
   else {
      console.log("===EMAIL SENT===");
      console.log("EMAIL CODE END");
      console.log('EMAIL: ', email);
      context.succeed(event);
      callback(null, "email is send");
   }
});

Lassen Sie uns nun diese Lambda-Funktion speichern und die E-Mail-ID auf E-Mails überprüfen. Der folgende Screenshot zeigt, dass die E-Mail alle 5 Minuten von AWS Lambda gesendet wird.

Verwenden der Lambda-Funktion mit Amazon SNS

Amazon SNS ist ein Dienst, der für Push-Benachrichtigungen verwendet wird. In diesem Kapitel erklären wir die Arbeitsweise von AWS Lambda und Amazon SNS anhand eines Beispiels, in dem die folgenden Aktionen ausgeführt werden:

  • Erstellen Sie ein Thema im SNS-Service und verwenden Sie AWS Lambda. Fügen Sie Themen zu CloudWatch hinzu

  • Senden Sie eine SNS-Textnachricht unter der angegebenen Telefonnummer.

Voraussetzungen

Um ein Thema im SNS-Service zu erstellen und AWS Lambda zu verwenden, um Themen zu CloudWatch hinzuzufügen, müssen Sie die folgenden Schritte nicht ausführen:

  • Thema in SNS erstellen
  • Erstellen Sie eine Rolle für die Berechtigung in IAM
  • Erstellen Sie eine AWS Lambda-Funktion
  • Zum Thema veröffentlichen, um den Trigger zu aktivieren
  • Überprüfen Sie die Nachrichtendetails im CloudWatch-Dienst.

Um eine SNS-Textnachricht unter der angegebenen Telefonnummer zu senden, müssen wir Folgendes tun:

  • Fügen Sie in AWS Lambda Code hinzu, um eine Nachricht an Ihr Telefon zu senden.

Beispiel

In diesem Beispiel erstellen wir ein Thema in SNS. Wenn Details in das zu veröffentlichende Thema eingegeben werden, wird AWS Lambda ausgelöst. Die Themendetails werden in CloudWatch protokolliert und eine Nachricht wird von AWS Lambda telefonisch gesendet.

Hier ist ein grundlegendes Blockdiagramm, das dasselbe erklärt -

Thema in SNS erstellen

Sie müssen die folgenden Schritte ausführen, um ein Thema in SNS zu erstellen.

Schritt 1

Melden Sie sich bei AWS Console an und rufen Sie den SNS-Dienst in Amazon auf (siehe unten).

Schritt 2

Klicken Simple Notification Service und Create topic drin.

Schritt 3

Dann müssen Sie klicken Create new topic Taste wie abgebildet -

Schritt 4

Geben Sie die Topic name und Display name und klicken Sie auf Create topic. Sie sollten den Themennamen in der Anzeige wie folgt sehen:

Erstellen Sie eine Berechtigungsrolle in IAM

Um eine Rolle für die Arbeit mit AWS Lambda und SNS zu erstellen, müssen Sie sich bei der AWS-Konsole anmelden. Wählen Sie dann IAM aus den Amazon-Diensten aus und klicken Sie auf die Rolle von links, wie unten gezeigt.

Beachten Sie, dass wir Richtlinien für SNS, Lambda und CloudWatch hinzugefügt haben. Fügen Sie den Rollennamen hinzu und klicken Sie auf die Schaltfläche Rolle erstellen, um den Vorgang der Rollenerstellung abzuschließen.

Erstellen Sie eine AWS Lambda-Funktion

In diesem Abschnitt erfahren Sie, wie Sie eine AWS Lambda-Funktion mit nodejs als Laufzeit erstellen.

Melden Sie sich zu diesem Zweck bei der AWS-Konsole an und wählen Sie AWS Lambda aus den AWS-Services. Fügen Sie den Funktionsnamen, die Rollendetails usw. hinzu und erstellen Sie die AWS Lambda-Funktion wie gezeigt.

SNS-Trigger hinzufügen

Geben Sie zum Hinzufügen des SNS-Triggers die SNS-Konfigurationsdetails wie folgt ein:

Wählen Sie dann SNS topic und Add der Auslöser für die AWS Lambda-Funktion wie gezeigt -

Fügen Sie dann den unten angegebenen AWS-Lambda-Code hinzu -

exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const sns = event.Records[0].Sns.Message;
   console.log(sns)
   callback(null, sns);
};

Im obigen Code event.Records[0].Sns.Messagegibt die Nachrichtendetails an. Wir haben Konsolenprotokolle hinzugefügt, um sie in CloudWatch anzuzeigen. Speichern Sie nun die Lambda-Funktion mit der erforderlichen Speicher- und Zeitzuweisung.

Zum Thema veröffentlichen, um den Trigger zu aktivieren

Denken Sie daran, dass wir in Schritt 1 bereits ein Thema in SNS erstellt haben. Wir werden nun das Thema veröffentlichen und die Details in CloudWatch anzeigen, die von AWS Lambda ausgelöst werden.

Zum Thema veröffentlichen

Wählen Sie zuerst den Namen des Themas aus, das Sie veröffentlichen möchten. Klicke aufPublish to topic Knopf -

Geben Sie die Subject und Message Details wie unten gezeigt -

Sie können auch auswählen JSON Nachrichtenformat zum Senden JSONStil. KlickenPublish the message Schaltfläche am Ende des Bildschirms.

Überprüfen Sie die Nachrichtendetails im CloudWatch-Dienst

Melden Sie sich bei der AWS-Konsole an und öffnen Sie den CloudWatch-Dienst. Klicken Sie links auf Protokolle und wählen Sie die Protokolle für die erstellte AWS Lambda-Funktion aus. Sie finden die folgende Anzeige für die Protokolle mit Nachrichten, die wie oben gezeigt erstellt wurden:

Fügen Sie Code in AWS Lambda hinzu, um eine Nachricht an Ihr Telefon zu senden

Hier wird SNS-Textnachrichten verwendet, um Nachrichten mit AWS Lambda auf dem Telefon zu senden. Sie können den folgenden Code verwenden, um den AWS Lambda-Code wie folgt zu aktualisieren:

const aws =  require("aws-sdk");
const sns = new aws.SNS({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const snsmessage = event.Records[0].Sns.Message;
   console.log(snsmessage);
   sns.publish({
      Message: snsmessage,
      PhoneNumber: '+911212121212'
   }, function (err, data) {
      if (err) {
         console.log(err);
         callback(err, null);
      } else {
         console.log(data);
         callback(null, data);
      }	
   });
};

Wir haben AWS SDK und den SNS-Service zum Senden von Nachrichten hinzugefügt. Die Nachricht von dem Ereignis, das von SNS kommt, wird als Textnachricht unter der angegebenen Telefonnummer gesendet.

Beachten Sie zum Beispiel den folgenden Code:

sns.publish({
   Message: snsmessage,
   PhoneNumber: '+911212121212'
}, function (err, data) {
   if (err) {
      console.log(err);
      callback(err, null);
   } else {
      console.log(data);
      callback(null, data);
   }	
});

Geben Sie jetzt das Thema ein, um die Nachricht in Cloudwatch und die oben angegebene Telefonnummer anzuzeigen.

Klicken Publish messageum die Nachricht zu veröffentlichen. Sie sehen eine Nachricht auf der Telefonnummer wie folgt:

Verwenden der Lambda-Funktion mit CloudTrail

AWS CloudTrailist ein bei Amazon verfügbarer Dienst, mit dem alle in der AWS-Konsole ausgeführten Aktivitäten protokolliert werden können. Es protokolliert alle API-Aufrufe und speichert den Verlauf, der später zum Debuggen verwendet werden kann. Beachten Sie, dass wir Lambda nicht über CloudTrail auslösen können. Stattdessen speichert CloudTrail den gesamten Verlauf in Form von Protokollen im S3-Bucket, und wir können AWS Lambda von S3 aus auslösen. Sobald Protokolle verarbeitet werden sollen, wird AWS Lambda ausgelöst, wenn Protokolle zum S3-Bucket hinzugefügt werden.

Voraussetzungen

Bevor Sie mit AWS CloudTrail, S3 und AWS Lambda arbeiten, müssen Sie folgende Schritte ausführen:

  • Erstellen Sie einen S3-Bucket zum Speichern von CloudTrail-Protokollen
  • Erstellen Sie einen SNS-Dienst
  • Erstellen Sie einen Trail in CloudTrail und weisen Sie den S3-Bucket und den SNS-Service zu
  • Erstellen Sie eine IAM-Rolle mit Berechtigung.
  • Erstellen Sie eine aws Lambda-Funktion
  • AWS Lambda-Konfiguration

Beispiel

Betrachten wir ein Beispiel, das die Funktionsweise von AWS CloudTrail, S3 und AWS Lambda zeigt. Hier erstellen wir einen Bucket in S3, in dem alle Protokolle für alle in der AWS-Konsole durchgeführten Interaktionen gespeichert werden. Lassen Sie uns ein SNS-Thema erstellen und veröffentlichen. Für diese Aktion werden die Protokolle in S3 als Datei eingegeben. AWS Lambda wird ausgelöst, das E-Mails über den Amazon SES-Dienst sendet.

Das Blockdiagramm zur Erläuterung dieses Vorgangs ist wie folgt:

Erstellen Sie einen S3-Bucket zum Speichern von CloudTrail-Protokollen

Gehen Sie zur AWS-Konsole und klicken Sie auf S3-Dienst. KlickenCreate bucket und geben Sie den Namen des Buckets ein, in dem Sie Cloudtrail-Protokolle speichern möchten, wie gezeigt -

Beachten Sie, dass wir hier einen S3-Bucket erstellt haben cloudtraillogsaws zum Speichern der Protokolle.

Erstellen Sie einen SNS-Dienst

Gehen Sie zur AWS-Konsole und klicken Sie auf Simple notification Service. Wählen Sie Themen auf der linken Seite aus und klicken Sie auf die Schaltfläche Neues Thema erstellen.

Wir haben ein Thema namens erstellt displaytrailein Thema veröffentlichen. Die Details werden in S3bucket gespeichert, das oben erstellt wurde.

Erstellen Sie einen Trail in Cloudtrail und weisen Sie den S3-Bucket und den SNS-Service zu

Gehen Sie zur AWS-Konsole und klicken Sie auf CloudTrail Service von Management-Tools wie gezeigt -

Klicken Trails von der linken Seite wie unten gezeigt -

Klicken Create TrailTaste. Geben Sie dieTrail name, Apply trail to all regions und wähle Yes. Dann werden die Protokolle für die gesamte Region angewendet.

Zum Read/Write events, wählen All. Ergänzen Sie dieS3 bucket und SNS topicDetails wie unten gezeigt. Sie können hier eine neue erstellen oder eine vorhandene hinzufügen.

Beachten Sie, dass Optionen für verfügbar sind encrypt log files, enable log file validation, send sns notification for every log file deliveryusw. Ich habe hier die Standardwerte verwendet. Sie können die Dateiverschlüsselung zulassen und es wird nach dem Verschlüsselungsschlüssel gefragt. Klicken Sie auf die Schaltfläche Trail erstellen, sobald die Details hinzugefügt wurden.

Erstellen Sie eine IAM-Rolle mit Berechtigung

Gehen Sie zur AWS-Konsole und wählen Sie IAM. Erstellen Sie eine Rolle mit Berechtigung für S3, Lambda, CloudTrail und SES zum Senden von E-Mails. Die erstellte Rolle ist wie folgt:

Erstellen Sie eine AWS Lambda-Funktion

Gehen Sie zum AWS-Service und klicken Sie auf LambdaBedienung. Fügen Sie den Funktionsnamen hinzu und wählen Sie Laufzeit alsnodejsund wählen Sie die Rolle aus, die für die Lambda-Funktion erstellt wurde. Es folgt die erstellte Lambda-Funktion.

AWS Lambda-Konfiguration

Als nächstes müssen wir S3 als Auslöser für das erstellte AWS-Lambda hinzufügen.

Fügen Sie die S3-Bucket-Details hinzu, um den Trigger hinzuzufügen, und fügen Sie den folgenden AWS Lambda-Code hinzu:

const aws =  require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
   console.log(s3message);
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data:s3message
            }
         },
         Subject: {
            Data: "cloudtrail logs"
         }
      },
      Source: "[email protected]"
   };
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
};

Beachten Sie, dass wir den S3-Bucket und die Protokolldetails aus dem Ereignis übernehmen und E-Mails mit dem SES-Dienst senden, wie oben gezeigt.

Immer wenn eine Aktivität in der AWS-Konsole stattfindet, werden die Protokolle an den S3-Bucket gesendet und gleichzeitig wird AWS Lambda ausgelöst und die E-Mail an die im Code angegebene E-Mail-ID gesendet.

Beachten Sie, dass Sie die Protokolle gemäß Ihren Anforderungen in AWS Lambda verarbeiten können.

Verwenden der Lambda-Funktion mit Amazon Kinesis

AWS KinesisDer Dienst wird zum Erfassen / Speichern von Echtzeit-Tracking-Daten verwendet, die von Website-Klicks, Protokollen und Social-Media-Feeds stammen. Wir können AWS Lambda auslösen, um zusätzliche Verarbeitung für diese Protokolle durchzuführen.

Voraussetzungen

Die grundlegenden Voraussetzungen für den Einstieg in Kinesis und AWS Lambda sind wie folgt:

  • Erstellen Sie eine Rolle mit den erforderlichen Berechtigungen
  • Erstellen Sie einen Datenstrom in Kinesis
  • Erstellen Sie eine AWS Lambda-Funktion.
  • Fügen Sie Code zu AWS Lambda hinzu
  • Fügen Sie Daten zum Kinesis-Datenstrom hinzu

Beispiel

Lassen Sie uns an einem Beispiel arbeiten, in dem wir AWS Lambda für die Verarbeitung des Datenstroms von Kinesis auslösen und E-Mails mit den empfangenen Daten senden.

Ein einfaches Blockdiagramm zur Erläuterung des Prozesses ist unten dargestellt -

Erstellen Sie eine Rolle mit den erforderlichen Berechtigungen

Gehen Sie zur AWS-Konsole und erstellen Sie eine Rolle.

Erstellen Sie einen Datenstrom in Kinesis

Gehen Sie zur AWS-Konsole und erstellen Sie einen Datenstrom in Kinesis.

Es gibt 4 Optionen wie gezeigt. In diesem Beispiel werden wir an Datenstrom erstellen arbeiten.

Klicken Create data stream. Geben Sie den Namen in den unten angegebenen Kinesis-Stream-Namen ein.

Geben Sie die Anzahl der Shards für den Datenstrom ein.

Die Details von Shards sind wie folgt:

Geben Sie den Namen ein und klicken Sie auf Create Kinesis stream Schaltfläche unten.

Beachten Sie, dass es eine gewisse Zeit dauert, bis der Stream aktiv wird.

Erstellen Sie eine AWS Lambda-Funktion

Gehen Sie zur AWS-Konsole und klicken Sie auf Lambda. Erstellen Sie die AWS Lambda-Funktion wie gezeigt -

Klicken Create functionSchaltfläche am Ende des Bildschirms. Fügen Sie Kinesis als Auslöser zu AWS Lambda hinzu.

Konfigurationsdetails zum Kinesis-Trigger hinzufügen -

Fügen Sie den Trigger hinzu und fügen Sie nun Code zu AWS Lambda hinzu.

Hinzufügen von Code zu AWS Lambda

Zu diesem Zweck verwenden wir nodejs als Laufzeit. Wir werden E-Mails senden, sobald AWS Lambda mit dem Kinesis-Datenstrom ausgelöst wird.

const aws =  require("aws-sdk");
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   let payload = "";
   event.Records.forEach(function(record) {
      // Kinesis data is base64 encoded so decode here
      payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
      console.log('Decoded payload:', payload);
   });
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data:payload
            }
         },
         Subject: {
            Data: "Kinesis data stream"
         }
      },
      Source: "[email protected]"
   };    
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
};

Der Ereignisparameter hat die Daten in den Kinesis-Datenstrom eingegeben. Der obige aws-Lambda-Code wird aktiviert, sobald Daten in den Kinesis-Datenstrom eingegeben wurden.

Hinzufügen von Daten zum Kinesis-Datenstrom

Hier verwenden wir AWS CLI, um den Datenkinesis-Datenstrom wie unten gezeigt hinzuzufügen. Zu diesem Zweck können wir den folgenden Befehl verwenden:

aws kinesis put-record --stream-name kinesisdemo  --data "hello world" --
partition-key "789675"

Dann wird AWS Lambda aktiviert und die Mail gesendet.

Verwenden der Lambda-Funktion mit benutzerdefinierten Benutzeranwendungen

Wir können die AWS-Lambda-Funktion verwenden, um die von der Benutzeranwendung generierten Ereignisse auf die folgenden zwei Arten zu verarbeiten:

  • Verwenden der AWS-Konsole
  • Verwenden der AWS CLI

Verwenden der AWS-Konsole

Über die AWS-Konsole arbeiten wir mit Ereignissen und AWS Lambda. Wechseln Sie zu diesem Zweck zur AWS-Konsole und erstellen Sie eine Lambda-Funktion.

Als nächstes fügen wir den Code für AWS Lambda hinzu -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log("Hello => "+ event.name);
   console.log("Address =>"+ event.addr);
   callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};

Beachten Sie, dass im obigen Code Name und Adresse mithilfe des Ereignisses gedruckt werden.

Die Details zum Ereignis werden anhand des Testereignisses angegeben, das wie folgt erstellt wurde:

Speichern Sie nun das Ereignis und testen Sie es.

Die entsprechende Protokollausgabe ist wie hier gezeigt -

Verwenden der AWS CLI

Wir können die obige Funktion mit AWS CLI wie folgt aufrufen:

aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt

Die Ereignisdetails werden an die Nutzlast übergeben und die Ausgabe wird unter gespeichert C:\clioutput\outputfile.txt. wie folgt -

input.txt

{"name":"Roy Singh", "addr":"Mumbai"}

Beim Aufrufen des Lambda über die AWS-CLI sehen Sie folgende Ausgabe:

Wenn Sie AWS Lambda für einen anderen AWS-Service testen möchten, können Sie dies auch mithilfe des Testereignisses in der AWS-Konsole und in der AWS-CLI tun. Ein Beispielereignis für den SNS-Dienst wird unten gezeigt -

{
   "Records": [{
      "EventVersion": "1.0",
      "EventSubscriptionArn": "arnid",
      "EventSource": "aws:sns",
      "Sns": {
         "SignatureVersion": "1",
         "Timestamp": "1970-01-01T00:00:00.000Z",
         "Signature": "EXAMPLE",
         "SigningCertUrl": "EXAMPLE",
         "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
         "Message": "Hello from SNS!",
         "MessageAttributes": {
            "Test": {
               "Type": "String",
               "Value": "TestString"
            },
            "TestBinary": {
               "Type": "Binary",
               "Value": "TestBinary"
            }
         },
         "Type": "Notification",
         "UnsubscribeUrl": "EXAMPLE",
         "TopicArn": "topicarn",
         "Subject": "TestInvoke"
      }
   }]
}

Fügen wir das oben gezeigte Beispielereignis hinzu und testen Sie es wie gezeigt -

In AWS Lambda druckt der Code die SNS-Nachricht wie im folgenden Beispiel gezeigt -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log(event.Records[0].Sns.Message);
   callback(null, event.Records[0].Sns.Message);};

Rufen wir dasselbe mit AWS CLI auf. Speichern Sie das Ereignis in einer Datei und verwenden Sie es für die Nutzdaten mit dem angezeigten Befehl -

aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt

Verwenden von AWS Lambda @ Edge mit CloudFront

Lambda @ Edge ist eine Ergänzung zum AWS Lambda-Rechendienst, mit dem die von Cloudfront bereitgestellten Inhalte angepasst werden.

Das Blockdiagramm, das die Arbeitsweise von AWS Lambda mit Cloudfront von AWS zeigt, ist unten dargestellt -

Es gibt vier Möglichkeiten, wie AWS Lambda verwendet werden kann:

  • Viewer Request − Der Endbenutzer stellt die Anforderung mit dem Namen Viewer-Anforderung an CloudFront

  • Origin Request − CloudFront leitet die Anforderung an den Ursprung weiter

  • Origin Response − CloudFront erhält die Antwort vom Ursprung

  • Viewer Response − CloudFront sendet die Antwort an den Viewer

Wir können Lambda @ Edge für folgende Zwecke verwenden:

  • So ändern Sie die Header zur Anforderungs- und Antwortzeit.

  • Fügen Sie den Headern Cookie-Details hinzu. Führen Sie AB-Tests basierend auf der Anforderung und Antwort durch.

  • Leiten Sie die URL basierend auf den Headerdetails zu einer anderen Site um.

  • Wir können den Benutzeragenten aus den Headern abrufen und die Details des Browsers, des Betriebssystems usw. herausfinden.

Voraussetzungen

Um mit der Arbeit an CloudFront und Lambda @ Edge zu beginnen, benötigen wir Folgendes:

  • Erstellen Sie einen S3-Speicher-Bucket mit Dateidetails

  • Erstellen Sie eine Rolle, die die Berechtigung zum Arbeiten mit CloudFront und Lambda @ Edge ermöglicht

  • Erstellen Sie eine CloudFront-Distribution

  • Erstellen Sie eine Lambda-Funktion

  • Fügen Sie der Cloudfront Details zur Lambda-Funktion hinzu

  • Überprüfen Sie die Cloudfront-URL im Browser

Wir werden an einem Beispiel mit CloudFront und Lambda @ Egde arbeiten, in dem wir die Seite hosten und die Antwort ändern, wenn sie als Desktop und Geräte erkannt wird.

Erstellen Sie einen S3-Speicher-Bucket mit Dateidetails

Melden Sie sich bei der AWS-Konsole an, erstellen Sie einen Bucket in S3 und fügen Sie den hinzu . html Datei, die Sie anzeigen möchten.

Klicke auf S3 und Create bucket wie unten gezeigt -

Klicken Sie nun auf Create bucket Schaltfläche und fügen Sie die Details des Eimers wie unten gezeigt hinzu -

Klicke auf Create Schaltfläche und laden Sie die .html darin hoch.

Rolle erstellen

Gehen Sie zur AWS-Konsole und klicken Sie auf IAM.

Klicken Sie nun auf Roles -> Create role Taste wie abgebildet -

Wählen Sie die Berechtigung für S3, Lambda und Cloudfront. Es wird empfohlen, die Richtlinie zu erstellen, die nur die erforderliche Funktion und den Speicher unter Verwendung der ARN-Details zulässt.

In dem unten diskutierten Beispiel zeigen wir das Full AccessGenehmigung. Richtlinien für den Rollennamenrole for cloudfrontwird wie oben gezeigt hinzugefügt. Klicken Sie auf Rolle erstellen.

Alle für Lambda @ Edge und Cloudfront erforderlichen Richtlinien sind wie oben gezeigt. Hier ist ein zusätzlicher Schritt zu tun, da die URL bei Cloudfront regional verfügbar sein wird und eine Vertrauensbeziehung zwischen den von uns verwendeten Diensten erforderlich ist.

Klicken Sie nun für die erstellte Rolle auf Trust relationships Registerkarte wie gezeigt -

Klicke auf Edit Trust Relationship wie unten gezeigt -

Es wird ein Richtliniendokument angezeigt. Wir müssen die anderen Dienste in der hinzufügenPrincipal -> Servicedie wir planen zu verwenden. Das endgültige Dokument mit den Richtlinien für Vertrauensbeziehungen lautet wie folgt:

Klicken Update Trust Policy Schaltfläche, um die Änderungen zu speichern.

Erstellen Sie eine CloudFront-Verteilung

Gehen Sie wie unten gezeigt zum CloudFront-Dienst.

Klicken Sie auf CloudFront-Dienst und dann auf Create Distribution - -

Ursprungseinstellungen, Verhaltenseinstellungen und Verteilungseinstellungen

Lassen Sie uns diese Einstellungen einzeln untersuchen -

Origin Settings

Verschiedene Parameter der Origin-Einstellungen werden wie folgt erläutert:

Origin Domain Name −Dies ist der Name des S3-Buckets, in dem wir die HTML-Dateien gespeichert haben. Gegebenenfalls können wir auch Bilder im S3-Bucket speichern, indem wir Ordner unserer Wahl erstellen.

Origin Path −Hier müssen Sie den Namen des Ordners eingeben, in dem die Dateien gespeichert sind. Derzeit haben wir diesen Ordner nicht, daher werden wir ihn vorerst leer lassen.

Origin ID −Es wird ausgefüllt, wenn der Ursprungsdomänenname ausgewählt wird. Sie können die ID nach Ihren Wünschen ändern.

Restrict Bucket Access − In diesem werden wir die Option wählen yes. Hier brauchen wir Sicherheit für den S3-Bucket, damit niemand Zugriff auf den S3-Bucket hat. Für diese Option gibt es einige weitere Optionen wieOrigin Access Identity, Comment and Grant Read Permission on Bucket.

Origin Access Identity −Wir haben eine neue Identitätsoption erstellt. Sie können auch die vorhandene Identität auswählen. Dadurch wird eine neue Identität erstellt, die von CloudFront zum Lesen der Details aus dem S3-Bucket verwendet wird.

Grand Read Permission on Bucket − Wählen Sie dazu die Option Yes.

Origin Custom Headers − Wir werden die Überschriften hier leer lassen, da wir die Details momentan nicht benötigen.

Lassen Sie uns als nächstes die diskutieren und füllen Behaviour Settings für den Vertrieb von Cloudront -

Wählen Sie nun das Protokoll - https oder http und die Caching-Option. Beachten Sie, dass das Standard-Caching 86400 oder 24 Stunden beträgt. Sie können diesen Wert je nach Anforderung ändern.

Klicken Object Caching(Option anpassen), um das Caching zu ändern. Sie können verwendensmooth streamingfalls es irgendwelche Videos auf deiner Seite gibt. Hier halten wir die Standardoption verfügbar. Sobald die Lambda-Funktion erstellt wurde, werden ihre Details hinzugefügt.

Die Details für die Verteilungseinstellungen werden unten angezeigt -

Verschiedene Parameter der Verteilungseinstellungen werden unten erläutert -

Price class −Es enthält Details wie die Herkunft des Benutzerverkehrs. Beachten Sie, dass wir hier die Standardeinstellung ausgewählt haben -Use All Edge Locations.

AWS WAF Web ACL −Dies ist für die Auswahl der Webanwendungs-Firewall vorgesehen. Hier hat es die Option alsNone. Zuerst müssen wir die Firewall in AWS erstellen. Es bietet Sicherheit für die Site.

Alternate Domain Names − Hier können Sie den Domainnamen angeben, falls vorhanden.

SSL Certificate −Hier finden Sie alle Details, die für das SSL-Zertifikat ausgewählt werden müssen. Wir werden die Standard behalten.

Default Root Object −Hier geben wir den Dateinamen an, den wir in S3 hochgeladen haben. Dazu muss der Inhalt aus der HTML-Datei standardmäßig angezeigt werden.

Im Übrigen behalten wir die Standardeinstellung bei.

Klicken Create Distribution Schaltfläche, um die Verteilung hinzuzufügen.

Beachten Sie, dass die Verteilung einige Zeit benötigt, um den Status als bereitgestellt anzuzeigen.

Erstellen Sie eine AWS Lambda-Funktion

Gehen Sie zur AWS-Konsole und erstellen Sie die Lambda-Funktion.

Im AWS Lambda-Code nehmen wir die Anforderungsheader und überprüfen den Benutzeragenten. Wenn der Benutzeragent vom Desktop stammt, ändern wir die Antwort, um die Nachricht als anzuzeigen“DESKTOP : Welcome to AWS Lambda with Cloudfront!” und wenn Gerät die Nachricht sein wird“MOBILE DEVICES : Hello from Lambda@Edge!”

Der entsprechende AWS Lambda-Code lautet wie folgt:

let content = `
<\!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <title>Simple Lambda@Edge Static Content Response</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
   </head>
   
   <body>
      <h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1>
   </body>
</html>
`;
let content1 = `
<\!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <title>Simple Lambda@Edge Static Content Response</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
   </head>
   
   <body>
      <h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1>
   </body>
</html>
`;
exports.handler = (event, context, callback) => {
   let request = event.Records[0].cf.request;
   let finalrequest = JSON.stringify(request);
   let headers = request.headers;
   let useragent = JSON.stringify(headers["user-agent"][0].value);
   let str = "";
   if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) {
      str = content;
   } else {
      str = content1;
   }
   const response = {
      status: '200',
      statusDescription: 'OK',        
      body: str+useragent,
   };
   callback(null, response);
};

Speichern Sie nun die Lambda-Funktion. Beachten Sie, dass wir die Lambda-Funktion veröffentlichen müssen, damit sie mit allen Regionen verwendet werden kann. Um zu veröffentlichen, müssen wir Folgendes tun:

Wählen Sie in der Dropdown-Liste Aktionen die Option aus Publish new version wie unten gezeigt -

Wenn Sie, klicken Sie Publish new versionwird der folgende Bildschirm angezeigt:

Geben Sie nun die Versionsbeschreibung ein und klicken Sie auf Publish. Der ARN zeigt die Version der AWS Lambda-Funktion an, die wie unten gezeigt erstellt wurde.

Fügen Sie der neuen Version, die wie unten gezeigt erstellt wurde, den CloudFront-Trigger hinzu.

Fügen Sie nun die Konfigurationsdetails für CloudFront hinzu. Das CloudFront-Ereignis bietet die Option fürViewer request, Origin request, Origin response, und Viewer response.

Wählen Sie als Nächstes die zuvor erstellte CloudFront-Distribution aus. Voneventswerden wir auswählen Viewer request. Basierend auf der Viewer-Anfrage wird der Desktop / das Gerät vom Benutzeragenten festgelegt und die Antwort geändert. Fügen Sie als Nächstes die Triggerdetails hinzu.

Sobald der Trigger hinzugefügt wurde, müssen wir warten, bis die Distribution von CloudFront bereitgestellt wird.

Sobald der Status in geändert wurde Deployedkönnen wir die CloudFront-URL testen und den Domainnamen im Browser überprüfen.

Die Anzeige im Desktop-Browser ist wie unten gezeigt. Hier haben wir den User-Agent aus dem Viewer-Request-Ereignis gedruckt.

Dies ist die Anzeige auf dem Mobilgerät.

Daher haben wir im obigen Beispiel Lambda @ Edge verwendet, um die Reaktion auf Desktop- und Mobilgeräten zu ändern.

Überwachung und Fehlerbehebung mit Cloudwatch

In AWS Lambda erstellte Funktionen werden von Amazon CloudWatch überwacht. Es hilft bei der Protokollierung aller Anforderungen an die Lambda-Funktion, wenn diese ausgelöst wird.

Beachten Sie, dass der folgende Code in AWS Lambda mit dem Funktionsnamen as hochgeladen wird lambda and cloudwatch.

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log("Lambda monitoring using amazon cloudwatch");    
   callback(null, 'Hello from Lambda');
};

Wenn die Funktion getestet oder ausgelöst wird, sollte ein Eintrag in Cloudwatch angezeigt werden. Wechseln Sie zu diesem Zweck zu AWS-Services und klicken Sie auf CloudWatch.

Wählen Sie Protokolle von der linken Seite aus.

Wenn Sie klicken Logshat es die Log Groupsder in Ihrem Konto erstellten AWS Lambda-Funktion. Wählen Sie eine beliebige AWS Lambda-Funktion aus und überprüfen Sie die Details. Hier beziehen wir uns auf die Lambda-Funktion mit Namen:lambdaandcloudwatch. Die zur Lambda-Funktion hinzugefügten Protokolle werden hier wie folgt angezeigt:

Lassen Sie uns nun der Lambda-Funktion einen S3-Trigger hinzufügen und die Protokolldetails in CloudWatch wie unten gezeigt anzeigen.

Lassen Sie uns den AWS Lambda-Code aktualisieren, um die hochgeladene Datei und den Bucket-Namen anzuzeigen, wie im folgenden Code gezeigt -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log("Lambda monitoring using amazon cloudwatch");
   const bucket = event.Records[0].s3.bucket.name;
   const filename = event.Records[0].s3.object.key;
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, 'Hello from Lambda');
};

Fügen Sie nun eine Datei hinzu s3storetestlambdaEventbucket wie gezeigt -

Wenn die Datei hochgeladen wird, werden AWS Lambda-Funktionen ausgelöst und die Konsolenprotokollmeldungen vom Lambda-Code werden in CloudWatch angezeigt (siehe unten).

If there is any error, CloudWatch gives the error details as shown below −

Note that we have referred to the bucket name wrongly in AWS Lambda code as shown −

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log("Lambda monitoring using amazon cloudwatch");
   const bucket = event.Records[0].bucket.name;
   const filename = event.Records[0].s3.object.key;
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, 'Hello from Lambda');
};

The bucket name reference from the event is wrong. Thus, we should see an error displayed in CloudWatch as shown below −

CloudWatch Metrics

The details of the Lambda function execution can be seen in the metrics. Click Metrics displayed in the left side.

The graph details for the lambda function lambdaandcloudwatch are as shown below −

It gives details such as the duration for which the Lambda function is executed, number of times it is invoked and the errors from the Lambda function.

AWS Lambda – Additional Example

Till now, we have seen working of AWS Lambda with AWS services. Based on that knowledge, let us create a simple user registration form and post the data using API gateway to AWS Lambda. AWS Lambda will get the data from the event or theAPI gateway trigger and will add those details to DynamoDB table.

Example

Let us consider an example and perform the following functionalities on it −

  • Create DynamoDB Table

  • Create Form for User Registration

  • Create AWS Lambda and API gateway to send message to Phone using AWS SNS service

  • Create AWS Lambda and API gateway to POST form data and insert in DynamoDb table

  • Create AWS Lambda and API gateway to read data from Dynamodb table

  • Final Working of the User Registration Form

Create DynamoDB Table

The data entered will be stored in DynamodDB table. We will use API gateway to share data entered with AWS Lambda and later AWS Lambda will add the details in DynamoDB.

You can use the following details to create DynamodDB table in AWS console. First, go to AWS Service and click DynamoDB. Click Table to create the table as shown below −

You can use the ARN to create policy for the DynamoDB to be used with AWS Lambda.

Go to IAM and select Policies. Click Create policy, choose service as DynamodDB as shown below −

Click All DynamoDB actions as shown above. Choose resource and enter the ARN for table as shown below −

Now, click Add as shown below.

If you click Review policy button at the end of the screen, you can see the following window −

Enter name of the policy and click Create policy button at the end of the page. Now, we need to create role to be used with Lambda. We need permissionsforDynamoDB, APIGateway and Lambda.

Go to AWS services and select IAM. Select Roles from left side and add the required roles.

Enter the role name and click Create role. The role created is roleforlambdaexample.

Create Form for User Registration

Here is the display of the user registration form to enter and to read the data from the dynamodb table.

Create AWS Lambda and API Gateway to Send OTP Message to Phone using SNS service

If you see the user registration form, there is a button validate phone. User is suppose to enter phone number and click on validate phone button to validate the phone number.

For this purpose −

When a user clicks this button, the API gateway post method which contains the phone details is called and internally AWS Lambda is triggered.

Then, AWS Lambda sendsOTP to the phone number entered using AWS SNS service.

The user receives the OTP and has to enter thisOTP number.

The textbox to enter OTP will appear when the phone number is entered and validate phone button is clicked.

The OTP received from AWS Lambda and the OTP entered by the user has to match, to allow the user to submit the user registration form.

A simple block diagram that explains the working of phone validation is shown here −

The AWS Lambda function created is as shown here −

The corresponding AWS Lambda code is as given below −

const aws =  require("aws-sdk");
const sns = new aws.SNS({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   let phoneno = event.mphone;
   let otp = Math.floor(100000 + Math.random() * 900000);
   let snsmessage = "Your otp is : "+otp;
   sns.publish({
      Message: snsmessage,
      PhoneNumber: "+91"+phoneno
   }, function (err, data) {
      if (err) {
         console.log(err);
         callback(err, null);
      } else {
         console.log(data);
         callback(null, otp);
      }	
   });
};

Note that we are using SNS service to send the OTP code. This code is used to validate the mobile number entered by the user in the user registration form. The API gateway created for above phone validation is as follows −

The Lambda function given is phonevalidationexample. We are taking the mobile phone details here to be used inside AWS Lambda. Then, AWS Lambda will send the OTP code to the given mobile number.

Create AWS Lambda and API Gateway to POST Form Data and Insert in DynamoDB Table

For user registration form, all the fields are mandatory. There is anAJAX call made wherein the data entered in the form is posted to the API Gateway URL.

A simple block diagram which explains the working of the submit button is shown here −

Once the form is filled, the submit button will call the API gateway which will trigger AWS Lambda. AWS Lambda will get the details of the form from event or theAPI Gateway and the data will be inserted in the DynamodDB table.

Let us understand the creation of API Gateway and AWS Lambda.

First, go to AWS services and click Lambda. The Lambda function created is as shown here −

Now, to create an API gateway, go to AWS service and select API Gateway. Click on Create API button shown below.

Enter the API name and click on Create API button to add the API.

Now, an API is created called as registeruser. Select the API and click Actions dropdown to create Resource.

Click Create Resource. Now, let us add the POST method. For this, click on resources created on left side and from Actions dropdown select create method. This will display dropdown as shown below −

Select the POST method and add the Lambda function that we created above.

Click Save button to add the method. To send the form details to Lambda function lambdaexample we need to add the Integration Request as shown below −

To post the form details, you will have to click Integration Request. It will display below details.

Click Body Mapping Templates to add the form fields to be posted.

Next, click Add mapping template and enter the content type. Here, we have added application/json as the content type. Click it and here you need to enter the field in json format as shown below −

Now, click the Save button and deploy the API as shown below −

Here is the API created for POST which will use inside our .html file. Please note we need to Enable CORS for the resource created. Will use the api gateway url to make ajax call so the CORS has to enabled.

Select the Methods on which you want to enable the CORS. Click on Enable CORS and replace existing CORS headers.

It displays the confirmation screen as follows −

Click Yes, replace existing values to enable CORS.

The AWS Lambda code forPOST API Gateway is as shown here −

const aws =  require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log(event);
   console.log("Entering Data");
   var data = {
      TableName : "registeruser",
      Item : {
         first_name:event.fname,
         last_name:event.lname,
         emailid:event.emailid,	  
         mobile_no : event.mphone,
         otp:event.otp,
         username:event.uname,
         password:event.passwd,
         confirm_password:event.cpasswd
      }
   }
   docClient.put(data, function(err, value) {
      if (err) {
         console.log("Error");
         callback(err, null);
      } else {
         console.log("data added successfully");
         callback(null, value);
      }
   });
}

The event parameter in AWS Lambda handler will have all the details which are added earlier in POST integration request. The details from event are added to the DynamodDB table as shown in the code.

Now, we need to get the service details from AWS-SDK as shown below −

const aws =  require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
   region:'us-east-1'
});
var data = {
   TableName : "registeruser",
   Item : {
      first_name:event.fname,
      last_name:event.lname,	
      emailid:event.emailid,
      mobile_no : event.mphone,
      otp:event.otp,
      username:event.uname,
      password:event.passwd,
      confirm_password:event.cpasswd
   }
}
docClient.put(data, function(err, value) {
   if (err) {
		console.log("Error");
      callback(err, null);
   } else {
      console.log("data added successfully");
      callback(null, value);
   }
});

Create AWS Lambda and API Gateway to Read Data from DynamodDB Table

Now, we will create AWS Lambda function to read data from DynamoDB table. We will trigger APIGateway to the AWS Lambda function which will send data to the html form.

The AWS Lambda function created is as shown below −

The corresponding AWS Lambda code is as follows −

const aws =  require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   var readdata = {
      TableName : "registeruser",
      Limit : 10
   }
   docClient.scan(readdata, function(err, data) {
      if (err) {
         console.log("Error");
         callback(err, null);
      } else {
         console.log("Data is " + data);
         callback(null, data);
      }
   });
}

Here the data is read from the DynamoDB table and given to the callback. Now, we will create APIGateway and add AWS Lambda function as the trigger.

We will add get method to the API created earlier.

Lambda function added is lambdareaddataexample. Click Save to save the method and deploy the api.

Final Working of the User Registration Form

The final display of the form is as shown below −

Now, enter the details as shown above. Note that the submit button is disabled. It will be enabled only when all the details are entered as shown −

Now, enter the mobile number and click validate phone button. It will display the alert message saying “OTP is send to the mobile, please enter the OTP to continue”. OTP sent to the mobile number is as follows −

Enter the OTP and remaining details and submit the form.

The data in DynamoDB registeruser table after submit is as shown here −

The code details are as given below −

Example1.html

<html>
   <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script type="text/javascript" src="formdet.js"></script>
      <style>
         input[type=text], input[type=password],button {
            width: 100%;
            padding: 5px 5px;
            margin: 5px 0;
            box-sizing: border-box;
         }
         #maincontainer {
            width: 80%;
            margin: auto;
            padding: 10px;
         }
         div#userregistration {
            width: 60%;
            float: left;
         }
         div#userdisplay {
            margin-left: 60%;   
         }
      </style>
   </head>
   
   <body>
      <div id="maincontainer">
         <div id="userregistration">
            <h1>User Registration Form</h1>
            <table border="0">
               <tr>
                  <td><b>First Name<span style="color:red;">*</span> : </b></td>
                  <td><input type="text" value="" name="fname" id="fname" /></td>
                  <td id="tdfname" style="display:none;"><span style="color:red;">Enter First Name</span></td>
               </tr>
               <tr>
                  <td><b>Last Name<span style="color:red;">*</span> : </b></td>
                  <td><input type="text" value="" name="lname" id="lname" /></td>
                  <td id="tdlname" style="display:none;"><span style="color:red;">Enter Last Name</span></td>
               </tr>
               <tr>
                  <td><b>Email Id<span style="color:red;">*</span> : </b></td>
                  <td><input type="text" value="" name="emailid" id="emailid" /></td>
                  <td id="tdemailid" style="display:none;"><span style="color:red;">Enter Email</span></td>
               </tr>
               <tr>
                  <td><b>Mobile No<span style="color:red;">*</span> : </b></td>
                  <td><input type="text" name="mphone" id="mphone"/></td>
                  <td id="tdmphone" style="display:none;"><span style="color:red;">Enter Mobile Number</span></td>
               </tr>   
               <tr>
                  <td></td>
                  <td><button id="validatephone">validate phone</button></td>	 
                  <td></td>
               </tr>
               <tr id="otpdiv" style="display:none;">
                  <td><b>Enter OTP<span style="color:red;">*</span>:</b></td>
                  <td><input type="text" value="" name="otp" id="otp" /></td>
                  <td id="tdotp" style="display:none;"><span style="color:red;">Enter OTP</span></td>
               </tr>
               <tr>
                  <td><b>Username<span style="color:red;">*</span>: </b></td>
                  <td><input type="text" value="" name="uname" id="uname"/></td>
                  <td id="tduname" style="display:none;"><span style="color:red;">Enter Username</span></td>
               </tr>
                  <tr><td><b>Password<span style="color:red;">*</span> :</b></td>
                  <td><input type="password" value="" name="passwd" id="passwd"/></td>
                  <td id="tdpasswd" style="display:none;"><span style="color:red;">Enter Password</span></td>
               </tr>
                  <tr><td><b>Confirm Password<span style="color:red;">*</span> :</b></td>
                  <td><input type="password" value="" name="cpasswd" id="cpasswd"/></td>
                  <td id="tdcpasswd" style="display:none;"><span style="color:red;">Enter Confirm Password</span></td>
               </tr>
               <tr>
                  <td></td>
                  <td><button name="submit" id="submit" style="display:;" disabled="true">Submit</button></td>
                  <td></td>
               </tr>
            </table>
         </div>
         
         <div id="userdisplay">
            <h1>User Display</h1>
            <table id="displaydetails" style="display:block;width:80%;padding:5px;margin:5px; border: 1px solid black;">
               <tr>
                  <td></td>
                  <td>FirstName</td>
                  <td>LastName</td>
                  <td>Mobile No</td>
                  <td>EmailID</td>
               </tr>
            </table>
         </div>
      </div>
   </body>
</html>

formdet.js

function validateform() {
   var sError="";
   if ($("#fname").val() === "") { $("#tdfname").css("display","");
      sError++;
   }
   if ($("#lname").val() === "") { $("#tdlname").css("display","");
      sError++;
   }
   if ($("#emailid").val() === "") { $("#tdemailid").css("display","");
      sError++;
   }
   if ($("#mphone").val() === "") { $("#tdmphone").css("display","");
      sError++;
   }
   if ($("#otp").val() === "") { $("#tdotp").css("display","");
      sError++;
   }
   if ($("#uname").val() === "") { $("#tduname").css("display","");
      sError++;
   }
   if ($("#passwd").val() === "") { $("#tdpasswd").css("display","");
      sError++;
   }
   if ($("#cpasswd").val() === "") { $("#tdcpasswd").css("display","");
      sError++;
   }
   if (sError === "") {
      return true;
   } else {
      return false;
   }
}
$("#fname").change(function() { if ($("#fname").val() !== "") {
      $("#tdfname").css("display","none"); } else { $("#tdfname").css("display","");			
   }
});
$("#lname").change(function() { if ($("#lname").val() !== "") {
      $("#tdlname").css("display","none"); } else { $("#tdlname").css("display","");			
   }
});
$("#emailid").change(function() { if ($("#emailid").val() !== "") {
      $("#tdemailid").css("display","none"); } else { $("#tdemailid").css("display","");			
   }
});
$("#mphone").change(function() { if ($("#mphone").val() !== "") {
      $("#tdmphone").css("display","none"); } else { $("#tdmphone").css("display","");			
   }
});
$("#otp").change(function() { if ($("#otp").val() !== "") {
      $("#tdotp").css("display","none"); } else { $("#tdotp").css("display","");			
   }
});
$("#uname").change(function() { if ($("#uname").val() !== "") {
      $("#tduname").css("display","none"); } else { $("#tduname").css("display","");			
   }
});
$("#passwd").change(function() { if ($("#passwd").val() !== "") {
      $("#tdpasswd").css("display","none"); } else { $("#tdpasswd").css("display","");			
   }
});
$("#cpasswd").change(function() { if ($("#cpasswd").val() !== "") {
      $("#tdcpasswd").css("display","none"); } else { $("#tdcpasswd").css("display","");			
   }
});

var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
function getdata() {
   var a = 0;
   $.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
         $("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
         data.Items.forEach(function(registeruser) {
            var clr = (a%2 === 0) ? "#eee": "white";
            a++;
            $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>'); }); }, error: function(err) { console.log(err); } }); } $(document).ready(function() {
   $("#otp").on("change", function() { var otpentered = $("#otp").val();
      if (otpsend == otpentered) {
         document.getElementById("submit").disabled = false;
      } else {
         alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
         document.getElementById("submit").disabled = true;
      }
   });
   $("#validatephone").on("click", function() { $.ajax({
         type:'POST',
         url:phonevalidationurl,
         data:JSON.stringify({
            "mphone":$("#mphone").val() }), success: function(data) { $("#otpdiv").css("display", "");
            alert("OTP is send to the mobile, please enter to continue");
            console.log(data);
            otpsend = data;
         },
         error : function(err) {
            $("#otpdiv").css("display", "none"); alert("Invalid mobile no."); } }); }); $("#submit").on("click", function() {
      if (validateform()) {
         $.ajax({ type:'POST', url:posturl, data:JSON.stringify({ "fname": $("#fname").val(),
               "lname": $("#lname").val(), "emailid":$("#emailid").val(),
               "mphone":$("#mphone").val(), "otp":$("#otp").val(),
               "uname":$("#uname").val(), "passwd":$("#passwd").val(),
               "cpasswd":$("#cpasswd").val()
            }),
            success: function(data) {
               alert("Data added successfully");
               console.log(data);
               getdata();
            }
         });
      }
   });
   getdata();
});

Till now, we have done AJAX call to the API created and posted the data as shown above.

The AJAX call to add the data to the table is as follows −

var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
$(document).ready(function() {
   $("#submit").on("click", function() { if (validateform()) { $.ajax({
            type:'POST',
            url:posturl,
            data:JSON.stringify({
               "fname": $("#fname").val(), "lname": $("#lname").val(),
               "emailid":$("#emailid").val(), "mphone":$("#mphone").val(),
               "otp":$("#otp").val(), "uname":$("#uname").val(),
               "passwd":$("#passwd").val(), "cpasswd":$("#cpasswd").val()
            }),
            success: function(data) {
               alert("Data added successfully");
               console.log(data);
               getdata();
            }
         });
      }
   });
});

Note that to read the data, a function is called, whose code is given below −

function getdata() {
   var a = 0;
   $.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
         $("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
         data.Items.forEach(function(registeruser) {
            var clr = (a%2 === 0) ? "#eee": "white";
            a++;
            $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>');
         });
      },
      error: function(err) {
         console.log(err);
      }
   });
}

When you click mobile number validate button, the following code is called and sends the mobile number −

var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
$("#validatephone").on("click", function() {
   $.ajax({ type:'POST', url:phonevalidationurl, data:JSON.stringify({ "mphone":$("#mphone").val()					
      }),
      success: function(data) {
         $("#otpdiv").css("display", ""); alert("OTP is send to the mobile, please enter the OTP to continue"); console.log(data); otpsend = data; }, error : function(err) { $("#otpdiv").css("display", "none");
         alert("Invalid mobile no.");
      }
   });
});

// Validate otp
$("#otp").on("change", function() { var otpentered = $("#otp").val();
   if (otpsend == otpentered) {
      document.getElementById("submit").disabled = false;
   } else {
      alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
      document.getElementById("submit").disabled = true;
   }
}