Eine Übersetzung des Artikels wurde speziell für Studenten des Cloud Services- Kurses erstellt. Ist es interessant, sich in diese Richtung zu entwickeln? Sehen Sie sich eine Meisterklasse von Egor Zuev (TeamLead bei InBit) „AWS EC2 Service“ an und schließen Sie sich der nächsten Kursgruppe an: Beginnen Sie am 26. September.

Immer mehr Menschen wechseln zu AWS Lambda, um Skalierbarkeit, Leistung, Kosteneinsparungen und die Möglichkeit zu erreichen, Millionen oder sogar Billionen von Anfragen pro Monat zu verarbeiten. Dazu müssen Sie nicht die Infrastruktur verwalten, auf der der Dienst arbeitet. Mit der automatischen Skalierung können Sie Tausende von Anfragen gleichzeitig pro Sekunde bearbeiten. Ich denke, AWS Lambda kann zu Recht als einer der beliebtesten AWS-Services bezeichnet werden.
AWS Lambda
AWS Lambda ist ein ereignisorientierter Serverless-Computing-Service, mit dem Sie Code ausführen können, ohne Server zuzuweisen und zu verwalten, und andere AWS-Services basierend auf Benutzerlogik ergänzen können. Lambda reagiert automatisch auf verschiedene Ereignisse (sogenannte Trigger), z. B. auf HTTP-Anforderungen über das Amazon API Gateway, Datenänderungen in Amazon S3-Körben oder Amazon DynamoDB-Tabellen. Sie können Ihren Code auch über API-Aufrufe mit dem AWS SDK und Statusübergängen in AWS-Schrittfunktionen ausführen.
Lambda führt Code auf einer leicht zugänglichen Computerinfrastruktur aus und ist voll verantwortlich für die Verwaltung der zugrunde liegenden Plattform, einschließlich Server- und Betriebssystemwartung, Ressourcenzuweisung, automatischer Skalierung, Codeüberwachung und Protokollierung. Das heißt, Sie müssen nur Ihren Code hochladen und konfigurieren, wie und wann er ausgeführt werden soll. Der Dienst kümmert sich wiederum um den Start und stellt die hohe Verfügbarkeit Ihrer Anwendung sicher.
Wann muss ein Upgrade auf Lambda durchgeführt werden?
AWS Lambda ist eine praktische Computerplattform, die sich natürlich für viele Anwendungsszenarien eignet, wenn die Sprache und die Laufzeit Ihres Codes vom Service unterstützt werden. Wenn Sie sich bei der Serverwartung, -bereitstellung und -skalierung für einen Drittanbieter zu einem angemessenen Preis auf Code und Geschäftslogik konzentrieren möchten, sollten Sie auf jeden Fall ein Upgrade auf AWS Lambda durchführen.
Lambda ist ideal für die Erstellung von Softwareschnittstellen. Wenn Sie den Service mit dem API-Gateway verwenden, können Sie die Kosten erheblich senken und schneller auf den Markt kommen. Es gibt verschiedene Möglichkeiten, die Lambda-Funktionen und -Optionen zum Organisieren einer serverlosen Architektur zu verwenden - jeder kann basierend auf seinem Ziel etwas Passendes auswählen.
Mit Lambda können Sie eine Vielzahl von Aufgaben ausführen. Dank der CloudWatch-Unterstützung können Sie ausstehende 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 Mikrodienst zu arbeiten, der auf Lambda basiert.
Hier können Sie serviceorientierte Aktionen erstellen, die nicht ständig ausgeführt werden. Ein typisches Beispiel ist die Bildskalierung. Auch bei verteilten Systemen verlieren Lambda-Funktionen nicht an Relevanz.
Wenn Sie sich also nicht mit der Zuweisung und Verwaltung von Computerressourcen befassen möchten, versuchen Sie es mit AWS Lambda. Wenn Sie kein schweres, ressourcenintensives Computing benötigen, versuchen Sie es auch mit AWS Lambda. Wenn Ihr Code regelmäßig ausgeführt wird - alles ist korrekt -, sollten Sie AWS Lambda ausprobieren.
Sicherheit
Bisher gibt es keine Beschwerden über die Sicherheit. Da viele interne Prozesse und Implementierungsfunktionen dieses Modells dem Benutzer der von AWS Lambda verwalteten Laufzeit verborgen bleiben, sind einige allgemein akzeptierte Cloud-Sicherheitsregeln nicht mehr relevant.
Wie die meisten AWS-Services wird Lambda auf der Grundlage der gemeinsamen Verantwortung von AWS und dem Kunden in Bezug auf Sicherheit und Einhaltung gesetzlicher Bestimmungen bereitgestellt. Dieses Prinzip reduziert die Betriebslast des Clients, da AWS die Aufgaben der Wartung, Verwaltung und Steuerung der Komponenten des Dienstes übernimmt - vom Host-Betriebssystem über die Virtualisierungsebene bis zur physischen Sicherheit von Infrastrukturobjekten.
AWS spricht speziell über AWS Lambda und ist für die Verwaltung der zugrunde liegenden Infrastruktur, der zugehörigen zugrunde liegenden Services, des Betriebssystems und der Anwendungsplattform verantwortlich. Während der Kunde für die Sicherheit seines Codes, die Speicherung vertraulicher Daten, die Zugriffskontrolle auf diese sowie auf die Dienste und Ressourcen von Lambda (Identity and Access Management, IAM) verantwortlich ist, auch im Rahmen der verwendeten Funktionen.
Das folgende Diagramm zeigt das für AWS Lambda geltende Modell der geteilten Verantwortung. Der Verantwortungsbereich von AWS ist orange und die Verantwortung des Kunden ist blau. Wie Sie sehen, übernimmt AWS mehr Verantwortung für Anwendungen, die auf dem Service bereitgestellt werden.

Modell der geteilten Haftung für AWS Lambda
Lambda-Laufzeit
Der Hauptvorteil von Lambda besteht darin, dass der Dienst bei der Ausführung einer Funktion in Ihrem Namen selbst die erforderlichen Ressourcen zuweist. Sie können Zeit und Mühe bei der Systemadministration sparen und sich auf Geschäftslogik und das Schreiben von Code konzentrieren.
Der Lambda-Dienst ist in zwei Flugzeuge unterteilt. Die erste ist die Steuerebene. Laut Wikipedia ist die Steuerebene der Teil des Netzwerks, der für die Signalisierung von Verkehr und Routing verantwortlich ist. Es ist die Hauptkomponente, die globale Entscheidungen über die Zuweisung, Wartung und Verteilung von Workloads trifft. Darüber hinaus fungiert die Steuerebene als Netzwerktopologie des Lösungsanbieters, der für das Routing und die Verwaltung des Datenverkehrs verantwortlich ist.
Die zweite Ebene ist die Datenebene. Es hat wie die Steuerebene seine eigenen Aufgaben. Die Verwaltungsebene bietet eine API zum Verwalten von Funktionen (CreateFunction, UpdateFunctionCode) und steuert die Interaktion von Lambda mit anderen AWS-Diensten. Die Datenebene wird von der Invoke-API gesteuert, die die Lambda-Funktionen aufruft. Nach dem Aufrufen der Funktion wählt die Steuerebene die vorhandene Laufzeit aus oder wählt sie aus, die im Voraus für diese Funktion vorbereitet wurde, und führt dann den darin enthaltenen Code aus.
AWS Lambda unterstützt viele Programmiersprachen, einschließlich Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 und andere, während ihrer jeweiligen Laufzeit. AWS aktualisiert sie regelmäßig, verteilt Sicherheitspatches und führt andere Wartungsvorgänge in diesen Umgebungen durch. Mit Lambda können Sie andere Sprachen verwenden, sofern Sie selbst die entsprechende Laufzeit implementieren. Und dann müssen Sie sich um die Wartung kümmern, einschließlich der Überwachung der Sicherheit.
Wie funktioniert das alles und wie wird der Dienst Ihre Funktionen ausführen?
Jede Funktion arbeitet in einer oder mehreren ausgewählten Umgebungen, die nur während des Lebenszyklus dieser Funktion existieren und dann zerstört werden. In jeder Umgebung wird jeweils nur ein Anruf getätigt, der jedoch wiederverwendet wird, wenn viele serielle Anrufe derselben Funktion vorhanden sind. Alle Laufzeiten laufen auf virtuellen Maschinen mit Hardwarevirtualisierung - auf der sogenannten microVM. Jede microVM ist einem bestimmten AWS-Konto zugeordnet und kann von Umgebungen wiederverwendet werden, um verschiedene Funktionen für dieses Konto auszuführen. MicroVMs sind in den Bausteinen der Lambda Worker-Hardwareplattform enthalten, die AWS besitzt und betreibt. Dieselbe Laufzeit kann nicht von verschiedenen Funktionen verwendet werden, ebenso wie microVMs für verschiedene AWS-Konten eindeutig sind.

AWS Lambda-Isolationsmodell
Die Laufzeitisolation wird mithilfe mehrerer Mechanismen implementiert. Auf der höchsten Ebene jeder Umgebung gibt es separate Kopien der folgenden Komponenten:
- Funktionscode
- Alle für die Funktion ausgewählten Lambda-Ebenen
- Funktionslaufzeit
- Amazon Linux Minimum User Space
Die folgenden Mechanismen werden verwendet, um verschiedene Laufzeitumgebungen zu isolieren:
- cgroups - Einschränkung des Zugriffs auf CPU-Ressourcen, Speicher, Laufwerksbandbreite und Netzwerk für jede Laufzeitumgebung;
- Namespaces - Gruppieren von Prozess-IDs, Benutzer-IDs, Netzwerkschnittstellen und anderen Ressourcen, die vom Linux-Kernel verwaltet werden. Jede Laufzeit läuft in einem eigenen Namespace.
- seccomp-bpf - Einschränkung von Systemaufrufen, die in der Laufzeitumgebung verwendet werden können;
- iptables und Routing-Tabellen - Isolierung von Laufzeitumgebungen untereinander;
- chroot - bietet eingeschränkten Zugriff auf das zugrunde liegende Dateisystem.
In Kombination mit der proprietären AWS-Isolationstechnologie gewährleisten diese Mechanismen eine zuverlässige Trennung von Laufzeitumgebungen. Auf diese Weise isolierte Medien können nicht auf Daten von anderen Medien zugreifen oder diese ändern.
Obwohl mehrere Laufzeiten desselben AWS-Kontos auf derselben microVM ausgeführt werden können, können microVMs unter keinen Umständen von verschiedenen AWS-Konten gemeinsam genutzt werden. AWS Lambda verwendet nur zwei Mechanismen zum Isolieren von microVMs: EC2-Instanzen und Firecracker. Die Gastisolierung in Lambda basierend auf EC2-Instanzen wird seit 2015 verwendet. Firecracker ist der neue Open Source-Hypervisor, der speziell von AWS für serverlose Workloads entwickelt und 2018 eingeführt wurde. Die physische Ausrüstung, auf der microVMs ausgeführt werden, wird von den Workloads verschiedener Konten gemeinsam genutzt.
Speichern von Prozessumgebungen und -zuständen
Obwohl Lambda-Laufzeiten für verschiedene Funktionen eindeutig sind, können sie wiederholt dieselbe Funktion aufrufen, dh die Laufzeit kann mehrere Stunden dauern, bevor sie zerstört wird.
Jede Lambda-Laufzeit verfügt außerdem über ein Dateisystem mit Schreibberechtigung, auf das über das Verzeichnis / tmp zugegriffen werden kann. Auf den Inhalt kann nicht über andere Laufzeiten zugegriffen werden. In Bezug auf die Beibehaltung von Prozesszuständen sind die in / tmp aufgezeichneten Dateien während des gesamten Lebenszyklus der Laufzeit vorhanden. Aufgrund dessen ist es möglich, die Ergebnisse mehrerer Aufrufe zu sammeln, was besonders für kostspielige Vorgänge wie das Laden von Modellen für maschinelles Lernen nützlich ist.
Datenübertragung anrufen
Die Invoke-API kann in zwei Modi verwendet werden: im Ereignismodus und im Anforderungs-Antwort-Modus. Im Ereignismodus wird der Anruf zur späteren Ausführung zur Warteschlange hinzugefügt. Im "Request-Response" -Modus wird die Funktion sofort mit der bereitgestellten Nutzlast aufgerufen, wonach die Antwort zurückgegeben wird. In beiden Fällen wird die Funktion in der Lambda-Umgebung ausgeführt, jedoch mit unterschiedlichen Nutzlastpfaden.
Bei Anforderungs-Antwort-Aufrufen kommt die Nutzlast von der Anforderungsverarbeitungs-API (API Caller), z. B. dem AWS API Gateway oder dem AWS SDK, zum Load Balancer und dann zum Lambda Call Execution Service (Invoke Service). Letzterer bestimmt die geeignete Umgebung für die Ausführung der Funktion und überträgt die Nutzdaten dorthin, um den Aufruf abzuschließen. Der Load Balancer empfängt Datenverkehr mit TLS-Schutz über das Internet. Der Datenverkehr innerhalb des Lambda-Dienstes wird - nach dem Load Balancer - durch die interne VPC in einer bestimmten AWS-Region geleitet.

AWS Lambda-Anrufverarbeitungsmodell: Anforderungs-Antwort-Modus
Ereignisaufrufe können sofort getätigt oder der Warteschlange hinzugefügt werden. In einigen Fällen wird die Warteschlange mithilfe des Amazon SQS-Dienstes (Amazon Simple Queue Service) implementiert, der Anrufe über einen internen Abrufprozess an den Lambda-Anrufausführungsdienst weiterleitet. Der übertragene Datenverkehr wird durch TLS geschützt, und es wird keine zusätzliche Verschlüsselung der in Amazon SQS gespeicherten Daten bereitgestellt.
Ereignisaufrufe geben keine Antworten zurück - Lambda Worker ignoriert einfach alle Antwortinformationen. Anrufe, die auf Amazon S3, Amazon SNS, CloudWatch und anderen Quellen basieren, werden von Lambda im Ereignismodus bearbeitet. Anrufe aus Amazon Kinesis- und DynamoDB-Streams, Anrufe aus SQS-Warteschlangen, Application Load Balancer und Gateway-APIs werden im Anforderungs-Antwort-Modus verarbeitet.
Überwachung
Sie können Lambda-Funktionen mithilfe verschiedener AWS-Mechanismen und -Dienste überwachen und überwachen, darunter die folgenden.
Amazon Cloudwatch
Es werden verschiedene Statistiken erfasst, z. B. die Anzahl der Anforderungen, die Dauer der Anforderungen und die Anzahl der fehlgeschlagenen Anforderungen.
Amazon CloudTrail
Ermöglicht das Protokollieren, kontinuierliche Überwachen und Speichern von Kontoaktivitätsinformationen für Ihre AWS-Infrastruktur. Sie erhalten eine vollständige Chronologie der Aktionen, die mit der AWS Management Console, dem AWS SDK, den Befehlszeilentools und anderen AWS-Diensten ausgeführt werden.
AWS X-Ray
Bietet vollständige Übersicht über alle Phasen der Anforderungsverarbeitung in Ihrer Anwendung auf der Grundlage einer Karte der 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 von Lambda-Funktionen (einschließlich deren Entfernung) und Laufzeiten, Tags, Handlernamen, Codegröße, Speicherzuordnung, Latenz- und Parallelitätseinstellungen sowie die Lambda IAM-Laufzeitrolle, das Subnetz und die Sicherheitsgruppenbindungen verfolgen.
Fazit
AWS Lambda bietet leistungsstarke Tools zum Erstellen sicherer und skalierbarer Anwendungen. Viele der Sicherheits- und Compliance-Methoden in AWS Lambda unterscheiden sich nicht von denen, die in anderen AWS-Services verwendet werden, obwohl es Ausnahmen gibt. Ab März 2019 entspricht Lambda SOC 1, SOC 2, SOC 3, PCI DSS, dem US-amerikanischen Gesetz über die Kontinuität und Rechenschaftspflicht von Krankenversicherungen (HIPAA) und anderen Vorschriften. Wenn Sie über die Implementierung einer anderen Anwendung nachdenken, sollten Sie daher den AWS Lambda-Service in Betracht ziehen - möglicherweise ist er für Ihre Aufgabe am besten geeignet.