Was ist AWS-Lambda und wozu nutzt man es?
AWS Lambda wurde im November 2014 von Amazon auf den Markt gebracht. Der Vorteil dieses Services, keine Infrastruktur verwalten zu müssen, ermöglicht es dir, ein neues Lambda zu starten, ohne deiner Infrastruktur eine neue Ressource hinzufügen zu müssen. Dies ist eine gute Möglichkeit, deine vorhandene Infrastruktur zu erweitern oder neue Dienste in einer Microservice-Architektur bereitzustellen.
Was ist AWS Lambda?
AWS Lambda ist ein Serverless-Computing-Service, der von Amazon Web Services (AWS) bereitgestellt wird. Benutzer von AWS Lambda erstellen Funktionen, eigenständige Anwendungen, die in einer der unterstützten Sprachen und Runtimes geschrieben sind, und laden sie in AWS Lambda hoch, das diese Funktionen effizient und flexibel ausführt.
Die Lambda-Funktionen können jede Art von Rechenaufgabe ausführen, vom Bereitstellen von Webseiten und der Verarbeitung von Datenströmen bis hin zum Aufrufen von APIs und der Integration mit anderen AWS-Services.
Was ist eine Lambda-Funktion?
Der Code, den du auf AWS Lambda ausführst, wird als “Lambda-Funktion” bezeichnet. Nachdem du deine Lambda-Funktion erstellt hast, ist sie sofort einsatzbereit, sobald sie ausgelöst wird, ähnlich einer Formel in einem Spreadsheet.
Jede Funktion enthält deinen Code sowie einige zugehörige Konfigurationsinformationen, einschließlich des Funktionsnamens und der Ressourcenanforderungen. Lambda-Funktionen sind “zustandslos” und besitzen keine Berührungspunkte mit der zugrunde liegenden Infrastruktur, sodass Lambda sehr schnell so viele Kopien der Funktion wie nötig starten kann, um sich an die Rate eingehender Events anzupassen.
Nachdem du deinen Code in AWS Lambda hochgeladen hast, kannst du deine Funktion mit bestimmten AWS-Ressourcen verknüpfen, z. B. einem bestimmten Amazon S3-Bucket, einer Amazon DynamoDB-Tabelle, einem Amazon Kinesis-Stream oder einer Amazon SNS-Benachrichtigung. Sobald sich die Ressource ändert, führt Lambda deine Funktion aus und verwaltet die Rechenressourcen nach Bedarf, um mit eingehenden Anfragen Schritt zu halten.
Warum heißt es eigentlich AWS-L a m b d a?
Hierzu bedarf es einer kurzen Einführung in die Geschichte des Lambda-Calculus’.
Die Lambda-Rechenart wurde in den 1930er Jahren von Alonzo Church (1903-1995), einem der führenden Entwickler der mathematischen Logik, entwickelt.
Das Lambda-Kalkül war ein Versuch, Funktionen als Rechenmittel zu formalisieren.
Bedeutung für die Berechenbarkeitstheorie
Der größte Durchbruch in der Berechenbarkeitstheorie war der Beweis, dass das Lambda-Kalkül und die Turing-Maschine genau die gleiche Rechenleistung haben.
Dies führte zu Churchs These, dass die Menge der effektiv berechenbaren Funktionen genau die Menge ist, die von der Turing-Maschine oder dem Lambda-Kalkül berechenbar ist.
Die These wurde gestärkt, als auch mehrere andere mathematische Rechensysteme (Post Correspondence Problem, u.a.) als äquivalent zum Lambda-Kalkül nachgewiesen wurden.
Der Punkt ist, dass der Satz effektiv berechenbarer Funktionen eine grundlegende Realität zu sein scheint, nicht nur eine Eigenart der Definition der Turing-Maschine / Lambda-Kalkül.
Das Lambda-Kalkül ist grundlegend für die denotationale Semantik, die mathematische Theorie der Bedeutung von Computerprogrammen.
Funktionale Programmiersprachen wurden mit dem expliziten Ziel entwickelt, den Lambda-Calculus in eine praktische Programmiersprache zu verwandeln.
Wie funktioniert AWS Lambda?
Jede Lambda-Funktion wird in einem eigenen Container ausgeführt. Wenn eine Funktion erstellt wird, verpackt Lambda sie in einen neuen Container und führt diesen Container dann auf einem mandantenfähigen Cluster von Maschinen aus, die von AWS verwaltet werden.
Bevor die Funktionen ausgeführt werden, wird dem Container jeder Funktion die erforderliche RAM- und CPU-Kapazität zugewiesen. Sobald die Ausführung der Funktionen beendet ist, wird der zu Beginn zugewiesene RAM mit der Zeit multipliziert, welche die Funktionsausführung in Anspruch genommen hat.
Die Abrechnung an die Kunden erfolgt danach basierend auf dem zugewiesenen Speicher und der Laufzeit der Funktion.
Die gesamte Infrastrukturschicht von AWS Lambda wird von AWS verwaltet. Kunden erhalten nicht viel Einblick in die Funktionsweise des Systems, müssen sich aber auch nicht um die Aktualisierung der zugrunde liegenden Maschinen, die Vermeidung von Netzwerkkonflikten usw. kümmern – AWS kümmert sich selbst darum.
Und da der Service vollständig verwaltet wird, kannst du mit AWS Lambda Zeit bei Betriebsaufgaben sparen. Wenn keine Infrastruktur zu warten ist, kannst du mehr Zeit mit der Arbeit am Anwendungscode verbringen – obwohl du damit auch auf die Flexibilität des Betriebs deiner eigenen Infrastruktur verzichtest.
Eine der charakteristischen Architektureigenschaften von AWS Lambda besteht darin, dass viele Instanzen derselben Funktion oder verschiedener Funktionen aus demselben AWS-Konto gleichzeitig ausgeführt werden können. Die Gleichzeitigkeit der Ausführung kann je nach Tageszeit oder Wochentag variieren, jedoch macht dies für Lambda keinen Unterschied. – Dir wird lediglich die Rechenleistung in Rechnung gestellt, die deine Funktionen beanspruchen. Dadurch eignet sich AWS Lambda gut für die Bereitstellung hoch skalierbarer Cloud-Computing-Lösungen.
Was sind die häufigsten Nutzungsszenarien für AWS Lambda?
Aufgrund der Architektur von Lambda bietet es große Vorteile gegenüber herkömmlichen Cloud-Computing-Setups für Anwendungen, bei denen:
1. einzelne Aufgaben laufen für kurze Zeit;
2. jede Aufgabe ist im Allgemeinen in sich abgeschlossen;
3. es einen großen Unterschied gibt zwischen der niedrigsten und der höchsten Stufe in der Arbeitsbelastung der Anwendung.
Einige der häufigsten Anwendungsfälle für AWS Lambda, die diese Kriterien erfüllen, sind:
Skalierbare APIs. Beim Erstellen von APIs mit AWS Lambda kann eine Ausführung einer Lambda-Funktion eine einzelne HTTP-Anfrage bedienen. Verschiedene Teile der API können über Amazon API Gateway an verschiedene Lambda-Funktionen weitergeleitet werden. AWS Lambda skaliert automatisch einzelne Funktionen entsprechend der Nachfrage, sodass verschiedene Teile Ihrer API je nach aktuellem Nutzungsniveau unterschiedlich skaliert werden können. Dies ermöglicht kostengünstige und flexible API-Setups.
Datenverarbeitung. Lambda-Funktionen sind für die ereignisbasierte Datenverarbeitung optimiert. Es ist einfach, AWS Lambda in Datenquellen wie Amazon DynamoDB zu integrieren und eine Lambda-Funktion für bestimmte Arten von Datenereignissen auszulösen. Du könntest beispielsweise Lambda einsetzen, um jedes Mal, wenn ein Element in DynamoDB erstellt oder aktualisiert wird, etwas Arbeit zu erledigen.
Demnach eignet es sich gut für Dinge wie Benachrichtigungen, Zähler und Analysen.
AWS Lambda und serverless
Das Konzept des “serverlosen” Computings bezieht sich darauf, dass du keine eigenen Server unterhalten musst, um diese Funktionen auszuführen. AWS Lambda ist ein vollständig verwalteter Service, der sich um die gesamte Infrastruktur für dich kümmert. “Serverless” bedeutet also nicht, dass keine Server involviert sind: Es bedeutet lediglich, dass sich AWS Lambda bereits um die Server, die Betriebssysteme, die Netzwerkschicht und der Rest der Infrastruktur gekümmert hat, sodass du dich auf das Schreiben von Anwendungscodes konzentrieren kannst.
Aber wie alles in der Welt hat auch AWS Lambda seine Pros & Cons.
Vorteile der Verwendung von AWS Lambda
AWS Lambda bietet einige einzigartige Vorteile gegenüber der Wartung deiner eigenen Server in der Cloud. Die wichtigsten sind:
Bezahlen pro Benutzung.
In AWS Lambda zahlst du nur für die von deinen Funktionen genutzte Rechenleistung zuzüglich des generierten Netzwerkverkehrs. Bei Workloads, die je nach Tageszeit stark skalieren, ist diese Art der Abrechnung im Allgemeinen kostengünstiger.
Vollständig verwaltete Infrastruktur.
Da deine Funktionen nun auf der verwalteten AWS-Infrastruktur ausgeführt werden, musst du dir keine Gedanken mehr über die zugrunde liegenden Server machen – AWS übernimmt dies für dich. Dies kann zu erheblichen Einsparungen bei Betriebsaufgaben wie der Aktualisierung des Betriebssystems oder der Verwaltung der Netzwerkschicht führen.
Automatische Skalierung.
AWS Lambda erstellt die Instanzen deiner Funktion, wie sie angefordert werden. Es gibt keinen vorskalierten Pool, keine Skalierungsstufen, über die du dir Gedanken machen musst, keine Einstellungen zu optimieren – und gleichzeitig sind deine Funktionen verfügbar, ob die Beanspruchung steigt oder sinkt. Du zahlst nur für die Laufzeit jeder Funktion.
Enge Integration mit anderen AWS-Produkten.
AWS Lambda lässt sich in Services wie DynamoDB, S3 und API Gateway integrieren, sodass du innerhalb deiner Lambda-Funktionen funktional vollständige Anwendungen erstellen kannst.
Einschränkungen und Nachteile von AWS Lambda
AWS Lambda bietet zwar viele Vorteile, es gibt jedoch einige Dinge, die du wissen solltest, bevor du es in der “Produktion” verwendest.
Kaltstartzeit.
Wenn eine Funktion als Reaktion auf einen Event gestartet wird, kann es zwischen dem Event und der Ausführung der Funktion zu einer geringen Latenzzeit kommen. Wenn deine Funktion in den letzten 15 Minuten nicht verwendet wurde, kann die Latenzzeit 5 bis 10 Sekunden betragen, was es schwierig macht, sich bei latenzkritischen Anwendungen auf Lambda zu verlassen.
Funktionsgrenzen.
Für die Lambda-Funktionen gelten einige Einschränkungen:
Ausführungszeit/Laufzeit.
Eine Lambda-Funktion hat eine 15-minütige Zeitbegrenzung, sprich: time-out nach einer Viertelstunde, und es gibt keine Möglichkeit, dieses Limit zu ändern. Wenn die Ausführung deiner Funktion normalerweise länger als 15 Minuten dauert, ist AWS Lambda möglicherweise keine gute Lösung für deine Task.
Für die Funktion verfügbarer Speicher.
Das verfügbare RAM für die Lambda-Funktionen reicht von 128 MB bis zu 3.008 MB in 64 MB-Schritten.
Größe des Lambda Code Pakets.
Das gezippte Lambda-Code-Paket sollte 50 MB nicht überschreiten, und die entpackte Version nicht größer als 250 MB sein.
Gleichzeitigkeit (concurrency).
Standardmäßig ist die gleichzeitige Ausführung aller AWS Lambda-Funktionen innerhalb eines einzelnen AWS-Kontos auf 1.000 beschränkt. Du kannst jedoch eine Erhöhung dieses Limits beim AWS-Support anfordern.
Alle Lambda-Ausführungen, die über deinem Gleichzeitigkeitslimit ausgelöst werden, werden gedrosselt und müssen warten, bis die Ausführung anderer Funktionen beendet ist.
Payload Size.
Wenn du Amazon API Gateway verwendest, um Lambda-Funktionen als Reaktion auf HTTP-Anforderungen auszulösen (d. h. beim Erstellen einer Webanwendung), beträgt die maximale Payload Size, die API Gateway verarbeiten kann, 10 MB.
Nicht immer wirtschaftlich.
Wie bereits erwähnt, zahlst du bei AWS-Lambda nur für die verwendete Funktionslaufzeit (zuzüglich aller damit verbundenen Gebühren wie z. B. Netzwerkverkehr). Dies kann bei bestimmten Nutzungsmustern zu erheblichen Kosteneinsparungen führen, beispielsweise bei Cron-Jobs oder anderen On-Demand-Aufgaben.
Wenn jedoch der Verbrauch für deine Anwendung steigt, steigen ebenso die AWS Lambda-Kosten proportional und können am Ende höher sein als die Kosten einer ähnlichen Infrastruktur auf AWS EC2 oder anderen Cloud-Anbietern.
Begrenzte Anzahl unterstützter Laufzeiten.
AWS Lambda ermöglicht zwar das Hinzufügen benutzerdefinierter Laufzeiten, deren Erstellung kann jedoch viel Arbeit bedeuten. Wenn also die von dir verwendete Version der Programmiersprache von Lambda nicht unterstützt wird, ist es möglicherweise besser, AWS EC2 oder einen anderen Cloud-Anbieter zu verwenden.
Verwenden von AWS Lambda mit Alexa
Du kannst Lambda-Funktionen verwenden, um Dienste zu erstellen, die Alexa, dem Sprachassistenten auf Amazon Echo, neue Fähigkeiten verleihen. Das Alexa Skills Kit bietet die APIs, Tools und Dokumentation zum Erstellen dieser neuen Skills, die von deinen eigenen Diensten unterstützt werden, die als Lambda-Funktionen ausgeführt werden. Amazon Echo-Benutzer können auf diese neuen Fähigkeiten zugreifen, indem sie Alexa Fragen stellen oder Dienste beantragen.
Amazon Echo ist ein neuer Gerätetyp, der um deine Stimme herum entwickelt wurde. Echo verbindet sich mit Alexa, einem Cloud-basierten Sprachdienst, der (natürlich) von AWS betrieben wird. Du kannst bestehende Dienste in Minutenschnelle mit wenigen Codezeilen an Alexa anbinden.
Das Preismodell von AWS-Lambda
Eine Reihe von AWS Lambda-Ausführungen sind in jedem AWS-Konto im kostenlosen Kontingent von AWS enthalten. Im Gegensatz zu einigen anderen Diensten ist die kostenlose Lambda-Stufe nicht auf 12 Monate beschränkt. Sowohl bestehende als auch neue Konten erhalten 1 Million AWS Lambda-Anfragen plus 400.000 GB-Sekunden pro Monat – Lambdas Maß für die Funktionslaufzeit und den einer Funktion zugewiesenen Speicher.
Beispiel Kostenberechnung
Geplante Jobs. Stelle dir vor, du führst Cron-Jobs in deiner AWS-Infrastruktur aus, die Datenbank-Rollover performen. Der Job wird jede Nacht ausgeführt, und die durchschnittliche Laufzeit beträgt 10 Minuten. Die Funktion verwendet während der Ausführung 1 GB Speicher. Sie erzeugt keinen ausgehenden Netzwerkverkehr, da sie eine Verbindung zu deiner RDS-Datenbank in derselben Verfügbarkeitszone herstellt.
Compute insgesamt: 30 Tage x 600 GB-Sekunden (10 Minuten) = 18.000 GB-Sekunden Anfragen insgesamt: 30 Tage x 1 Anfrage pro Tag = 30 Anfragen.
Diese Nutzung erfolgt innerhalb des kostenlosen AWS-Kontingents, sodass dir für AWS Lambda 0 USD in Rechnung gestellt werden. Hinweis: Du zahlst weiterhin für die RDS-Nutzung gemäß der RDS-Preisliste.
HTTP-API. Angenommen, du erstellst eine Webanwendung, die vollständig auf einem AWS Lambda-Back-End basiert. Nehmen wir auch an, dass du gut im Marketing bist, sodass du nach ein paar Monaten im Durchschnitt 10.000 Nutzer pro Tag in der App hast.
Die Aktionen jedes Benutzers innerhalb der App führen wiederum im Durchschnitt zu 100 API-Anfragen pro Tag. Deine API wird in Lambda-Funktionen ausgeführt, die 512 MB Arbeitsspeicher verwenden, und das Bereitstellen jeder API-Anfrage dauert 1 Sekunde.
Compute insgesamt: 30 Tage x 10.000 Benutzer x 100 Anfragen x 0,5 GB RAM x 1 Sekunde = 15.000.000 GB-Sekunden Anfragen insgesamt: 30 Tage x 10.000 Benutzer x 100 Anfragen = 30.000.000 Anfragen.
Für die 30 Mio. Anfragen zahlst du 30 x 0,20 USD /1 Mio. Anfragen = 6 USD/Monat auf AWS Lambda.
Alle diese Anfragen gehen über Amazon API Gateway, sodass du dort für die 30 Millionen Anfragen 30 x 3,50 USD /1 Million Anfragen = 105 USD/Monat für API Gateway bezahlst.
Für die monatlichen 15 Mio. GB-Sekunden Rechenleistung auf AWS Lambda zahlst du 15 Mio. * 0,0000166667 USD/GB-Sekunde ~= 250 USD/Monat.
Die Gesamtkosten der API-Schicht betragen bei dieser Auslastung also etwa 360 USD/Monat.
AWS Lambda in der Softwareentwicklung
Entwickler schreiben einfache Skripte oder Funktionen (Lambda ist im Grunde eine anonyme Funktion), und Lambda führt als Reaktion auf ein Ereignis Ihre Funktion aus, indem es das Ereignis und das am Ereignis beteiligte Objekt übergibt. Dies ist im Grunde eine Softwareentwicklung ohne Server.
Fazit
Mit Lambda kannst du Code ausführen, ohne dich um Server kümmern zu müssen. Dies reduziert viele Kopfschmerzen, die mit herkömmlichen Architekturimplementierungen verbunden sind. Außerdem lässt es sich sehr gut in andere AWS-Services integrieren. Es hat eine kostengünstige, flexible Preisstruktur und ist produktionsbereit, da es mehrere Staging-Umgebungen unterstützt.
Rückmeldungen