Die Übersetzung des Artikels wurde speziell für die Studierenden des Kurses erstellt . Interessiert es Sie, sich in diesem Bereich weiterzuentwickeln? Sehen Sie sich den Masterclass von Eгор Зуев (TeamLead bei InBit) an. und schließen Sie sich der nächsten Kursgruppe an: Beginn am 26. September.

Immer mehr Menschen wechseln zu AWS Lambda wegen Skalierbarkeit, Leistung, Kostenersparnis und der Möglichkeit, Millionen und sogar Billionen von Anfragen pro Monat zu verarbeiten. Dabei müssen Sie die Infrastruktur, auf der der Dienst läuft, nicht verwalten. Das automatische Skalieren ermöglicht es, Tausende gleichzeitige Anfragen pro Sekunde zu bedienen. Ich denke, AWS Lambda kann mit Recht als einer der gefragtesten Dienste von AWS bezeichnet werden.
AWS Lambda
AWS Lambda ist ein ereignisgesteuertes, serverloses Rechenangebot, das es ermöglicht, Code ohne Bereitstellung und Verwaltung von Servern auszuführen und andere AWS-Dienste auf der Grundlage benutzerdefinierter Logik zu ergänzen. Lambda reagiert automatisch auf verschiedene Ereignisse (sogenannte Trigger), wie z. B. HTTP-Anfragen über Amazon API Gateway, Datenänderungen in Amazon S3-Buckets oder Amazon DynamoDB-Tabellen; oder Sie können Ihren Code über API-Aufrufe mithilfe des AWS SDK und Statusübergänge in AWS Step Functions auslösen.
Lambda führt Code auf einer hochverfügbaren Recheninfrastruktur aus und ist vollständig für die Verwaltung der zugrunde liegenden Plattform verantwortlich, einschließlich der Wartung von Servern und Betriebssystemen, Ressourcenbereitstellung, automatischer Skalierung, Codeüberwachung und Protokollierung. Das bedeutet, Sie müssen nur Ihren Code hochladen und konfigurieren, wann und wie er ausgeführt werden soll. Der Dienst kümmert sich dann um die Ausführung und sorgt für hohe Verfügbarkeit Ihrer Anwendung.
Wann auf Lambda umsteigen?
AWS Lambda ist eine benutzerfreundliche Rechenplattform, die für viele Anwendungsszenarien geeignet ist, vorausgesetzt, die Programmiersprache und die Laufzeitumgebung Ihres Codes werden vom Dienst unterstützt. Wenn Sie sich auf den Code und die Geschäftslogik konzentrieren möchten, während die Serverwartung, Ressourcenbereitstellung und Skalierung an einen externen Anbieter zu einem vernünftigen Preis delegiert werden, sollten Sie auf jeden Fall auf AWS Lambda umsteigen.
Lambda eignet sich ideal zur Erstellung von Programmierschnittstellen. Wenn Sie den Service zusammen mit dem API Gateway verwenden, können Sie die Kosten erheblich senken und schneller auf den Markt kommen. Es gibt verschiedene Möglichkeiten, Lambda-Funktionen zu nutzen und serverlose Architekturen zu organisieren — jeder kann etwas Passendes je nach Zielsetzung auswählen.
Lambda ermöglicht das Ausführen eines breiten Spektrums von Aufgaben. Dank der Unterstützung von CloudWatch können Sie zeitlich verzögerte Aufgaben erstellen und einzelne Prozesse automatisieren. Es gibt keine Einschränkungen hinsichtlich der Art und Intensität der Nutzung des Services (Speicherverbrauch und Zeit werden berücksichtigt), und es steht Ihnen nichts im Wege, konstant an einem vollständigen Mikrodienst auf der Basis von Lambda zu arbeiten.
Hier können serviceorientierte Aktionen erstellt werden, die nicht ständig ausgeführt werden. Ein typisches Beispiel ist das Skalieren von Bildern. Selbst bei verteilten Systemen verlieren Lambda-Funktionen nicht an Relevanz.
Wenn Sie also keine Ressourcen für die Bereitstellung und Verwaltung von Rechenressourcen aufwenden möchten — probieren Sie AWS Lambda aus; wenn Sie keine rechenintensiven, schweren Berechnungen benötigen — probieren Sie ebenfalls AWS Lambda aus; wenn Ihr Code regelmäßig ausgeführt wird — genau richtig, Sie sollten AWS Lambda ausprobieren.
Sicherheit
Bisher gibt es keine Beschwerden hinsichtlich der Sicherheit. Andererseits, da dem Nutzer viele interne Prozesse und Besonderheiten der Implementierung dieses Modells in der verwalteten Ausführungsumgebung von AWS Lambda verborgen bleiben, verlieren einige allgemein akzeptierte Regeln der Cloud-Sicherheit an Relevanz.
Wie die meisten AWS-Services wird Lambda nach dem Prinzip der geteilten Verantwortung zwischen AWS und dem Kunden in Bezug auf Sicherheit und Einhaltung von Vorschriften bereitgestellt. Dieses Prinzip reduziert die operative Belastung für den Kunden, da AWS die Wartung, Verwaltung und Kontrolle der Servicekomponenten übernimmt — von der Betriebssystemebene des Hosts und der Virtualisierungsebene bis zur physischen Sicherheit der Infrastruktur.
Wenn es konkret um AWS Lambda geht, übernimmt AWS das Management der zugrunde liegenden Infrastruktur, der damit verbundenen Basisdienste, des Betriebssystems und der Anwendungsplattform. Während der Kunde für die Sicherheit seines Codes, die Speicherung vertraulicher Daten sowie die Zugriffskontrolle darauf und auf die Lambda-Dienste und -Ressourcen (Identity and Access Management, IAM) verantwortlich ist, einschließlich der verwendeten Funktionen.
Im folgenden Diagramm sehen Sie das Modell der gemeinsamen Verantwortung, das für AWS Lambda gilt. Der Verantwortungsbereich von AWS ist orange gefärbt, während die Verantwortung des Kunden blau ist. Wie Sie sehen, übernimmt AWS mehr Verantwortung für die auf dem Dienst bereitgestellten Anwendungen.

Das Modell der gemeinsamen Verantwortung, das für AWS Lambda gilt
Lambda-Ausführungsumgebung
Der Hauptvorteil von Lambda besteht darin, dass der Dienst, während er eine Funktion in Ihrem Namen ausführt, die benötigten Ressourcen selbst bereitstellt. Sie müssen keine Zeit und Mühe mit der Systemverwaltung verbringen und können sich auf die Geschäftslogik und das Schreiben von Code konzentrieren.
Der Lambda-Dienst ist in zwei Ebenen unterteilt. Die erste ist die Management-Ebene. Laut Wikipedia ist die Management-Ebene (control plane) der Teil des Netzwerks, der für die Übertragung von Signalkonditionen und die Routing verantwortlich ist. Sie ist das Hauptkomponente, die globale Entscheidungen über die Zuweisung, Wartung und Verteilung von Arbeitslasten trifft. Außerdem fungiert die Management-Ebene als Netzwerktopologie des Lösungsanbieters, die für das Routing und das Management des Verkehrs verantwortlich ist.
Die zweite Ebene ist die Datenausgabe-Ebene. Sie hat, ebenso wie die Management-Ebene, ihre eigenen Aufgaben. Die Management-Ebene stellt APIs zur Verwaltung von Funktionen (CreateFunction, UpdateFunctionCode) bereit und kontrolliert die Interaktion von Lambda mit anderen AWS-Diensten. Die Datenausgabe-Ebene verwaltet die API-Aufrufe (Invoke API), die Lambda-Funktionen auslösen. Nach dem Aufruf einer Funktion weist die Management-Ebene entweder eine vorhandene, für diese Funktion vorbereitete Ausführungsumgebung zu oder wählt diese aus und führt dann den Code darin aus.
AWS Lambda unterstützt eine Vielzahl von Programmier sprachen, darunter Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 und andere durch die entsprechenden Laufzeitumgebungen. AWS aktualisiert diese regelmäßig, verteilt Sicherheits patches und führt andere Wartungsarbeiten an diesen Umgebungen durch. Lambda erlaubt die Verwendung weiterer Sprachen, solange Sie die entsprechende Laufzeitumgebung selbst implementieren. In diesem Fall sind Sie für die Wartung verantwortlich, einschließlich der Gewährleistung der Sicherheit.
Wie funktioniert das alles und wie wird der Dienst Ihre Funktionen ausführen?
Jede Funktion läuft in einer oder mehreren dedizierten Umgebungen, die nur während des Lebenszyklus dieser Funktion existieren und dann zerstört werden. In jeder Umgebung wird nur ein Aufruf gleichzeitig ausgeführt, aber sie wird wiederverwendet, wenn mehrere serielle Aufrufe derselben Funktion auftreten. Alle Laufzeitumgebungen laufen auf virtuellen Maschinen mit hardwarebasierter Virtualisierung – sogenannten microVMs. Jede microVM wird einem bestimmten AWS-Konto zugeordnet und kann von Umgebungen zur Ausführung verschiedener Funktionen innerhalb dieses Kontos mehrfach verwendet werden. MicroVMs sind in die Strukturblöcke der Lambda Worker-Hardware verpackt, die von AWS besessen und verwaltet werden. Dieselbe Laufzeitumgebung kann nicht von mehreren Funktionen verwendet werden, da microVMs für verschiedene AWS-Konten einzigartig sind.

Das Isolationsmodell in AWS Lambda
Die Isolierung von Laufzeitumgebungen wird durch mehrere Mechanismen umgesetzt. Auf der höchsten Ebene gibt es in jeder Umgebung separate Kopien der folgenden Komponenten:
- Funktionscode
- Alle für die Funktion ausgewählten Lambda-Schichten
- Laufzeitumgebung der Funktion
- Minimales Benutzer- space basierend auf Amazon Linux
Zur Isolierung verschiedener Laufzeitumgebungen werden folgende Mechanismen eingesetzt:
- cgroups – Beschränkung des Zugriffs auf CPU, Arbeitsspeicher, Speicherbandbreite und Netzwerkressourcen für jede Laufzeitumgebung;
- namespaces – Gruppierung von Prozess-IDs, Benutzer-IDs, Netzwerk-interfaces und anderen Ressourcen, die vom Linux-Kernel verwaltet werden. Jede Laufzeitumgebung arbeitet in ihrem eigenen Namensraum;
- seccomp-bpf – Einschränkung der Systemaufrufe, die in der Laufzeitumgebung verwendet werden können;
- iptables und Routing-Tabellen – Isolierung von Laufzeitumgebungen voneinander;
- chroot — Gewährung eines eingeschränkten Zugriffs auf das zugrunde liegende Dateisystem.
In Kombination mit proprietären Isolierungstechnologien von AWS garantieren die genannten Mechanismen eine zuverlässige Trennung der Ausführungsumgebungen. Derartig isolierte Umgebungen können nicht auf die Daten anderer Umgebungen zugreifen oder diese ändern.
Obwohl mehrere Ausführungsumgebungen eines AWS-Kontos auf einer einzigen microVM laufen können, dürfen microVM unter keinen Umständen von verschiedenen AWS-Konten gemeinsam genutzt werden. Für die Isolierung von microVM in AWS Lambda kommen nur zwei Mechanismen zum Einsatz: EC2-Instanzen und Firecracker. Die Gastisolierung in Lambda, die auf EC2-Instanzen basiert, wird seit 2015 angewendet. Firecracker ist ein neuer Open-Source-Hypervisor, der speziell von AWS für serverlose Arbeitslasten entwickelt wurde und 2018 vorgestellt wurde. Die physische Hardware, auf der die microVM ausgeführt werden, wird gemeinsam von den Arbeitslasten verschiedener Konten genutzt.
Speicherung von Umgebungen und Prozesszuständen
Obwohl die Ausführungsumgebungen von Lambda einzigartig für unterschiedliche Funktionen sind, kann dieselbe Funktion mehrfach aufgerufen werden, sodass die Ausführungsumgebung mehrere Stunden bestehen bleiben kann, bevor sie zerstört wird.
Jede Ausführungsumgebung von Lambda hat auch ein beschreibbares Dateisystem, das über das Verzeichnis /tmp zugänglich ist. Auf dessen Inhalt kann von anderen Ausführungsumgebungen nicht zugegriffen werden. Was die Speicherung von Prozesszuständen betrifft, existieren die in /tmp geschriebenen Dateien während des gesamten Lebenszyklus der Ausführungsumgebung. Dadurch ist es möglich, die Ergebnisse mehrerer Aufrufe zu akkumulieren, was besonders nützlich für ressourcenintensive Operationen wie das Laden von Modellen des maschinellen Lernens ist.
Datenübergabe von Aufrufen
Die Invoke API kann in zwei Modi verwendet werden: im Ereignismod und im Anfrage-Antwort-Modus. Im Ereignismod wird der Aufruf in eine Warteschlange für die spätere Ausführung gestellt. Im Anfrage-Antwort-Modus wird die Funktion sofort mit der bereitgestellten Nutzlast aufgerufen, woraufhin eine Antwort zurückgegeben wird. In beiden Fällen wird die Funktion in der Lambda-Umgebung ausgeführt, jedoch mit unterschiedlichen Nutzlastpfaden.
Bei Anrufen im "Anfrage-Antwort"-Modus wird die Nutzlast von einer API zur Anfrageverarbeitung (API Caller), wie AWS API Gateway oder AWS SDK, zum Lastenausgleichsgerät und dann zum Lambda-Aufrufservice (Invoke Service) geleitet. Letzterer bestimmt die geeignete Umgebung zur Ausführung der Funktion und überträgt die Nutzlast dorthin, um den Aufruf abzuschließen. Der Lastenausgleichsgerät empfängt den Verkehr mit TLS-Schutz über das Internet. Der Verkehr innerhalb des Lambda-Dienstes, nach dem Lastenausgleichsgerät, läuft über ein internes VPC in einer bestimmten AWS-Region.

Verarbeitungsmodell für AWS Lambda: Anfrage-Antwort-Modus
Ereignisbasierte Aufrufe können sofort ausgeführt oder in eine Warteschlange aufgenommen werden. In einigen Fällen wird die Warteschlange über den Amazon SQS-Dienst (Amazon Simple Queue Service) realisiert, der die Aufrufe über einen internen Polling-Prozess (Poller) an den Lambda-Aufrufservice weiterleitet. Der übertragene Datenverkehr ist TLS-geschützt, während keine zusätzliche Verschlüsselung der in Amazon SQS gespeicherten Daten vorgesehen ist.
Ereignisbasierte Aufrufe liefern keine Antworten – alle Rückmeldeinformationen werden vom Lambda Worker einfach ignoriert. Aufrufe basierend auf Ereignissen von Amazon S3, Amazon SNS, CloudWatch und anderen Quellen werden vom Lambda-Dienst im Ereignismodus verarbeitet. Aufrufe von Amazon Kinesis und DynamoDB-Streams, SQS-Warteschlangenaufrufe, Anwendungslastenausgleichsgeräte und API Gateways werden im "Anfrage-Antwort"-Modus verarbeitet.
Überwachung
Sie können die Lambda-Funktionen mit verschiedenen Mechanismen und AWS-Diensten überwachen und auditieren, einschließlich der folgenden.
Amazon CloudWatch
Sammelt verschiedene statistische Daten, wie die Anzahl der Anfragen, die Dauer der Anfragebearbeitung und die Zahl der fehlgeschlagenen Anfragen.
Amazon CloudTrail
Ermöglicht das Führen von Protokollen, kontinuierliches Monitoring und das Speichern von Informationen über Aktivitäten in Ihrem Konto, die mit Ihrer AWS-Infrastruktur verbunden sind. Sie erhalten eine vollständige Historie der Aktionen, die über die AWS Management Console, AWS SDK, Befehlszeilentools und andere AWS-Dienste durchgeführt wurden.
AWS X-Ray
Bietet vollständige Sichtbarkeit aller Phasen der Anfrageverarbeitung in Ihrer Anwendung basierend auf einer Karte ihrer internen Komponenten. Ermöglicht die Analyse von Anwendungen während der Entwicklung und in der Produktionsumgebung.
AWS Config
Sie können Änderungen an der Konfiguration der Lambda-Funktionen (einschließlich ihrer Löschung) sowie an der Laufzeit, Tags, Handler-Namen, Code-Größe, Speicherzuteilung, Timeout-Einstellungen und Parallelitätsparametern verfolgen, ebenso wie die IAM-Rolle für die Lambda-Ausführung, das Subnetz und die Bindung von Sicherheitsgruppen.
Fazit
AWS Lambda bietet eine leistungsstarke Sammlung von Tools zur Erstellung sicherer und skalierbarer Anwendungen. Viele Sicherheits- und Compliance-Methoden in AWS Lambda sind nicht anders als die in anderen AWS-Diensten, obwohl es Ausnahmen gibt. Stand März 2019 erfüllt Lambda die Anforderungen von SOC 1, SOC 2, SOC 3, PCI DSS, dem US-amerikanischen Gesetz über die Nachfolge und Haftung im Gesundheitswesen (HIPAA) und anderen Vorschriften. Daher sollten Sie, wenn Sie die Umsetzung einer neuen Anwendung in Betracht ziehen, den Dienst AWS Lambda in Betracht ziehen – möglicherweise ist er genau das Richtige für Ihre Anforderungen.
Quelle: habr.com
