Dateien in der Cloud (EBS, EFS, S3)
EC2 Server Instanzen bringen ihren eigenen Plattenspeicherplatz und über EBS (Elastic Block Store) weitere Festplatten mit. Diese sind als HDD oder SDD konfigurierbar und können dynamisch erweitert werden.
Dateisysteme lassen sich auch unabhängig von Server-Instanzen anfordern. Hierbei spielen die Services EFS und S3 die Hauptrolle.
EFS (Elastic File System) kann in allen AWS Compute-Instanzen integriert werden (also auch in das später erwähnte AWS Lambda). Es skaliert dabei seine Größe vollautomatisch bis in den Petabyte-Bereich hinein. Ein Sonderfeature nennt sich Multi-Attach: Mehrere Compute-Instanzen können dabei das Dateisystem gemeinsam nutzen.
Noch einen Schritt weiter geht S3 (Simple Storage Service). Dieser Dienst setzt den Fokus auf Dateien beliebiger Art und Größe und kann von allen AWS-Services genutzt werden.
Ein spezifisches Dateisystem bietet S3 nicht. Ich erzeuge stattdessen sogenannte Buckets und lege in diesen Dateien und Ordner an. Buckets verfügen dabei über ein ausgefeiltes Berechtigungssystem.
Verschiedene S3 Speicher-Klassen erlauben es mir je nach Anforderung, Geld zu sparen: Müssen meine Dateien jederzeit schnellstmöglich verfügbar sein, kostet das viel. Kann ich (wie zum Beispiel bei Archiven) mit langsamerem Zugriff leben, zahle ich deutlich weniger. Kenne ich die Zugriffsmuster auf meinen Datenbestand nicht, hilft das S3 Feature Intelligent Tiering dabei, die passende Speicherklasse „Datei für Datei“ automatisch zu wählen. Meine Dokumente sind so stets kosteneffizient abgelegt.
S3 unterstützt auf Wunsch die Versionsverwaltung von Dateien, die Replikation von Buckets in andere Zonen der Welt, höchste Anforderungen an Datenschutz und Verschlüsselung und sogar das Hosting von statischen Webseiten.
Cloud Datenbanken (RDS, Aurora, DynamoDB)
Natürlich reichen Dateisysteme allein nicht zur Speicherung meiner Anwendungsdaten. Datenbanken sind hier mindestens genauso wichtig. Theoretisch kann ich dieses Thema durch das Aufsetzen einer EC2 Server Instanz lösen (die Datenbank-Software installiere und warte ich dann selbst), es geht jedoch auch deutlich einfacher.
RDS (Relational Database Service) deckt hierbei relationale Datenbanken wie MySQL, PostgreSQL, Oracle oder Microsoft SQL Server ab. Mit Aurora hat AWS zusätzlich eine eigene SQL-Variante am Start, die MySQL- und PostgreSQL-kompatibel ist und „serverless“ arbeiten kann. Der Vorteil: Der Datenbank Service läuft nicht die ganze Zeit, sondern nur, wenn er auch genutzt wird.
DynamoDB erschließt uns NoSQL Datenbanken. Hierbei ist die Struktur der Tabellen nicht fest: Einzelne Tabellenzeilen verfügen über einen Schlüssel (key) für den Zugriff und Attribute für den Wert (value).
AWS bietet eine Vielzahl weiterer Datenbank Services, die genannten sind für die meisten Aufgaben aber mehr als ausreichend.
Globale Netzwerke (Route 53, CloudFront)
Das Aufsetzen eines virtuellen Netzwerks mit Servern, Dateisystemen und Datenbanken stellt diese noch nicht zuverlässig erreichbar im Internet zur Verfügung. Hier wünschen wir uns den Zugriff über eigene Domainnamen und für den weltweiten Einsatz CDNs (Content Delivery Networks). Auch hierbei unterstützt AWS seine Kunden:
- Route 53 erlaubt es mir, Domains zu registrieren und zu verwalten.
- CloudFront erstellt und betreibt CDNs für mich.
Die Idee dabei: Meine Server-Instanzen sind vielleicht nur in einer oder wenigen Regionen der Welt aktiv. Ein CDN sorgt dafür, dass der Kunde genau mit der verbunden wird, die geografisch am nächsten zu ihm liegt. Es puffert obendrein Inhalte dieser Instanzen für die schnellere Auslieferung.
Serverless Computing (Lambda)
Die Aufstellung der wichtigsten AWS-Services für den Start wäre unvollständig ohne „Serverless Computing“ Dienste. Hier kommen die Vorteile des „pay as you go“ und die Übernahme von Server-Verantwortung durch AWS voll zum Tragen.
Bevor wir in die Services einsteigen, sollten wir über den Begriff „serverless“ sprechen. Wenn wir einen virtuellen Server in Form einer EC2 Instanz aufsetzen, betreuen wir fast alles selbst. Dabei treten Routine-Aufgaben auf, um die wir uns bei unserer Software-Entwicklung eigentlich gar nicht kümmern wollen.
Im „serverless“-Modell übernimmt der Cloud-Anbieter alle lästigen Standardaufgaben und wir konzentrieren uns rein auf den Code, der ausgeführt werden muss, wenn spezielle Ereignisse auftreten.
Ein Beispiel-Ereignis: Ein Benutzer lädt ein Dokument in unser Dateisystem hoch und wir möchten es verarbeiten.
An dieser Stelle setzt AWS Lambda an: Ich wähle eine Programmierumgebung (wie zum Beispiel node.js, Python, Java, …) und entwickle darin nur die Verarbeitung des Dokuments. In vielen Fällen reicht hierfür ein einfacher Codeschnipsel. Das Beste dabei: Kosten entstehen in Lambda rein abhängig von der Anzahl an Anrufen.
Das „serverless“-Modell hat gegenüber EC2 nur einen Nachteil: Es eignet sich rein für kurz laufende Prozesse, jedoch nicht für den Dauerbetrieb (wie beispielsweise eines Webservers). Der Schlüssel zum Erfolg mit AWS liegt also im „Mix & Match“ der eingesetzten Dienste.
Ein perfektes Szenario für die Nutzung von Lambda im Backend sind Web-Apps und Mobile Apps. Diese setzen von Anwender-Geräten aus Anfragen (Requests) ab und erwarten Antworten (Responses) in Form von HTML oder Dateninhalten (JSON oder XML).
AWS hilft uns mit zwei Diensten dabei, diese Anfragen ohne Programmieraufwand auszuwerten und entsprechende Ereignisse für Lambda auszulösen. Diese Gateway Services heißen API Gateway (für REST APIs) und AppSync (für GraphQL APIs). In der Kombination mit Lambda bilden diese Dienste ein perfektes Team.
Ausblick
Damit endet unsere Übersicht über die wichtigsten AWS-Services für den Start. Hunderte weitere spezialisierte Dienste existieren, aber die genannten erlauben einen fokussierten Einstieg in die Welt des Cloud-Computings. Wir freuen uns, wenn dieser für sie so leichter geworden ist.