ToDo-App Implementierung

Themen

Einleitung

In einem Supermarkt haben mehrere Kassen geöffnet und es kaufen sehr viele Kunden ein. Normalerweise verteilen sich die Kunden von selbst an die verschiedenen Kassen, um schneller bezahlen zu können. In der Cloud hingegen passiert das nicht von selbst, sodass ein Load Balancer benötigt wird.

Technische Konzepte

Ein Load Balancer verteilt den eingehenden Datenverkehr auf verschiedene Ziele z.B. Instanzen oder Container, damit keine der Ressourcen überlastet ist. Wenn eine Ressource nicht mehr ansprechbar ist, dann werden die Anfragen an die anderen Ziele weitergeleitet. Dadurch kann Hochverfügbarkeit gewährleistet werden.

Relevante AWS Services

Ein Elastic Load Balancing (ELB) verteilt den eingehenden Datenverkehr auf mehrere Ziele wie beispielsweise Amazon EC2-Instanzen, Container oder IP-Adressen, welche in verschiedenen Availability Zones in einer Region liegen können. Der Load Balancer überwacht den Zustand seiner Ziele und leitet den Verkehr nur an die gesunden weiter. Ziele werden als gesund betrachtet, wenn sie beispielsweise binnen eines definierten Zeitraums z.B. 10 Sekunden durch ein bestimmtes Protokoll antworten. Wenn der Datenverkehr sich ändert, kann auch der Load Balancer seine Kapazität automatisch anpassen. Durch das Verteilen über verschiedene Ziele in verschiedenen Availability Zones wird die Verfügbarkeit der Anwendungen erhöht.

Es gibt verschiedene Arten von Load Balancern verschiedene Arten von Load Balancern: Application Load Balancers (ALBs), Network Load Balancers (NLBs), and Classic Load Balancers (CLBs). ALBs nutzen HTTP/HTTPS-Verkehr bzw. Schicht 7 des OSI-Modells. NLBs und CLBs nutzen beide TCP-Verkehr oder Schicht 4 des OSI Modells. Ein ALB unterstützt pfadbasiertes Routing und kann Anfragen an einen oder mehrere Ports von Containern weiterleiten. Im Folgenden wird ein ALB genutzt, um die Anfragen vom Frontend an die Frontend-Container weiterzuleiten, die beide in unterschiedlichen Subnetzen liegen.

Nicht nur Load Balancer helfen die Anwendung hochverfügbar zu machen, sondern auch Datenbanken können hochverfügbar werden. Eine Multi-AZ-Bereitstellung kann dabei helfen in einer Region hochverfügbar zu sein. Multi-AZ bedeutet, dass mindestens eine weitere Standby-Instance der Amazon RDS Datenbank in einer anderen Availability Zone zur Verfügung steht. Die Standby-Instance wird synchron zur primären Datenbankinstanz repliziert. Bei einem Ausfall der primären Instanz, wird ein Failover automatisch initialisiert, wodurch für eine minimale Unterbrechung der Anwendung gesorgt wird.


Anwendung

Erstellung und Konfiguration eines ALBs

Aufgabe: Erstelle einen Application Load Balancer todoApp. Nutze die Workshop-VPC und die öffentlichen Subnetze A und B. Wähle nur die Workshop-ALB-SG als einzige Security Group.

Hinweis
Lösung

Im Abschnitt Listeners and routing

  1. auf Create target group klicken.
  2. In dem neuen Fenster die Option Choose a target type auf IP addresses setzen.
  3. Als Target Group Name workshop-backend eingeben. Diese Target Group wird den eingehenden Datenverkehr an das ToDo-API backend weiterleiten.
  4. Unter Port als Zielport 5000 eingeben um den Ziel Port des Backend Containers zu erreichen.
  5. Die restlichen Einstellungen bleiben unverändert. Klick auf Next.
  6. Da es noch keine Container gibt, Klick auf Create target group.

Fertigstellen des Load Balancers

Im Dialogfenster der Load Balancer Konfiguration:

  1. Im Abschnitt Listeners and routing, bei Default action die workshop-backend target group auswählen. Eventuell musst du zuerst die Liste der Target Groups mit dem Kreispfeil, rechts neben der Liste, aktualisieren.
  2. Auf Create load balancer klicken.

Da aktuell noch keine Container Instanzen existieren, wird der Load Balancer noch nicht funktionieren. Die Registrierung sowie die De-Registrierung von Container Instanzen wird später der Container Service Amazon ECS automatisch vornehmen.

Load Balancer Konfiguration für den Frontend Container

  1. Unter Services den Dienst EC2 auswählen.
  2. Links unter Load Balancing auf Target Groups klicken.
  3. Klick auf Create target group.
  4. Als Target Group Typ IP addresses auswählen.
  5. Unter Target group name workshop-frontend eingeben.
  6. Unter VPC das Workshop-VPC auswählen.
  7. Klick auf Next und danach auf Create target group.

Anpassen der Routing Konfiguration des Load Balancers

  1. Unter Services den Dienst EC2 auswählen.
  2. Links unter Load Balancing auf Load Balancers klicken und den todoApp Load Balancer anklicken.
  3. In dem Listeners and rules tab die Box für die bestehende Listener Regel in der List auswählen.
  4. Unter Manage rules Edit rules klicken.
  5. Wähle die Default Regel aus und unter Actions klicke edit rule.
  6. Ändere die Target group zu workshop-frontend.
  7. Die Änderungen über einen Klick auf Save changes bestätigen.

Nun fügen wir eine weitere Regel hinzu, um den Verkehr zum Backend zu leiten.

  1. Klicke auf Add rule.
  2. Nehme als Name backend-routing und klicke auf Next.
  3. Füge eine Kondition durch Add condition hinzu:
    1. Wähle Path aus.
    2. Der Pfad soll /api/* sein.
    3. Bestätige durch confirm und klicke auf Next.
  4. Als Target group nun das workshop-backend auswählen.
  5. Die Priorität auf 1 setzen für die Regel backend-routing.
  6. Klicke auf Next.
  7. Bestätige durch einen Klick auf Create.

Mit dieser Konfiguration leitet der Load Balancer nun alle Anfragen an die Target Group workshop-frontend weiter. Hier läuft später der Frontend Container Service. Beim Einfügen, ändern oder Löschen von Einträgen in der Beispielanwendung werden die Anfragen über den Pfad /api/ an den Backend Container weitergeleitet. Dieser wiederum leitet die Daten an die Amazon RDS Datenbank weiter.

Service Konfiguration der Backend Container

  1. Unter Services den Dienst Elastic Container Service auswählen.
  2. In der Übersicht klick auf workshop-cluster.
  3. Im Tab Services auf Create klicken.
  4. Unter Compute options Launch type auswählen.
  5. Als Launch type muss FARGATE ausgewählt werden.
  6. Als Application type Service auswählen.
  7. Bei Family muss workshop-backend ausgewählt werden.
  8. Als Service name backend-service eingeben.
  9. Unter Desired tasks 2 eingeben.
  10. Bei Networking wird das Workshop-VPC ausgewählt.
  11. Unter Subnets nacheinander Subnet Workshop-PublicA und Workshop-PublicB auswählen.
  12. Bei Security groups Workshop-ECS-Backend-SG auswählen.
  13. Die Option Auto-assign public IP auf ENABLED stehen lassen.
  14. Im Abschnitt Load balancing die Option Application Load Balancer auswählen und den bereits erstellten ALB todoApp.
  15. Unter Production listener port im Dropdown den bereits existierenden 80:HTTP Listener auswählen.
  16. Bei Target group name die existierende workshop-backend target group im Dropdown auswählen.
  17. Klick auf Create.

Service Konfiguration der Frontend Container

  1. Unter Services den Dienst Elastic Container Service auswählen.
  2. In der Übersicht klick auf workshop-cluster.
  3. Im Tab Services auf Create klicken.
  4. Unter Compute options Launch type auswählen.
  5. Als Launch type muss FARGATE ausgewählt werden.
  6. Als Application type Service auswählen.
  7. Bei Family muss workshop-frontend ausgewählt werden.
  8. Als Service name frontend-service eingeben.
  9. Unter Desired tasks 2 eingeben.
  10. Bei Networking wird das Workshop-VPC ausgewählt.
  11. Unter Subnets nacheinander Subnet Workshop-PublicA und Workshop-PublicB auswählen.
  12. Bei Security groups Workshop-ECS-Frontend-SG auswählen.
  13. Die Option Auto-assign public IP auf ENABLED stehen lassen.
  14. Im Abschnitt Load balancing die Option Application Load Balancer auswählen und den bereits erstellten ALB todoApp.
  15. Unter Production listener port im Dropdown den bereits existierenden 80:HTTP Listener auswählen.
  16. Bei Target group name die existierende workshop-frontend target group im Dropdown auswählen.
  17. Klick auf Create.

Test der ToDo-Liste

Aufgabe: Teste den Load Balancer und deine Webseite, indem du den DNS Namen des ALBs todoApp kopierst und in einem neuen Browser Tab öffnest.

Lösung

Teste nun die Funktionalitäten deiner ToDo-Anwendung:

  • Überprüfe deine leere ToDo-Liste: Füge deinem Domain Namen /api/v1/todos hinzu. Wenn du diesen öffnest, sollte die Liste leer sein.
[]
  • Hinzufügen von ToDos: Schreibe einige ToDos in deine Liste auf der Webseite.
  • Aufrufen der Daten in der Datenbank: Füge deinem Domain Namen noch /api/v1/todos hinzu. Rufe nun den neuen Link in einem Tab auf. Nun solltest du eine Übersicht ähnlich wie im Bild sehen.
  • Aufgaben erledigt: Hacke ein paar deiner Aufgaben in der Liste ab.
  • Prüfen der Änderung in den Daten: Rufe wieder den erweiterten Link auf und prüfe, ob sich completed als Eigenschaft bei deinen erledigten Aufgaben von false auf true geändert hat.
  • Streiche deine erledigten Aufgaben: Klicke auf Clear completed, um deine erledigten Aufgaben zu löschen.
  • Prüfen der gelöschten Aufgaben: Rufe wieder den erweiterten Link auf und prüfe, ob nun die Liste an Aufgaben kürzer geworden ist.

Todos Daten

Die Amazon RDS Instanz hat bereits im Hintergrund eine passive, weitere Instanz, auf die Daten automatisch repliziert werden. Mit dem Multi-AZ Deployment läuft die Datenbank nach einem kurzen Unterbruch in einer anderen Availability Zone weiter, wenn es ein Failover gibt. Der Datenbank Endpunkt für die Applikation (Amazon RDS Endpoint) bleibt dabei identisch. Somit muss die Anwendung nicht umkonfiguriert werden.

Failover der Datenbank testen

  1. Unter Services den Dienst RDS auswählen.
  2. Die Details der Datenbank Instanz mit klick auf workshop-db öffnen.
  3. Unter Actions auf Reboot klicken.
  4. Die Option Reboot With Failover auswählen und mit Confirm bestätigen.
  5. Auf der Übersicht in der Spalte Region & AZ die aktuelle AZ notieren.
  6. Nachdem die Datenbank wieder im Status Available ist, hat sich die AZ geändert und der Failover hat funktioniert.

Zusammenfassung und nächste Schritte

Herzlichen Glückwunsch! Deine ToDo-App funktioniert nun und du hast ihre Funktionen getestet. Sie ist hochverfügbar und die Front- und Backend Container sind redundant über zwei Availability Zones (AZs) verteilt. Zusätzlich ist die Datenbank ebenfalls redundant konfiguriert (Multi-AZ). Damit wir einen Überblick bekommen, was in unserer Anwendung vor sich geht und wie wir sie sicherer machen können, werden die Themen Monitoring und Backup in den letzten beiden Kapiteln behandelt.