Detaillierte Analyse von AWS Lambda

Die Übersetzung des Artikels wurde speziell für die Studierenden des Kurses erstellt "Cloud-Services". Sind Sie daran interessiert, sich in diese Richtung zu entwickeln? Sehen Sie sich die Meisterklasse von Egor Zuev (TeamLead bei InBit) an „AWS EC2-Dienst“ und treten Sie der nächsten Kursgruppe bei: Beginn am 26. September.

Detaillierte Analyse von AWS Lambda

Immer mehr Menschen migrieren zu AWS Lambda, weil sie Skalierbarkeit, Leistung, Einsparungen und die Möglichkeit haben, Millionen oder sogar Billionen von Anfragen pro Monat zu bearbeiten. Dazu müssen Sie die Infrastruktur, auf der der Dienst ausgeführt wird, nicht verwalten. Und die automatische Skalierung ermöglicht es Ihnen, Tausende gleichzeitiger Anfragen pro Sekunde zu bedienen. Ich denke, AWS Lambda kann zu Recht als einer der beliebtesten AWS-Dienste bezeichnet werden.

AWS Lambda

AWS Lambda ist ein ereignisgesteuerter Serverless-Computing-Dienst, der es Ihnen ermöglicht, Code auszuführen, ohne Server bereitzustellen oder zu verwalten, und andere AWS-Dienste mithilfe benutzerdefinierter Logik zu erweitern. Lambda reagiert automatisch auf verschiedene Ereignisse (sogenannte Trigger), wie z. B. HTTP-Anfragen über Amazon API Gateway, Änderungen an Daten in Amazon S3-Buckets oder Amazon DynamoDB-Tabellen; Oder Sie können Ihren Code über API-Aufrufe mit dem AWS SDK und Zustandsübergängen in AWS Step Functions ausführen.

Lambda führt Code auf einer hochverfügbaren Computerinfrastruktur aus und ist vollständig für die Verwaltung der zugrunde liegenden Plattform verantwortlich, einschließlich Server- und Betriebssystemwartung, Ressourcenbereitstellung, automatische Skalierung, Codeüberwachung und Protokollierung. Das heißt, Sie müssen lediglich Ihren Code hochladen und konfigurieren, wie und wann er ausgeführt werden soll. Im Gegenzug kümmert sich der Dienst um den Start und sorgt für eine hohe Verfügbarkeit Ihrer Anwendung.

Wann auf Lambda umsteigen?

AWS Lambda ist eine praktische Computerplattform, die für eine Vielzahl von Anwendungsfällen geeignet ist, sofern die Sprache und Laufzeit Ihres Codes vom Dienst unterstützt werden. Wenn Sie sich auf Ihren Code und Ihre Geschäftslogik konzentrieren und gleichzeitig Serverwartung, -bereitstellung und -skalierung zu angemessenen Kosten auslagern möchten, ist AWS Lambda definitiv die richtige Wahl.

Lambda ist ideal für die Erstellung von Programmierschnittstellen und in Verbindung mit API Gateway können Sie die Kosten deutlich senken und schneller auf den Markt kommen. Es gibt verschiedene Möglichkeiten, Lambda-Funktionen und Optionen zur Organisation einer serverlosen Architektur zu nutzen – jeder kann je nach Ziel etwas Passendes auswählen.

Mit Lambda können Sie eine Vielzahl von Aufgaben ausführen. So können Sie dank der CloudWatch-Unterstützung verzögerte Aufgaben erstellen und einzelne Prozesse automatisieren. Es gibt keine Einschränkungen hinsichtlich der Art und Intensität der Nutzung des Dienstes (Speicherverbrauch und Zeit werden berücksichtigt) und nichts hindert Sie daran, systematisch an einem vollwertigen Microservice auf Basis von Lambda zu arbeiten.

Hier können Sie serviceorientierte Aktionen erstellen, die nicht kontinuierlich laufen. Ein typisches Beispiel ist die Bildskalierung. Auch bei verteilten Systemen bleiben Lambda-Funktionen relevant.

Wenn Sie sich also nicht mit der Zuweisung und Verwaltung von Computerressourcen befassen möchten, probieren Sie AWS Lambda aus. Wenn Sie keine umfangreichen, ressourcenintensiven Berechnungen benötigen, probieren Sie auch AWS Lambda aus. Wenn Ihr Code regelmäßig ausgeführt wird, sollten Sie AWS Lambda ausprobieren.

Sicherheit

Zur Sicherheit gibt es bislang keine Beanstandungen. Da andererseits viele der internen Prozesse und Implementierungsfunktionen dieses Modells dem Benutzer der von AWS Lambda verwalteten Laufzeitumgebung verborgen bleiben, verlieren einige allgemein anerkannte Regeln der Cloud-Sicherheit ihre Bedeutung.

Wie die meisten AWS-Dienste wird Lambda auf einer gemeinsamen Sicherheits- und Compliance-Basis zwischen AWS und dem Kunden bereitgestellt. Dieses Prinzip reduziert die betriebliche Belastung des Kunden, da AWS die Aufgaben der Wartung, Verwaltung und Überwachung von Servicekomponenten übernimmt – vom Host-Betriebssystem über die Virtualisierungsschicht bis hin zur physischen Sicherheit von Infrastrukturanlagen.

Konkret ist AWS Lambda für die Verwaltung der zugrunde liegenden Infrastruktur, der zugehörigen zugrunde liegenden Dienste, des Betriebssystems und der Anwendungsplattform verantwortlich. Dabei ist der Kunde für die Sicherheit seines Codes, die Speicherung vertraulicher Daten, die Kontrolle des Zugriffs darauf sowie auf den Lambda-Dienst und die Ressourcen (Identity and Access Management, IAM) verantwortlich, auch im Rahmen der genutzten Funktionen.

Das Diagramm unten zeigt das Modell der geteilten Verantwortung, wie es für AWS Lambda gilt. AWS-Verantwortung ist orange und Kundenverantwortung ist blau. Wie Sie sehen, übernimmt AWS mehr Verantwortung für die im Service bereitgestellten Anwendungen.

Detaillierte Analyse von AWS Lambda

Modell der geteilten Verantwortung, anwendbar auf AWS Lambda

Lambda-Laufzeit

Der Hauptvorteil von Lambda besteht darin, dass der Dienst durch die Ausführung einer Funktion in Ihrem Namen selbst die erforderlichen Ressourcen zuweist. Sie können Zeit- und Arbeitsaufwand für die Systemadministration vermeiden und sich auf Geschäftslogik und Codierung konzentrieren.

Der Lambda-Dienst ist in zwei Ebenen unterteilt. Die erste ist die Kontrollebene. Laut Wikipedia ist die Kontrollebene der Teil des Netzwerks, der für die Übertragung des Signalverkehrs und das Routing verantwortlich ist. Es ist die Hauptkomponente, die globale Entscheidungen über die Bereitstellung, Wartung und Verteilung von Arbeitslasten trifft. Darüber hinaus fungiert die Kontrollebene als Netzwerktopologie des Lösungsanbieters und ist für die Weiterleitung und Verwaltung des Datenverkehrs verantwortlich.

Die zweite Ebene ist die Datenebene. Es hat, wie die Kontrollebene, seine eigenen Aufgaben. Die Steuerungsebene stellt APIs zum Verwalten von Funktionen (CreateFunction, UpdateFunctionCode) bereit und steuert, wie Lambda mit anderen AWS-Diensten kommuniziert. Die Datenebene steuert die Invoke-API, die Lambda-Funktionen ausführt. Nachdem eine Funktion aufgerufen wurde, weist die Steuerungsebene eine vorhandene Laufzeitumgebung zu oder wählt sie aus, die für diese Funktion vorbereitet ist, und führt dann den darin enthaltenen Code aus.

AWS Lambda unterstützt eine Vielzahl von Programmiersprachen, darunter Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 und andere, über ihre jeweiligen Laufzeitumgebungen. AWS aktualisiert sie regelmäßig, verteilt Sicherheitspatches und führt andere Wartungsaktivitäten in diesen Umgebungen durch. Mit Lambda können Sie auch andere Sprachen verwenden, sofern Sie die entsprechende Laufzeit selbst implementieren. Und dann müssen Sie sich um die Wartung kümmern, einschließlich der Überwachung seiner Sicherheit.

Wie funktioniert das alles und wie wird der Dienst Ihre Aufgaben erfüllen?

Jede Funktion wird in einer oder mehreren dedizierten Umgebungen ausgeführt, die nur für die Lebensdauer dieser Funktion existieren und dann zerstört werden. Jede Umgebung führt jeweils nur einen Aufruf aus, der jedoch wiederverwendet wird, wenn mehrere serielle Aufrufe derselben Funktion erfolgen. Alle Laufzeitumgebungen laufen auf virtuellen Maschinen mit Hardware-Virtualisierung – sogenannten microVMs. Jede microVM ist einem bestimmten AWS-Konto zugewiesen und kann von Umgebungen wiederverwendet werden, um verschiedene Funktionen innerhalb dieses Kontos auszuführen. MicroVMs werden in Bausteine ​​der Lambda Worker-Hardwareplattform gepackt, die AWS gehört und von AWS betrieben wird. Die gleiche Laufzeit kann nicht von verschiedenen Funktionen verwendet werden, und microVMs sind auch nicht für verschiedene AWS-Konten einzigartig.

Detaillierte Analyse von AWS Lambda

AWS Lambda-Isolationsmodell

Die Isolierung von Laufzeitumgebungen wird über mehrere Mechanismen realisiert. Auf der obersten Ebene jeder Umgebung gibt es separate Kopien der folgenden Komponenten:

  • Funktionscode
  • Alle für die Funktion ausgewählten Lambda-Ebenen
  • Funktionsausführungsumgebung
  • Minimaler Benutzerraum basierend auf Amazon Linux

Die folgenden Mechanismen werden verwendet, um verschiedene Ausführungsumgebungen zu isolieren:

  • cgroups – Beschränken Sie den Zugriff auf CPU-, Arbeitsspeicher-, Speicher- und Netzwerkressourcen für jede Laufzeitumgebung.
  • Namespaces – Gruppierung von Prozess-IDs, Benutzer-IDs, Netzwerkschnittstellen und anderen vom Linux-Kernel verwalteten Ressourcen. Jede Laufzeit läuft in ihrem eigenen Namensraum;
  • seccomp-bpf – schränkt die Systemaufrufe ein, die zur Laufzeit verwendet werden können;
  • iptables und Routing-Tabellen – Isolierung der Ausführungsumgebungen voneinander;
  • chroot – bietet eingeschränkten Zugriff auf das zugrunde liegende Dateisystem.

In Kombination mit AWS-eigenen Isolationstechnologien sorgen diese Mechanismen für eine zuverlässige Laufzeittrennung. Auf diese Weise isolierte Umgebungen können nicht auf Daten aus anderen Umgebungen zugreifen oder diese ändern.

Obwohl mehrere Laufzeiten desselben AWS-Kontos auf einer einzelnen MicroVM ausgeführt werden können, können MicroVMs unter keinen Umständen zwischen verschiedenen AWS-Konten gemeinsam genutzt werden. AWS Lambda verwendet nur zwei Mechanismen zum Isolieren von Mikro-VMs: EC2-Instanzen und Firecracker. Die Gastisolation in Lambda auf Basis von EC2-Instanzen gibt es seit 2015. Firecracker ist ein neuer Open-Source-Hypervisor, der speziell von AWS für serverlose Workloads entwickelt und 2018 eingeführt wurde. Die physische Hardware, auf der microVMs ausgeführt werden, wird von Arbeitslasten über verschiedene Konten hinweg gemeinsam genutzt.

Speichern von Umgebungen und Prozesszuständen

Obwohl Lambda-Laufzeiten für verschiedene Funktionen einzigartig sind, können sie dieselbe Funktion wiederholt aufrufen, was bedeutet, dass die Laufzeit mehrere Stunden überleben kann, bevor sie zerstört wird.

Jede Lambda-Laufzeit verfügt außerdem über ein beschreibbares Dateisystem, auf das über das Verzeichnis /tmp zugegriffen werden kann. Auf den Inhalt kann von anderen Laufzeiten aus nicht zugegriffen werden. Was die Persistenz des Prozessstatus anbelangt, sind in /tmp geschriebene Dateien während des gesamten Lebenszyklus der Laufzeitumgebung vorhanden. Dadurch können die Ergebnisse mehrerer Aufrufe akkumuliert werden, was besonders bei teuren Vorgängen wie dem Laden von Modellen für maschinelles Lernen nützlich ist.

Anrufdatenübertragung

Die Invoke-API kann in zwei Modi verwendet werden: Ereignismodus und Anforderungs-Antwort-Modus. Im Ereignismodus wird der Anruf zur späteren Ausführung in eine Warteschlange hinzugefügt. Im Request-Response-Modus wird die Funktion sofort mit der bereitgestellten Nutzlast aufgerufen und anschließend die Antwort zurückgegeben. In beiden Fällen läuft die Funktion in einer Lambda-Umgebung, jedoch mit unterschiedlichen Nutzlastpfaden.

Bei Anfrage-Antwort-Aufrufen fließt die Nutzlast von einer Anfrageverarbeitungs-API (API-Aufrufer), wie z. B. AWS API Gateway oder AWS SDK, zum Lastausgleichsdienst und dann zum Lambda-Aufrufdienst (Invoke Service). Letzterer ermittelt die geeignete Umgebung zur Ausführung der Funktion und übergibt die Nutzlast dorthin, um den Aufruf abzuschließen. Der Load Balancer empfängt TLS-geschützten Datenverkehr über das Internet. Der Datenverkehr innerhalb des Lambda-Dienstes wird – nach dem Load Balancer – durch eine interne VPC in einer bestimmten AWS-Region geleitet.

Detaillierte Analyse von AWS Lambda

AWS Lambda-Anrufverarbeitungsmodell: Anfrage-Antwort-Modus

Ereignisanrufe können sofort getätigt oder einer Warteschlange hinzugefügt werden. In einigen Fällen wird die Warteschlange mithilfe von Amazon SQS (Amazon Simple Queue Service) implementiert, das Anrufe über einen internen Poller-Prozess an den Lambda-Anruferfüllungsdienst weiterleitet. Der übertragene Datenverkehr ist durch TLS geschützt und es erfolgt keine zusätzliche Verschlüsselung der in Amazon SQS gespeicherten Daten.

Ereignisaufrufe geben keine Antworten zurück – der Lambda Worker ignoriert einfach alle Antwortinformationen. Ereignisbasierte Aufrufe von Amazon S3, Amazon SNS, CloudWatch und anderen Quellen werden von Lambda im Ereignismodus verarbeitet. Aufrufe von Amazon Kinesis- und DynamoDB-Streams, SQS-Warteschlangen, Application Load Balancer und API Gateway-Aufrufen werden im Anforderungs-Antwort-Verfahren verarbeitet.

Überwachung

Sie können Lambda-Funktionen mithilfe einer Vielzahl von AWS-Mechanismen und -Diensten überwachen und prüfen, darunter die folgenden.

Amazon CloudWatch
Erfasst verschiedene Statistiken wie die Anzahl der Anfragen, die Dauer der Anfragen und die Anzahl der fehlgeschlagenen Anfragen.

Amazon CloudTrail
Ermöglicht Ihnen die Protokollierung, kontinuierliche Überwachung und Pflege von Kontoaktivitätsinformationen im Zusammenhang mit Ihrer AWS-Infrastruktur. Sie verfügen über einen vollständigen Verlauf der Aktionen, die mit der AWS-Managementkonsole, dem AWS SDK, Befehlszeilentools und anderen AWS-Diensten ausgeführt wurden.

AWS-Röntgen
Bietet vollständige Transparenz in allen Phasen der Anforderungsverarbeitung in Ihrer Anwendung auf der Grundlage einer Karte ihrer internen Komponenten. Ermöglicht die Analyse von Anwendungen während der Entwicklung und in Produktionsumgebungen.

AWS-Konfiguration
Sie können Änderungen an der Lambda-Funktionskonfiguration (einschließlich Löschung) und Laufzeiten, Tags, Handlernamen, Codegröße, Speicherzuweisung, Timeout-Einstellungen und Parallelitätseinstellungen sowie Lambda IAM-Ausführungsrolle, Subnetz und Sicherheitsgruppenbindungen verfolgen .

Abschluss

AWS Lambda bietet eine Reihe leistungsstarker Tools zum Erstellen sicherer und skalierbarer Anwendungen. Viele der Sicherheits- und Compliance-Praktiken in AWS Lambda sind dieselben wie in anderen AWS-Diensten, obwohl es Ausnahmen gibt. Seit März 2019 entspricht Lambda den Anforderungen von SOC 1, SOC 2, SOC 3, PCI DSS, dem Health Insurance Portability and Accountability Act (HIPAA) und anderen Vorschriften. Wenn Sie also über die Implementierung Ihrer nächsten Anwendung nachdenken, ziehen Sie den AWS Lambda-Service in Betracht – er ist möglicherweise am besten für Ihre Aufgabe geeignet.

Source: habr.com

Kommentar hinzufügen