
kontaktiere uns


Unternehmen wechseln zu einem serverlose Architektur. Es führt zu einem kürzere Markteinführungszeit, senkt die Betriebskosten und Entwickler können sich auf die Verbesserung von Anwendungen konzentrieren anstatt Infrastrukturen zu verwalten.
Wenn Sie mit diesem Konzept noch nicht vertraut sind, fragen Sie sich vielleicht: Was ist eine serverlose Anwendung? Im Grunde handelt es sich um Software, die in einer Umgebung ausgeführt wird, in der Sie keine Server verwalten müssen. Der Host, der sie bereitstellt, ist voll verantwortlich für die Verwaltung aller Infrastruktur- und Betriebsaufgaben.
Eine der Lösungen, die dieses Problem lösen, ist AWS Lambda. Laut ein Bericht von Datadog, in weniger als 5 Jahren AWS Lambda wird von der Hälfte der AWS-Benutzer verwendet und kommt am häufigsten in den größten Umgebungen vor.
Als Auszubildender bei Imaginary Cloud, ich hatte ein Projekt in der Hand: eine Anwendung namens Dwipper. Es bestand aus einem sozialen Netzwerk, um Gedanken zum Duschen auszutauschen (ähnlich wie Twitter). Ich brauchte ein Backend, das alle wichtigen Operationen wie Authentifizierung und Verarbeitung von Daten unterstützt. AWS Lambda konnte mit der Integration anderer Dienste, die AWS anbietet, wie Cognito, API Gateway, DynamoDB, CloudWatch, CodeCommit und CodePipeline, alles bieten, was ich für das Backend benötigte. Ich musste mir nicht einmal um die Verwaltung von Servern kümmern. Bevor wir jedoch direkt zur entwickelten Anwendung übergehen, möchte ich, dass Sie verstehen, was AWS Lambda ist.
AWS Lambda, bereitgestellt von AWS (Amazon Web Services), ist ein Serverloser Computerdienst Dadurch können Sie Code ausführen, ohne sich um die Infrastruktur oder die Serververwaltung kümmern zu müssen. Code, der auf AWS Lambda ausgeführt wird, wird als Lambda-Funktion bezeichnet. Sobald er erstellt wurde, kann er ausgeführt werden, wenn er ausgelöst wird.
Diese Funktion kann einer bestimmten AWS-Ressource zugeordnet werden. Zum Beispiel AWS SNS (Simple Notification Service), das ist ein Messaging-Dienst. Sobald sich diese Ressource ändert, führt Lambda Ihre Funktion aus und verwaltet, was benötigt wird.
Das erste, was zu tun ist, ist ein AWS-Konto erstellen. Falls Sie keins haben, müssen Sie es konfigurieren. Amazon IAM (Identity and Access Management) bietet Benutzerverwaltung und Berechtigungen in AWS. Wenn Sie als Team arbeiten, müssen Sie möglicherweise einen IAM-Benutzer erstellen, um Ihrer AWS-Konsole die erforderlichen Berechtigungen zu erteilen, oder falls Ihre Anwendung API-Aufrufe an AWS tätigen muss.
Der nächste Schritt ist richte dein serverloses Backend ein, wählen Sie aus, welche Dienste Sie benötigen, konfigurieren Sie sie und schließlich Erstelle dein Git-Repository damit Sie mit der Arbeit an Ihrer Bewerbung beginnen können.
Jetzt können Sie damit beginnen, Code in jeder von AWS Lambda unterstützten Sprache zu schreiben und ihn hochzuladen. Sie können Ihren Code auch in dem Code-Editor schreiben, den Lambda bereitstellt. Anschließend richten Sie Ihren Code so ein, dass er von anderen AWS-Services oder In-App-Aktivitäten ausgelöst wird. Lambda empfängt Ihre Anfrage und führt Ihren Code nur aus, wenn er ausgelöst wird.
AWS Lambda bietet Ihnen viele Vorteile, die Sie wahrscheinlich kennen sollten, bevor Sie sich für einen anderen serverlosen Computerdienst entscheiden. Wenn Sie sich das schon gefragt haben warum sollte man AWS Lambda verwenden, werfen Sie einen Blick auf die wichtigsten Vorteile unten.
Vorerst AWS Lambda unterstützt nicht alle Programmiersprachen. Es unterstützt jedoch Java-, Go-, PowerShell-, Node.js-, C#-, Python- und Ruby-Code. Für jeden von ihnen stellt AWS ein SDK bereit, das es Ihnen erleichtert, Ihre Lambda-Funktionen zu schreiben und sie in andere AWS-Services zu integrieren. Es bietet auch eine Runtime-API, mit der Sie alle zusätzlichen Programmiersprachen verwenden können, um Ihre Funktionen zu erstellen.
In AWS Sie zahlen nur für die Rechenzeit, die Sie verbrauchen. Sie müssen nicht für den Service bezahlen, um Ihren Code zu hosten. Stattdessen stellt Ihnen AWS Lambda eine Rechnung auf der Grundlage des Zeitpunkts der Ausführung dieses Codes in Rechnung. Die Abrechnung erfolgt auf der Grundlage der Anzahl der Anfragen und der Dauer, sodass die ungenutzten Minuten der Serverzeit nicht berücksichtigt werden.
Sobald Ihre Funktionen auf der AWS-Infrastruktur ausgeführt werden, kümmert sie sich für Sie um die Server. Auf diese Weise haben Entwickler mehr Zeit, um das Produkt zu verbessern, anstatt sich mit operativen Aufgaben wie der Verwaltung der Netzwerkebene oder der Skalierbarkeit zu befassen.
Stellen wir uns vor, dass Ihre Anwendung von einem Moment zum anderen viele neue Benutzer erhält. Dies kann ein Problem sein, wenn der Server nicht bereit ist, eine große Anzahl von Anfragen zu bearbeiten. Mit AWS Lambda müssen Sie sich darüber keine Gedanken machen, denn Die Anwendung skaliert exakt mit der Größe der Arbeitslast. Es skaliert Ihre Funktionen automatisch entsprechend ihrer Nachfrage, sodass verschiedene Teile Ihrer Anwendung je nach aktuellem Nutzungsgrad unterschiedlich skaliert werden können.
AWS Lambda lässt sich in AWS-Services wie DynamoDB, API Gateway, Cognito und viele mehr integrieren. Jeder dieser Dienste sendet Daten in JSON an Ihre Funktion als Ereignis, das Lambda-Laufzeiten zuerst in ein Objekt umwandeln und es anschließend an Ihre Funktion weiterleiten. All dies ermöglicht es Ihnen, eine Anwendung zu erstellen, die innerhalb Ihrer Lambda-Funktionen voll funktionsfähig ist.
Wie jede andere Computerplattform ist AWS Lambda aufgrund seiner Eigenschaften für einige Szenarien besser geeignet. Zunächst werden wir untersuchen, in welchen Szenarien es sich um einen geeigneten Computerservice handeln würde, und überprüfen, was AWS Lambda früher war, wie Sie unten sehen können:
Stellen Sie sich vor, Sie haben eine Anwendung, um Bilder hochzuladen und sie auf verschiedene Größen zu skalieren. Ihre Anwendung speichert diese Bilder in einem Amazon S3-Bucket. Wahrscheinlich gibt es also eine Lambda-Funktion, die die Größenänderung von Bildern übernimmt. Amazon S3 ist eine der unterstützten AWS-Ereignisquellen, die durch Objekte erstellte Ereignisse veröffentlichen und Ihre Lambda-Funktion aufrufen können. All dies erfolgt vollständig automatisch, und es müssen keine Server verwaltet werden. Ihr Lambda-Funktionscode kann das Bildobjekt aus dem S3-Bucket lesen, die Größenänderungsversion erstellen und sie schließlich in einem anderen S3-Bucket speichern.
Stellen Sie sich vor, Sie erstellen eine Anwendung, die Daten enthält, die Sie speichern müssen. Dafür können Sie DynamoDB verwenden, einen vollständig verwalteten Datenbankdienst, der das Schreiben und Aktualisieren sowie das Löschen von Elementen in einer Tabelle übernimmt.
Stellen Sie sich vor, Sie erstellen eine Website und möchten das Backend-Login auf Lambda hosten. Lambda eignet sich hervorragend dafür, da das Web-Frontend mithilfe von Amazon API Gateway Anfragen an Lambda-Funktionen über HTTP-Endpunkte senden kann.
Wie Websites kann Amazon API Gateway für mobile Anwendungen nützlich sein, aber das ist noch nicht alles. Sie können beispielsweise eine Lambda-Funktion erstellen, um Klicks in Ihrer Anwendung zu verarbeiten.
Zusätzlich zu diesen Szenarien, in denen dieser Service besser geeignet ist, sollten Sie die Einschränkungen berücksichtigen, die Lambda mit sich bringt, und sich darüber im Klaren sein, ob dies tatsächlich der beste Service ist, den Sie in Ihr Produkt integrieren können.
Serverlose Funktionen bedeuten, dass Sie es mit einer Kaltstartzeit zu tun haben. Wenn eine Funktion ausgelöst wird, kann es zwischen dem Beginn des Aufrufs und der Ausführung zu einer kurzen Wartezeit kommen. Wenn diese Funktion in den letzten 15 Minuten nicht verwendet wurde, kann diese Zeit sehr lang sein, 5 Sekunden oder länger.
Dies kann ein potenzielles Problem sein, das Sie berücksichtigen sollten, wenn Ihre Workloads zeitkritisch sind. Einige Workarounds versuchen, dies zu vermeiden, beispielsweise indem Sie Ihre Funktionen klein und konzentriert halten, wie Die Kaltstartzeiten nehmen linear mit Speicher und Codegröße zu.
Die Lambda-Funktionen haben einige Einschränkungen wie Laufzeit, Speicher, Größe und Parallelität. Die maximale Zeit, in der eine Funktion ausgeführt werden kann, beträgt 15 Minuten, weshalb Lambda für Workloads mit langer Laufzeit ungeeignet ist. Wenn Ihre Funktion in der Regel länger als 15 Minuten dauert, ist AWS Lambda möglicherweise keine gute Lösung. Die Menge an RAM, die für die Lambda-Funktionen zur Verfügung steht, reicht von 128 MB bis 3.008 MB, in Schritten von 64 MB. Es gibt auch ein Limit von 75 GB für alle AWS Lambda-Funktionen, die bereitgestellt wurden. Um dieses Limit zu umgehen, stellen Sie sicher, dass Sie keine alten Versionen Ihrer Lambda-Funktionen behalten. Standardmäßig die gleichzeitige Ausführung für alle Die AWS-Lambda-Funktionen innerhalb eines einzelnen AWS-Kontos sind auf 1000 begrenzt. Jede Lambda-Ausführung, die über diesem Limit ausgelöst wird, muss warten, bis die Ausführung anderer Funktionen abgeschlossen ist. Um dies zu vermeiden, können Sie eine Erhöhung des Limits beantragen, indem Sie sich an den AWS-Support wenden.
Auf den ersten Blick kann die Bezahlung nur für das, was Sie nutzen, zu erheblichen Kosteneinsparungen führen, aber das ist möglicherweise nicht jedes Mal so. Die Kosten Ihrer Lambda-Funktionen hängen von mehreren Faktoren ab, und es ist nicht einfach, diese Kosten zu ermitteln.
Wenn die Belastung Ihrer Anwendung zunimmt, steigt dies proportional an und kann zu hohen Kosten führen. Sie müssen bedenken, dass jeder andere Dienst, den Sie zusammen mit Ihren Lambda-Funktionen verwenden möchten, wie API Gateway, CloudWatch oder ein anderer, zu diesen Kosten beiträgt. Sie sollten also Folgendes in Betracht ziehen wie stark Sie erwarten, dass Ihre Anwendung skaliert.
AWS Lambda ist nicht der einzige serverlose Service, den Sie für Ihr Projekt auswählen können. Zu diesem Thema finden Sie andere Alternativen zu Lambda, die dieser sehr ähnlich sind. Mit ein paar Unterschieden, die Sie bei der Auswahl des zu verwendenden serverlosen Dienstes möglicherweise berücksichtigen sollten.
AWS Lambda und Azure Functions unterstützen beide Node.js, Python und C#, aber Azure Functions unterstützen auch F# und PHP. Sie unterstützen auch die automatische Skalierung.
AWS Lambda hat ein unkompliziertes Programmiermodell, während Azure Functions eine komplexere Version hat, die auf Triggern und Bindungen basiert. Das Bindungssystem bietet zusätzliche Flexibilität, bringt aber auch eine gewisse Komplexität mit sich. Beide Dienste können mehrere Ausführungen derselben Funktion gleichzeitig ausführen.
Wenn Sie eine HTTP-Integration hinzufügen möchten, fallen bei AWS Lambda zusätzliche Kosten an. Wie wir bereits gesehen haben, zahlen Sie für zusätzliche Dienste. Auf der anderen Seite sind Azure Functions mit einer HTTP-Endpunktintegration ausgestattet, und es fallen keine zusätzlichen Kosten an.
AWS Lambda und Google Cloud Functions unterstützen beide Node.js, Python und Go. Lambda ermöglicht eine unbegrenzte Anzahl von Funktionen, während Google Cloud Functions nur 1000 Funktionen pro Projekt zulässt. Sie unterstützen auch die automatische Skalierung..
In Bezug auf die maximale Ausführungszeit einer Funktion hat AWS Lambda sechs Minuten mehr als Google Cloud Functions die Nase vorn.
Bezüglich der Zahlung, genau wie bei AWS Lambda, mit Cloud-Funktionen Sie zahlen nur für die Ausführungszeit Ihrer Funktion. Ihnen wird keine Rechnung gestellt, wenn Ihre Funktion inaktiv ist.
AWS Lambda und Kubernetes sind zwei verschiedene Realitäten. Während es bei Lambda darum geht, serverlos zu werden, dreht sich bei Kubernetes alles um Container.
Auf AWS Lambda verwalten Sie die Infrastruktur nicht und Sie können keine zusätzliche Software installieren. Auf Kubernetes müssen Sie die Infrastruktur verwalten und können zusätzliche Software installieren.
Dies sind nur einige der wesentlichen und wichtigsten Unterschiede zwischen beiden. Zusammenfassend, wenn Sie haben wollen vollständige Kontrolle über die Umgebung, entscheiden Sie sich für einen Containerdienst wie Kubernetes. Wenn du etwas mehr willst überschaubar und konzentriere dich mehr auf die Verbesserung des Produkts selbst, Sie sollten einen serverlosen Dienst wählen wie AWS Lambda.
AWS Cognito ist ein Service zur Verwaltung der Authentifizierung. Sie können schnell und einfach Benutzeranmeldungen und -anmeldungen hinzufügen. Es unterstützt weiterhin die Anmeldung bei Anbietern sozialer Identitäten wie Amazon, Google und Facebook. Es bietet sogar eine Benutzerpool-Funktion, mit der Sie Benutzerkonten verwalten können.
Dieser Amazon-Service erledigt alle Aufgaben, die mit der Annahme und Verarbeitung von API-Aufrufen verbunden sind. Es ermöglicht Entwicklern, die HTTP-Endpunkte zu definieren und sie mit dem entsprechenden Backend zu verbinden. API Gateway kann auch überprüfen, ob der Benutzer authentifiziert ist, indem es einem Endpoint-Mapping, das mit einem Cognito-Benutzerpool verbunden ist, einen Authorizer hinzufügt. Das bedeutet, dass nur Benutzer im Benutzerpool auf den Endpunkt zugreifen können.
AWS DynamoDB ist eine vollständig verwaltete Datenbank, die automatisch skaliert werden kann und die Erstellung von Datenbanktabellen ermöglicht, in denen beliebige Datenmengen gespeichert und abgerufen werden können.
Cloudwatch ist ein Service zur Überwachung all Ihrer AWS-Ressourcen, -Anwendungen und -Services, die auf AWS ausgeführt werden. Es sammelt Daten in Form von Protokollen, Metriken und Ereignissen, die Sie überprüfen können, um Probleme schnell zu lösen und Ihre Anwendung problemlos laufen zu lassen.
CodeCommit ist ein Quellcodeverwaltungsdienst, der Teams bei der Softwareentwicklung hilft und es ihnen ermöglicht, private Git-Code-Repositorys sicher zu importieren und zu hosten.
AWS CodePipeline ist ein Continuous Delivery-Service, der die Erstellungs-, Test- und Bereitstellungsphasen Ihres Veröffentlichungsprozesses bei jeder Codeänderung automatisiert, basierend auf Ihrer Definition des Workflows.
Wie bereits erwähnt, haben wir einige andere Dienste in AWS Lambda integriert, um unser Backend zu erstellen. Unsere Anwendung Dwipper besteht aus einem sozialen Netzwerk namens Dwipps, um Gedanken auszutauschen. Benutzer müssen sich registrieren, um zu teilen, was ihnen durch den Kopf geht. Die eingebauten Funktionen sind:
Wir haben DynamoDB als unsere Datenbank integriert, in der wir alle Dwipps speichern, die von Benutzern aus unserer Anwendung erstellt wurden, sowie sie bearbeiten und löschen.
Für die Authentifizierung war AWS Cognito die Lösung. Es bot eine einfache Verwaltung der Benutzerauthentifizierung, die für Kunden zur Registrierung ihrer E-Mails erforderlich war, und generierte für jeden Benutzer bei jeder Anmeldung mühelos Tokens, um Zugriff auf bestimmte Inhalte zu erhalten.
Um die REST-API zu erstellen und die notwendigen Endpunkte für den gesamten Ablauf unserer Anwendung zu generieren, haben wir Amazon API Gateway integriert. Wir mussten AWS Lambda so konfigurieren, dass unser Code als Antwort auf HTTP-Anfragen mithilfe von API Gateway ausgeführt wird. Das API Gateway kann das bei der Anmeldung generierte Token validieren und die Benutzerdaten in die Ausführung einer Lambda-Umgebung einspeisen.
Beginnend mit der Authentifizierung haben wir Cognito User Pools in unserer Funktion verwendet, um ein neues Benutzerkonto zu erstellen. Bei der Registrierung werden E-Mail und Passwort abgefragt. Die Funktion ruft diese Werte ab, sendet sie an Cognito und gibt die Antwort zurück, unabhängig davon, ob der Benutzer erfolgreich registriert wurde oder nicht. Der Endpunkt wird in einer separaten Datei mit den anderen Endpunkten konfiguriert, in die wir seine Funktion einfügen. Für die Anmeldefunktion greifen wir erneut auf Cognito zu und senden die Benutzerdaten. Falls dieser Benutzer existiert, gibt Cognito ein Token zurück, das für den Zugriff des Benutzers auf den Inhalt der Anwendung benötigt wird.
Eine wichtige Funktion besteht darin, alle Dwipps aller Benutzer anzuzeigen. Dafür müssen wir auf DynamoDB zugreifen, um die spezifische Tabelle abzurufen und ihren gesamten Inhalt zurückzugeben. Die Funktion zum Erstellen eines Dwipp ist im Grunde dieselbe, aber anstatt alle Elemente aus der Tabelle abzurufen, wollen wir dort ein neues Element einfügen. Die eindeutige ID für jeden Dwipp wird mit uuidv4 erstellt, einem JavaScript-Paket, das bei der Erstellung von IDs hilft. Die ID und der Inhalt des neuen Dwipp werden mit jedem Feld in seiner Spalte an diese Tabelle gesendet. Der Benutzer benötigt ein Token, das bei der Anmeldung generiert wurde. Das API Gateway validiert dieses Token und injiziert die Benutzerdaten in die Umgebung der Lambda-Ausführung. Auf diese Weise können wir den Benutzer identifizieren, der versucht, ein neues Dwipp zu erstellen.
Um einen Dwipp positiv zu bewerten, verwenden wir dieselbe Tabelle wie zuvor. Aber für die bevorzugten Dwipps mussten wir eine neue Tabelle erstellen. Für die erste Tabelle haben wir eine Funktion, die die E-Mail-Adresse des aktuellen Benutzers überprüft und überprüft, ob er den in der Tabelle registrierten Dwipp bereits upvotiert hat. Falls ja, verringert sich die Anzahl der Upvotes um eins und die E-Mail-Adresse wird aus der Liste entfernt. Wenn nicht, wird sie um eins erhöht und die E-Mail-Adresse wird hinzugefügt.
Was die Funktion betrifft, einen Dwipp als Favorit zu markieren, überprüfen wir, ob dieser Dwipp bereits in der Tabelle der Lieblings-Dwipps enthalten ist. Wenn es da ist, bestätigen wir, ob dieser Benutzer es schon einmal favorisiert hat. Wenn nicht, wird ein neuer favorisierter Dwipp zu dieser Tabelle hinzugefügt. Die Informationen der Benutzer, die einen bestimmten Dwipp als Favoriten markiert haben, werden ebenfalls in der Tabelle gespeichert.
Mit all diesen verfügbaren und einfach zu integrierenden Diensten haben wir in weniger als einem Monat eine funktionierende Anwendung mit Authentifizierung und einigen Funktionen erstellt.
Am Anfang war unsere Idee, sowohl AWS Lambda als auch Google Cloud Functions zu verwenden. Wir haben uns für AWS entschieden, da es Tools für die Benutzererstellung und -authentifizierung bietet, Google Cloud Functions jedoch nicht. Alles entspricht den Erwartungen, da alle erforderlichen Funktionen nur mit AWS implementiert werden konnten.
Es mag wie eine große Sache erscheinen, all diese Dienste auf den ersten Blick zu verstehen, aber AWS stellt eine vollständige Dokumentation zur Verfügung um jeden von ihnen zu verdeutlichen und nützliche Beispiele zu nennen. Wenn Sie sich etwas Zeit nehmen, um es zu verstehen, es auszuprobieren und zu testen, werden Sie schnell in der Lage sein, ein voll funktionsfähiges Backend für Ihre Anwendung zu erstellen: ohne Server- und Infrastrukturverwaltung, in kurzer Zeit und zu reduzierten Kosten.
Fanden Sie diesen Artikel hilfreich? Diese könnten dir auch gefallen!
Ich strebe danach, Entwickler für mobile Anwendungen zu werden. Eines meiner Interessen gilt der künstlichen Intelligenz, während meine wahre Leidenschaft das Reisen um die Welt ist.
People who read this post, also found these interesting: