AWS – Ermögliche es deinen Entwicklungsteams, mit Lichtgeschwindigkeit zu arbeiten

In der Tech-Welt ist nichts wichtiger, als das richtige Werkzeug zur richtigen Zeit am richtigen Ort zu haben – vor allem, wenn man mit einem agilen Team arbeitet. Im Kern geht es bei der Agilität darum, die Mittel zu haben, um die Ziele rechtzeitig zu erreichen und gleichzeitig flexibel genug zu sein, um eine Reihe von sich ändernden Anforderungen zu erfüllen, sobald sie eintreffen. Da unser Unternehmen diese agilen Fähigkeiten beibehalten muss, haben wir uns für die Zusammenarbeit mit AWS entschieden. Auf diese Weise konnten wir die Kosten für unseren Betrieb erheblich senken.

In diesem Artikel erläutern wir die AWS-Services, die wir nutzen, und heben einige ihrer wichtigsten Vorteile hervor.

EKS (Elastic Kubernetes Service)

Beginnen wir mit dem Herzstück eines jeden modernen verteilten Systems — Kubernetes.

Da EKS auf EC2-Instanzen aufbaut, kann AWS den Master-Knoten und die gesamte Infrastruktur bereitstellen. Man Man muss sich nur um die Definitionen der Services kümmern.

In unserem aktuellen Setup haben wir verschiedene Namensräume für jede der Bühnenumgebungen. Die einzigen zwei Dinge, die sich ändern, sind die Variablen/Secrets und die Anzahl der laufenden Instanzen. Auf diese Weise haben wir eine Entwicklungsumgebung, die der Produktionsumgebung sehr ähnlich ist. Dies ist wichtig, um Fehler zu finden, die einen so sehr stören.

Ein weiteres starkes Argument für die Verwendung von Kubernetes ist sein deklarativer Ansatz für die Infrastruktur. Man deklariert die Services, die ausgeführt werden sollen, und Kubernetes tut sein Bestes, um sie auszuführen. Wenn der Service aus irgendeinem Grund ausfällt, bootet Kubernetes eine neue Instanz, um den deklarierten Zustand zu erfüllen.

Man könnte also fragen: „EKS hilft bei der Bereitstellung und Wartung von Diensten, aber wie werden die verschiedenen Services miteinander kommunizieren?“

Kinesis

Mit dem Kinesis-Service kannst du alle deine Nachrichten von einer Instanz zu einer anderen leiten und entkoppelte Dienste haben, die gut interagieren.

Dies ist hilfreich, wenn Client-Anforderungen nicht dieselbe Instanz betreffen oder wenn die Verarbeitung nicht in einer Instanz stattfindet und zusätzliche Berechnungen von anderen Mikrodiensten erforderlich sind.

Eine weitere Option, die AWS für die Servicekommunikation bietet, sind SNS- und Fan-Out-SQS-Abonnements (Simple Queue Service). Weitere Informationen über die Einrichtung findest du hier.

Das einfachste Beispiel wäre, dass ein Dienst die Daten verarbeitet und ein anderer sie archiviert. Mit SQS ist dies nicht möglich, ohne den SQS an einen Kinesis-Stream zu abonnieren.

Außerdem ist Kinesis tief mit DynamoDB und Lambda-Funktionen integriert, die die nächsten beiden Themen sind.

DynamoDB

Dies ist die bevorzugte AWS-Lösung für dokumentenbasierte NoSQL-Persistenz. Neben der Möglichkeit, JSON-Objekte zu speichern, kannst du Indizes erstellen und nach ihnen suchen, wodurch die Abrufe sehr performant werden. Sobald du deine Anwendung skalierst und ein bestimmter Index stark genutzt wird, kannst du die ihm in der Tabellenkonfiguration zugewiesenen Ressourcen skalieren.

In unserem Fall haben wir alles nach Domänenentitäten getrennt, die die Kernkonzepte für unsere Lösung darstellen.

Und das Tüpfelchen auf dem i ist, dass DynamoDB auch an Kinesis weitergeleitet werden kann. Ich denke, du siehst, worauf wir hinauswollen. Diese Ereignisarchitektur ist perfekt für Serverless. Schließlich wurde Serverless genau für Fälle wie diesen entwickelt.

Lambda Functions (Serverless)

Ein weiteres heißes Thema in der Entwicklungswelt. Lambda-Funktionen werden heutzutage sehr geliebt, weil sie sehr einfach zu entwickeln und bereitzustellen sind.

In unserer Infrastruktur verwenden wir sie als Hilfstool. Es beobachtet den Kinesis-Stream, der von unserer Anwendung in EKS und DynamoDB kommt, und reagiert auf sehr spezifische Weise auf diese Ereignisse.

Nehmen wir als Beispiel, wie du dein Team darüber informieren kannst, dass ein wichtiger Kunde deine Anwendung nutzt.

  • Die Anwendung speichert einen neuen Kundeneintrag in DynamoDB
  • DynamoDB leitet dieses Ereignis an einen Kinesis-Stream weiter
  • Der Kinesis-Stream löst die Lambda-Funktion aus, die auf diese Art von Ereignis gewartet hat
  • Die Lambda-Funktion sendet eine freundliche Slack-Nachricht an den Marketing-Kanal, die besagt, dass wir einen neuen coolen Kunden haben :)

Ein weiteres Beispiel wäre die Aktualisierung von Elasticsearch-Indizes.

Stell dir vor, du verwendest ES für eine textbasierte Suche nach deiner Entität, die in deiner DynamoDB-Tabelle gespeichert ist.

  • Ein neuer Datensatz wird zu deiner Entitätstabelle hinzugefügt.
  • DynamoDB leitet dieses erstellte Ereignis an einen Kinesis-Stream weiter.
  • Eine Lambda-Funktion hört auf diesen Stream und speichert die Informationen im Elasticsearch-Index, so dass sie mit einfachen Textbegriffen abgefragt werden können.

Wie du sehen kannst, ist dies vollständig von der Hauptanwendung entkoppelt. Durch sie wird ein unmittelbarer Nutzen erzielt und die Sichtbarkeit des Geschehens verbessert.

Elasticsearch

Apropos, Elasticsearch ist eine der besten Möglichkeiten, um deine Produktionsprotokolle zu analysieren und präzise Informationen über den Zustand deiner Anwendung abzuleiten. Und weißt du was? Amazon bietet Elasticsearch als Service an, und da es auf EC2 aufbaut, kannst du es entsprechend deinen Anforderungen skalieren.

Leider ist dies der einzige Teil, der bisher nicht mit Kinesis verbunden ist. Um ES zu befüllen, verwenden wir Fluentd in unseren Kubernetes-Knoten. Dadurch wird die Ausgabe der Container normalisiert und an ES weitergeleitet.

Lambda-Funktionen, die ausschließlich von ES-Daten abhängen, müssen mit einem Cron-Ereignis ausgelöst werden, zum Beispiel alle fünf Minuten.

Neben der Überprüfung des Zustands deines Systems kannst du verschiedene Indizes (analog zu Tabellen in konventionellen Datenbanken) haben, die Daten und Nutzungsmetriken speichern. In Kombination mit der sofort einsatzbereiten Nutzeroberfläche und dem Analysewerkzeug Kibana kannst du wichtige Informationen darüber ableiten, wie deine Nutzer das Produkt verwenden.

Schau dir unsere App in Aktion an
workstreams.ai bietet einfaches Aufgabenmanagement durch leistungsstarke Automatisierung

Step Functions

Aber wie können wir die Abläufe der stufenweisen Ausführung verwalten?

Step Functions. Dies ist ein leistungsfähiges Werkzeug zum Auslösen von Ausführungen, die zeitbasiert sind und einen beliebigen Mechanismus zum Blockieren der Operation haben.

Nehmen wir an, wir wollen eine Nachricht an unsere Nutzer senden, um sie daran zu erinnern, das Tutorial zu beenden, aber der Nutzer kann das Tutorial ohne unser Zutun selbst starten. Wir brauchen also eine Möglichkeit, die Ausführung dieser Erinnerung abzubrechen. Step Functions ermöglicht genau das. Du kontrollierst den Ausführungsablauf, und wenn die Ausführung nicht mehr relevant ist, kannst du sie beenden.

Elasticache

Schrittfunktionen sind großartig, aber wir müssen die Referenz der Ausführung irgendwo speichern, damit die Anwendung später entscheiden kann, ob die Ausführung abgebrochen werden soll oder nicht. Auch hier hat Amazon eine Lösung für dich parat.

Für alles, was temporär (aber nicht ausschließlich temporär) ist, kann man diesen skalierbaren Service nutzen, der eine Auswahl zwischen Redis und Memcached bietet.

Wir verwenden Redis sehr gerne, und AWS bietet Hochverfügbarkeitsinstanzen mit so vielen Replikaten, wie du benötigst. Es gibt einige wesentliche Unterschiede zwischen den beiden – die fortschrittlichen Datenstrukturen von Redis und die Beschränkungen der Objektgröße von Memcache (mehr als ein MB).

Entscheide dich für das, was deinem Anwendungsfall entspricht. Du kannst sie auch kombinieren!

CloudWatch

Wenn du einen der oben genannten Dienste nutzt, generierst du Protokolle, die an CloudWatch weitergeleitet und aggregiert werden. Damit kannst du Alarme und Benachrichtigungen einstellen, damit deinem Team keine Statusänderung in der Infrastruktur entgeht.

IAM (Identity Access Manager)

Dies ist der Kern jedes Service, der auf AWS läuft, oder jedes Nutzers, der auf irgendeine Art von Informationen zugreift. IAM definiert jede Regel, nach der der Service ausgeführt wird.

Zum Beispiel kann die Lambda-Funktion durch Ereignisse ausgelöst werden und bestimmte Aktionen ausführen. Um auf ein Ereignis zu reagieren, benötigst du keine spezifische Regel, aber für die Durchführung von Aktionen musst du angeben, dass diese Lambda-Funktion auf diesen Service oder diese Ressource zugreifen darf.

Das Gleiche gilt für Nutzer. Wenn du definierst, dass eine bestimmte Benutzergruppe keine Berechtigung zum Löschen von S3-Dateien hat, kann sie diese Aktion nicht durchführen.

Wenn du diese Profile und Sicherheitsgruppen konfigurierst, kannst du sie so umfassend wie möglich definieren. Wenn es sich jedoch um Produktionsumgebungen handelt, ist es besser, wenn der Berechtigungsumfang granularer ist. Denn so lässt sich besser kontrollieren, wer was ausführen darf.

VPC (Virtual Private Cloud)

Wenn es um Sicherheit geht, muss zum einen sichergestellt werden, dass ein Service oder ein Nutzer über die richtigen Berechtigungen verfügt, um die gewünschte Aufgabe zu erfüllen. Eine weitere Möglichkeit besteht darin, die Oberfläche deiner gesamten Infrastruktur zu verkleinern und damit auch den Umfang, mit dem sich dein Sicherheitsteam befassen muss. Denke daran, dass dein System umso anfälliger ist, je mehr es offen mit dem Internet verbunden ist.

Aus diesem Grund hat AWS eine virtuelle private Cloud implementiert, in der du eine granulare Konfiguration für deine nach außen und innen gerichteten EC2-Instanzen festlegen kannst.

Nutze Tech, um Dinge zu erledigen
workstreams.ai optimiert jeden Ablauf in deinem Unternehmen

ELB (Elastic Load Balancer)

ELB ist eine Standardimplementierung von AWS zur Bereitstellung einer skalierbaren Anwendungsumgebung mit mehreren Instanzen. Mit diesem Tool kannst du Anfragen an eine IP-Adresse empfangen und die Last so verteilen, dass sie von mehreren Instanzen bedient und leicht skaliert werden kann.

ECR (Elastic Container Registry)

Wenn du eine moderne Anwendung bereitstellen willst, reden wir über die Bereitstellung von Container-Images. Seit 2014 ist die Branche von einer Revolution erfasst worden. Neue Technologien sind entstanden, um die Vorteile von Container-Technologien zu nutzen.

Aber für die Bereitstellung von Containern brauchst du einen Speicherplatz. ECR bietet genau das. Es ist so einfach wie das Verschieben eines neuen Images. Und innerhalb von Kubernetes kann man ein Deployment zur Verwendung dieses speziellen Images deklarieren. Dank IAM kann dein Kubernetes-Cluster das Image abrufen, ohne dass du eine zusätzliche Konfiguration vornehmen musst.

S3 (Simple Storage System)

Wenn du neben Container-Images auch andere Artefakte bereitstellen oder speichern musst, hat Amazon mit S3 eine Lösung für dich. Die Nutzung ist einfach: Definiere einfach einen Bucket mit Berechtigungen. Auf diesen kann von überall aus zugegriffen werden – ob im Internet oder nicht – und du kannst neue Dateien in ihn hochladen.

Dazu gibt es nicht viel zu sagen. Es ist einfach, schnell, skalierbar und kostet so gut wie nichts.

Amazon CloudFront

Da wir über die Verteilung statischer Dateien mit S3 sprechen, ist ein Service, der normalerweise in Verbindung damit verwendet wird, die CDN-Lösung (Content Delivery Network) von AWS. Diese nutzt das globale Netzwerk, das AWS aufgebaut hat, und speichert deine Inhalte in der Nähe deiner Nutzerbasis, wodurch die Gesamtladezeit für auf S3 gespeicherte Artefakte verringert wird. Ganz zu schweigen von der bereits einsatzbereiten DDoS-Abwehr und anderen praktischen Funktionen wie der Cache-Invalidierung, wenn du eine Aktualisierung so schnell wie möglich bereitstellen musst.

AWS Certificate Manager

Wenn du deine Services über HTTPS bereitstellst (was du auf jeden Fall tun solltest), vertraust du einfach dem Service, der deine SSL/TLS-Zertifikate zur Verfügung stellt und bereitstellt. Einer der großen Vorteile der AWS-Lösung ist neben der Tatsache, dass sie alle Sicherheitsstandards und Best Practices einhält, die automatische Erneuerung der Zertifikate. Das bedeutet, dass du nichts tun musst, wenn das Zertifikat von Amazon ausgestellt wurde.

Zusammenfassend lässt sich sagen, dass wir AWS nicht nur als Bauwerkzeug empfehlen, sondern auch als Grundlage für eine solide, skalierbare und moderne Anwendung.

Wenn du ein Startup hast, das Wert auf Spitzentechnologien legt und Liefergeschwindigkeit ein Muss ist, solltest du dich für das AWS Activate-Programm anmelden, um Zugang zum Amazon Premium-Support zu erhalten, Kredite für eine einfache Skalierung zu erhalten und Teil einer Gruppe innovativer Unternehmen zu werden.

Diesen Artikel teilen auf:
Sprachauswahl

Bitte wählen Sie die gewünschte Sprache aus: