AWS Lambda - Theorie, Bekanntschaft

Eine kurze Tour durch AWS Lambda


Was ist das?


AWS Lambda: Dies ist ein Computerdienst, mit dem Sie Code für nahezu jede Art von Anwendung oder Serverdienst ausführen können - alles ohne Verwaltung. AWS Lambda übernimmt die gesamte Verwaltung für Sie, einschließlich Server- und Betriebssystemwartung, Ressourcenzuweisung und automatischer Skalierung, Codeüberwachung und Protokollierung. Sie müssen lediglich Ihren Code in einer der von AWS Lambda unterstützten Sprachen einreichen.

Warum es benutzen?


  • Das Geld. Sie zahlen nur für die Zeit, in der der Dienst ausgeführt wird.
  • Geschwindigkeit. Lambda selbst steigt auf und arbeitet sehr schnell.
  • Bequemlichkeit. Lambda bietet viele Funktionen für die Integration in AWS-Services.
  • Leistung. Parallel dazu können je nach Region maximal 1000 bis 3000 Kopien durchgeführt werden. Und wenn Sie möchten, kann diese Grenze durch Schreiben zur Unterstützung angehoben werden.

Dieser Ansatz hat seine Nachteile: Sie können das Betriebssystem, auf dem der Code ausgeführt wird, nicht steuern. Sie können die CPU, den Speicher und die Ressourcen nicht steuern. All dies wird von AWS durchgeführt.

Sie können lediglich eine Sprache aus dem unterstützten AWS Lambda auswählen.

Was kann?


Im Folgenden finden Sie eine kurze Liste der Hauptfunktionen von AWS Lambda. Als nächstes werden wir alles in Ordnung betrachten.



1. Auslöser


Auslöser sind die „Krankheitserreger“ von Lambda. In gewisser Weise kann Lambda mit PHP verglichen werden, in dem Sinne, dass es für uns läuft und stirbt . Als nächstes werden wir den Arbeitsmechanismus im Detail betrachten. Im Moment müssen Sie verstehen, dass Lambda eine Funktion ist, die auf Anfrage von Triggern ausgeführt wird.

Unten finden Sie eine Liste aller möglichen Auslöser:

API-Gateway
AWS IoT
Alexa Skills Kit
Alexa Smart Home
Application Load Balancer
Cloudfront
Cloudwatch-Ereignisse
Cloudwatch-Protokolle
CodeCommit
Cognito-Synchronisationsauslöser
Dynamodb
Kinesis
S3
SNS
SQS

Für jeden von ihnen müssen Sie eindeutige Parameter konfigurieren, die für diese Trigger verfügbar sind. Sie können auch mehrere Trigger für ein Lambda konfigurieren. Es hängt von der Art des Triggers ab, ob das Lambda synchron oder asynchron ausgeführt wird.
Hinweis: Bitte beachten Sie, dass das Lambda entweder mithilfe der AWS CLI oder des AWS SDK im manuellen Modus ausgeführt werden kann, wobei alle erforderlichen Parameter übergeben werden. Einschließlich, ob es synchron ausgeführt wird oder nicht

Schauen wir uns ein Beispiel an:


1. Gateway-API - Ermöglicht das Abrufen des Lambda in der http-Anforderung und erfordert, dass das Ergebnis an den Benutzer zurückgegeben wird. Eine solche Operation kann nicht asynchron ausgeführt werden, weil erfordert eine Antwort. Für synchrone Operationen sind einige Funktionen nicht verfügbar.

2. SQS - Wenn unser Lambda beispielsweise Nachrichten von SQS verarbeitet, müssen Sie das Ergebnis nirgendwo zurückgeben und es kann asynchron ausgeführt werden. Bei der asynchronen Ausführung werden mehrere neue Funktionen angezeigt. Beispielsweise können wir im Fehlerfall die wiederholte Ausführung konfigurieren oder solche Anforderungen weiter an die "tote" SQS- Warteschlange senden.

2. Berechtigungen für AWS Services


Dies sind AWS-Services, auf die Lambda standardmäßig Zugriff hat. Was bedeutet das? Sie können das AWS SDK jederzeit mit der Funktion verbinden, die Sie schreiben möchten, und ohne die Schlüssel oder Autorisierungsparameter können Sie die verfügbaren Dienste verwenden. Sie definieren alle verfügbaren Dienste in der IAM-Rolle , die Sie für dieses Lambda verwenden.

Jede verwendete Sprache verfügt über ein eigenes SDK, das mit den wichtigsten AWS-Diensten kommunizieren kann.
Hinweis: Für jedes Lambda konfigurieren Sie die IAM-Rolle von der Person, die das Lambda ausführen wird

3. VPC


Sie können ein virtuelles Netzwerk für Ihr Lambda konfigurieren, um beispielsweise eine sichere Verbindung zu RDS herzustellen .

4. Online-Editor


AWS Lambda bietet auch die Möglichkeit, den Code Ihrer Funktion direkt über die Benutzeroberfläche Ihres Browsers zu bearbeiten.



5. Protokollierung


Alle Anforderungen für Lambda werden in CloudWatch protokolliert, dort werden auch Daten zur Laufzeit und zum Speicher aufgezeichnet. Diese Daten können sehr nützlich sein, um Grenzwerte festzulegen. Der Code kann auch Ihre eigenen Daten protokollieren (z. B. in Node.js über console.log).

Darüber hinaus können Sie auf der Registerkarte Überwachung immer Statistiken zur Lambda-Nutzung anzeigen.

6. Umgebungsvariablen


Sie haben die Möglichkeit, Umgebungsvariablen sicher in Code zu übertragen, wodurch Sie wichtige Teile des Systems konfigurieren können, ohne Code zu liefern. Es ist möglich, Umgebungsvariablen über Schlüssel zu verschlüsseln.
Hinweis: Beachten Sie, dass eine Liste vordefinierter Umgebungsvariablen vorhanden ist

7. Code


Der interessanteste Teil, das Lambda selbst, besteht aus mehreren Teilen.

1. Ebenen - die unterste Ebene. Es ist nicht erforderlich, aber wenn Sie einige Bibliotheken hinzufügen müssen, um das Lambda zu verwenden, müssen Sie sie getrennt vom Hauptcode einfügen, damit Sie die Menge des Hauptcodes und die Geschwindigkeit der Funktion selbst erheblich sparen.

Ebenen in AWS Lambda ähneln Ebenen in Docker insofern, als sie in Bezug auf eine Funktion permanent sind und separat geändert werden müssen. Sie können auch in anderen Lambdas wiederverwendet werden.

2. Funktionsumgebung - Der Code muss unbedingt eine Funktion enthalten, die bei jedem Start des Lambda (Handler) direkt ausgeführt wird . Über sie unten. Und vor ihr ist ihre Umgebung, die wir fragen. Tatsache ist, dass die Ressourcenverwaltung so erfolgt, dass diese Umgebung nach ihrem Abschluss einige Zeit getrennt von der Funktion gespeichert wird. Und beim nächsten Start wird es fortgesetzt, ohne Zeit und Ressourcen für die Initialisierung aufzuwenden. Daher muss alles, was möglich ist, auf die Funktion selbst initialisiert werden, z. B. Konfiguration, Verbinden von Bibliotheken usw.

3. Handler - Der direkt ausgeführte Code selbst ist je nach Sprache unterschiedlich definiert. Nehmen Sie zum Beispiel Node.Js. Damit Ihr Code ausgeführt werden kann, benötigen Sie:

  1. js Datei - 1pc
  2. exports.yourFunction = () => {// Ihr Code} - 1pc

Standardmäßig wird index.js gestartet und sucht darin nach einer Funktion namens "handler". Dann führt es aus. Ihre Funktion ist möglicherweise im Code asynchron. Dies hat keinen Einfluss auf die synchrone Ausführung von Lambda.

Unten ist ein Beispielcode, ich werde versuchen zu beschreiben, was dort passiert:

//AWS SDK  ,     e var AWS = require('aws-sdk'); //   //   ,    //   API Gateway. // ,    http  exports.handler = async(event, context) => { // event       // context     aws lambda : //   ,      console.log('testing cloud watch'); // ^       Cloud Watch   return { //     http ,     statusCode: 200, body: 'Hello world', headers: {} }; }; exports.handler = (event, context, callback) => { //    callback, // -      callback( null, //<-  ,       { //     statusCode: 200, body: 'Hello world' } ); }; 

8. Versionierung


Der Dienst unterstützt die bequeme Versionierung. Kurz gesagt, wir können für jede heruntergeladene Kopie eine Version herausgeben. Und fügen Sie Aliase hinzu, die auf eine Version verweisen. Wie funktioniert es Siehe die Tabelle unten.



Lassen Sie uns nun herausfinden, was getan werden muss, um das zu erhalten, was wir im Diagramm sehen


Geben Sie einen an


  1. Erstellen Sie die erste Version unseres Lambda. Zusammen mit der ersten Version erstellen wir einen Zeiger auf die Version von "$ LATEST" . Es zeigt immer die neueste hinzugefügte Version an.
  2. Fügen Sie den Alias "Dev" hinzu . Hier wählen wir aus, wo gebunden werden soll. Wir haben verschiedene Möglichkeiten: Erstellen Sie einen Zeiger auf eine bestimmte Versionsnummer, in unserem Fall "1" , binden Sie den Zeiger an "$ LATEST" oder binden Sie an einen anderen Alias. In diesem Fall hängen wir an den Zeiger "$ LATEST" an , und jetzt zeigt unser Alias "Dev" immer auf den letzten Zweig, sodass wir unsere Anwendung immer mit der neuesten Version von Lambda in der Entwicklungsumgebung testen können. Und wenn wir plötzlich überprüfen müssen, wie es mit der alten Version funktioniert, müssen wir nur den Alias ​​im Trigger ändern oder den Link im Alias ​​auf die Version ändern, ohne unsere Anwendung zu berühren
  3. Fügen Sie den Stage- Alias ​​hinzu und binden Sie ihn an die erste Version unseres Lambda
  4. Fügen Sie den Alias "Prod" hinzu und wiederholen Sie, was wir für die "Bühne" getan haben.

Hinweis: Hier wird beschrieben, wie Sie in der Praxis mit Aliasnamen arbeiten. Der praktische Teil zu Lambda wird im nächsten Artikel zusammen mit SQS behandelt

Und so haben wir jetzt etwas Unverständliches, tatsächlich beziehen sich 3 Aliase auf eine Version, es ist nicht klar. Aber nichts, alles in Ordnung

Zweiter Zustand


  1. Erstellen Sie eine zweite Version unseres Lambda (Es ist möglich, die zweite Ausgabe von „Hallo Welt“ hinzuzufügen). Hier möchte ich darauf hinweisen, dass "$ LATEST" in diesem Moment sofort auf die zweite Version schauen wird. Und da "Dev" an "$ LATEST" gebunden ist , wird er sich auch die zweite Version ansehen.
  2. Als nächstes möchten wir, dass unsere Bühne die zweite Version betrachtet. Jetzt ist es an Version "1" gebunden. Hier müssen wir die durch "Stage " angegebene Version manuell ändern.
  3. Freut euch. Wir haben das, was wir als zweiten Zustand auf der Karte sehen. Das heißt, unser "Prod" betrachtet die erste Version und "Dev" und "Stage" die zweite.

Dritter Zustand


Um den dritten Status zu erhalten, müssen wir unserem Code nur noch ein paar Zeilen hinzufügen, und es wird eine dritte Version unseres Lambda geben. Und "Dev" wird sie jetzt ansehen.

Fassen Sie zusammen


Und was haben wir?

Ein kleiner. Schnell. Relativ günstig. Autoscale. Versioniert. Funktion.
In diesem Artikel haben wir nur den theoretischen Teil betrachtet, die Vertrautheit mit diesem Service. Gleich wie bei SQS im letzten Artikel. Im nächsten Artikel werden wir untersuchen, wie diese beiden Dienste miteinander interagieren, und in praktischer Form werden wir lernen, wie sie konfiguriert und verwendet werden.

Source: https://habr.com/ru/post/de457100/


All Articles