m346/KN06/KN06.md
Marcello Calisto c57ca4ff96 Auftrag E)
2023-10-20 09:01:52 +02:00

49 KiB

KN06 Inhaltsverzeichnis

[TOC]


Challenges

A) Theorie: Scaling up vs. out (vertical vs. horizontal) / Auto Scaling, Load Balancer und High Availability

Ausgangslage:

🔖 Wissen, dass sie für die bevorstehenden Challenges gut nutzen können.

  • Theorie-script (noch verlinken)
  • Leistungsnachweise (noch verlinken)

B) Lab: Zwei Webserver erstellen und Last mittels Load Balancer gleichmässig verteilen.

Ausgangslage:

🔖 Für dieses Lab verwenden Sie in der AWS Academy den Kurs AWS Academy Introduction to Cloud: Semester 1. In dieser Laborumgebung ist der Zugriff nur auf die AWS-Services beschränkt, die zum Ausführen des Labs erforderlich sind. Wenn Sie versuchen, auf andere Dienste zuzugreifen oder Aktionen auszuführen, die über die in diesem Lab beschriebenen hinausgehen, können Fehler auftreten.

Anleitung:

Für den ersten Challenge der Kompetenz KN06 wechseln Sie ins elfte Modul Module 11 - Load Balancers and Caching. Hier finden Sie die praktische Übung Lab 11 - Load Balancing. Diese ist Schritt für Schritt geleitet.

⚠️ Hinweis:

Die folgenden Challenges bauen auf diesem ersten Lab auf. Versuchen Sie deshalb die Schritte so zu dokumentieren, dass Sie darauf zurückgreifen können.

Modul 11: Lab 11 - Load Balancers and Caching

Das Lab dauert ca. 30'. Führen Sie alle Schritte konzentriert und der Reihe nach durch. Für den Leistungsnachweis zeigen Sie neben der Doku auch noch gleich live, dass der Loadbalancer funktioniert (Browser mehrmals hintereinander reloaden).

Netzwerkschema:
  1. Load Balancer mit zwei Instanzen: 🔎 Originalbild (oder unten auf das Bild klicken)
    1 Load Balancer verteilt requests auf zwei Instanzen
    1. Launch template

Ziel der Übung

🔔 Sie sind in der Lage, folgende Tasks durchzuführen:

  • Application Load Balancer (inkl. Target Group) aufsetzen
  • Application Load Balancer testen (mit zwei Webservern in verschiedenen Availability Zones)
Leistungsnachweis
  • Ablauf nachvollziehbar im eigenen Repository dokumentiert (für nächste Challenges hilfreich).
  • Live-Demo beim Coach (Mit mehrfachem "Reload" der Webseite beweisen, dass beide Instanzen angesprochen werden)
  • Fachgespräch mit Coach.

Beachten Sie ausserdem die llgemeinen Informationen zu den Abgaben.

Beispiel-Abgabe (Doku):
  • Screenshots :
  1. LoadBalancer: 🔎 Originalbild (oder unten auf erstes Bild klicken)
  2. Target Group: 🔎 Originalbild (oder unten auf zweites Bild klicken)
2 LoadBalancer 3 Target Group
1. Loadbalancer 2. TargetGroup
  1. Webserver 1: 🔎 Originalbild (oder unten auf erstes Bild klicken)
  2. Webserver 2: 🔎 Originalbild (oder unten auf zweites Bild klicken)
4 Webswerver 1 5 Webserver 2
3. Webserver 1 4. Webserver 2

Wissenswertes vor dem nächsten Challenge:

💡 Für eine perfekte High Availability-Plattform würde dieser Load Balander noch nicht alle Bedingungen erfüllen. Das Beispiel unten zeigt, dass die Instanzen in unterschiedlichen Availability-Zones sind. Damit ist zwar schon mal ein wichtiges Kriterium erfüllt. Was würde jetzt aber passieren, wenn plötzlich gleichzeitig 10'000x mehr Requests reinkämen und die Applikation unter dieser Last zusammenbricht? Genau. Um diesen - oder ähnliche - Use-cases in den Griff zu bekommen, benötigt der Load Balancer Unterstützung von seinem besten Freund, dem Auto Scaler 👬. Was dieser unternimmt und wie er es macht, erfahren Sie gleich, nachdem wir noch abschliessend zu diesem Challenge einen möglichen Use-Case eines Service-Ausfalls (DoS-Attacke) angeschaut haben. Sie werden dann im nächsten Challenge auch gleich selber einen Auto Scaler aufsetzen und diesen dann im übernächsten Challenge mit dem Load Balancer zum unschlagbaren Team High Availabiliy vereinen. 🔧

Use Case: Denial of Service

Denial of Service (DoS) bezeichnet eine Cyberangriffstechnik, bei der ein Angreifer versucht, ein Computersystem oder eine Website durch Überlastung mit Traffic oder Anfragen unzugänglich zu machen. Das Ziel ist, legitimen Nutzern den Zugriff zu verweigern, indem die Ressourcen des Zielsystems erschöpft werden. DoS-Angriffe oder auch gewöhnliche technische Störungen können erhebliche Schäden verursachen und werden durch verschiedene proaktive Sicherheitsmaßnahmen wie Firewalls, Intrusion Detection Systems bekämpft und zusätzlich mit Monitoring-Software überwacht. Der Load Balancer hat aber eine andere Aufgabe und ist nicht darauf ausgelegt, solche Problem zu lösen. Und genau da kommt der Auto Scaler ins Spiel. Der Auto Scaler gehört zu den reaktiven Sicherheitsmassnahmen. Er wird durch einen Trigger aktiviert. Das ist entweder ein Status Check der einen Alarm auslöst, oder eine CloudWatch-Metrics, die eine Grenzwertüberschreitung meldet. Er kommt also erst zum Zug, wenn irgendetwas nicht stimmt. Die vier Bilder unten zeigen genau ein solches Szenario auf.

  1. Normale Nutzung Load Balancer mit zwei Instanzen: 🔎 Originalbild (oder unten auf erstes Bild klicken)
  2. Denial of Service (Überlastung des Servers): 🔎 Originalbild (oder unten auf zweites Bild klicken)
1 Normale Nutzung 2 Denial of Service (wegen Überlastung)
1. Load Balancer ok 2. Denial of Service
  1. Error Code 500. Der Server ist überlastet.
  2. User können nicht mehr auf die Applikation zugreifen.
4 Rückmeldung des Servers (Error Code 500) 4 Kein Zugiff auf die Applikation mehr möglich
1. Load Balancer ok 2. Denial of Service

C) Lab: Auto Scaling Group erstellen und anwenden

Ausgangslage:

🔖 Für dieses Lab verwenden Sie in der AWS Academy das Learner Lab.

In diesem Challenge werden Sie eine Auto Scaling Group erstellen und später beim Erstellen von neuen EC2-Instanzen nutzen. Der Load Balancer aus dem letzten Challenge und die Auto Scaling Group können unabhängig voneinder eingesetzt werden. Gemeinsam sind diese beiden Dienste allerdings unschlagbar und in einer dynamischen High Availability Umgebung nicht wegzudenken.

Kombiniert man den Auto Scaler mit den Load Balancer, erhält der dahinterliegende Service eine um einiges höhere Verfügbarkeit. Beim Ausfall einer Site (z.B. Datacenter Stromausfall) wird der Traffic automatisch auf die andere Site umgeleitet. Die "verlorenen" Instanzen werden automatisch in der verfügbaren Availability Zone hochgefahren. Zusätzlich kann man den Auto Scaler auch noch mit Metrics ergänzen. Z.B. Falls die CPU-Auslastung einen Grenzwert überschreitet, sollen dynamisch weitere Instanz hochgefahren werden etc... Das ganze funktioniert natürlich auch umgekehrt. Falls die CPU-Auslastung unter den Grenzwert fällt, wird die zusätzliche Instanz automatisch wieder terminiert. Man spricht in diesem Fall von Elasticity. Im Gegensatz zum Begriff Scalability (z.B. Einbau einer weiteren SSD) kann die Plattform on-demand Ressourcen hinzufügen oder entfernen.

Momentan aber schauen wir diese beiden Dienste noch losgelöst voneinander an. Im folgenden Auftrag geht es deshalb nur um die Vorzüge des Auto Scalers. Er stellt sicher, dass meine Ressourcen immer dem gewünschten Zustand (Desired state) entsprechen. Im folgenden Challenge setzen wir diesen Dienst so auf, dass immer mindestens zwei EC2-Instanzen laufen. Falls eine Instanz wegfällt (z.B. versehntlich terminiert, SW-Issue oder technischer Defekt) wird automatisch eine neue Instanz hochgefahren.

Aufgaben des Auto Scalers:

  • Launchen und terminieren von EC2-Instanzen dynamisch.
  • Horizontal skalieren (Scale out).
  • Unterstützt Elasticity und Scalability.
  • Reagiert auf EC2 Status Checks und CloudWatch-Metrics.
  • Skaliert On-demand (Performance) und/oder gemäss Planung (Falls man z.B. weiss, dass am Sonntagabend ein Backup-Job viel Ressourcen braucht).
Netzwerkschema:
  1. Auto Scaling Group reagiert dynamisch auf Status Checks und CloudWatch Metrics: 🔎 Originalbild (oder unten auf das Bild klicken)
    1 Auto Scaling Group überwacht Status Checks und CloudWatch Metrics
    1. Launch template

Gleichzeitig erkennt man hier aber sofort auch die Grenzen des Auto Scalers. Er ist zwar in der Lage, aufgrund von status checks und CloudWatch-Metrics den Gesundheitszustand der Instanzen zu checken und entsprechend zu reagieren (z.B. beim Ausfall einer EC2-Instanz eine Ersatz-Instanz hochzufahren), aber er ist alleine nicht in der Lage, die Last gleichmässig zu verteilen und dabei auch die neuen Instanzen einzubinden. Und genau hier kommt ihm sein bester Freund, der Load Balancer, zur Hilfe 👬. Der Auto Scaler sorgt also quasi im Hintergrund dafür, dass immer ausreichend (nicht zuviel, aber auch nicht zuwenig) Ressourcen vorhanden sind, während der Load Balancer vorne praktisch als Türsteher dafür sorgt, dass diese Ressourcen gleichmässig genutzt werden. Weil die Ressourcen nun dynamisch angepasst werden und über zwei oder mehrere Availability Zones verteilt sind, sind sämtliche Anforderungen an eine High Availability-Architektur erfüllt.

Anleitung:

Als erstes werden Sie ein Launch Template erstellen.

Schritt 1: Launch template erstellen

Setzen Sie als erstes ein Launch-Template auf. Wählen Sie dazu links in der Navigation Bar unter Instances den Buttom Create Launch template aus. Dann konfigurieren Sie das LaunchTemplate mit folgenden Parametern:

  • Launch template Name: KN06_XXX_LaunchTemplate (XXX = Gemäss Namenskonvention)
  • Application and OS Image: Amazon Linux 2023 AMI (AWS)
  • Instance type: t2.micro
  • Key-pair name: Don't include in launch template
  • Network settings:
    • Subnet Don't include in launch template
    • Security-Groups M346-XXX-Web-Access auswählen
  • Advanced Details (unter User data):
    • diesen Code eingeben (Copy/Paste). Bitte darauf achten, dass nur der Code eingegeben wird. Die Erklärungen helfen Ihnen lediglich, den Code zu verstehen. Später, beim Leistungsnachweis, wird von Ihnen erwartet, dass Sie diesen bis ins Detail erklären können. Schema |
  • Buttom Create launch template anklicken: (Template wird erstellt)
  • Buttom View launch template anklicken: (Kontrolle)
Schritt 2: Auto Scaling Group erstellen

Wählen Sie wieder links in der Navigation Bar unter Auto Scaling das Unterverzeichnis Auto Scaling Groups aus. Dann klicken Sie auf den orangen Buttom Create Auto Scaling group. Danach erscheint eine neue Seite mit dem Titel Choose launch template, welches Sie wie folgt ausfüllen:

  • Name:
    • Auto Scaling group name: KN06_XXX_AutoScalingGroup
    • Launch Template: KN06_XXX_LaunchTemplate
      ...sonst nichts ändern und mit Next bestätigen. Es erscheint eine neue Seite mit dem Titel Choose instance launch options, welches Sie wie folgt ausfüllen:
  1. Launch template (VPC und beide Public Subnets): 🔎 Originalbild (oder unten auf erstes Bild klicken)
  2. Launch options (No LB und No VPC Lattice Service): 🔎 Originalbild (oder unten auf zweites Bild klicken)
    1 Launch template: Korrekte VPC und beide Public Subnets auswählen 2 Launch options: No load balancer
    1. Launch template 2. Launch options
  3. 1 Nun wird noch die Group size definiert. Wieviele Instanzen im gewünschten-, maximalen und minimalen Zustand laufen sollen.
    2 Die Scaling policy (Dynamische Anpassung on demand) wird in diesem Challenge nicht genutzt. Deshalb auf None lassen.
    Group Size und Scaling policies Entsprechende Werte zuweisen
    - Desired capacity: Gewünschte Anzahl Instanzen - 2
    - Minimum capacity: (Intervention, wenn weniger als 2 Instanzen)
    - Maximum capacity (Intervention, wenn mehr als 2 Instanzen)

    Schema
  4. Mit der Bestätigung Create Auto Scaling Group die Auto Scaling Group erstellen.
Schritt 3: Check
  1. Activity history anschauen: Hier sieht man, dass die Auto Scaling Group bereits aktiv eingegriffen hat. Es wurden zwei EC2-Instanzen gemäss den ganz am Anfang definierten Informationen im Launch template gelauncht (Increasing the capacity from 0 to 2). 1. EC2 Instanz

⚠️ Hinweis:

Sinnesgemäss sollten die beiden Instanzen in unterschiedlichen Availability Zones liegen. Überprüfen wir kurz, ob das so ist:

  1. 1.) Erste EC2 Instanz (PublicIP: 18.232.128.55) : 🔎 Originalbild (oder unten auf erstes Bild klicken)
    2.) Zweite EC2 Instanz (PublicIP: 34.229.82.210): 🔎 Originalbild (oder unten auf zweites Bild klicken)

    Erste EC2 Instanz (PublicIP: 18.232.128.55) Zweite EC2 Instanz (PublicIP: 34.229.82.210)
    1. EC2 Instanz 2. EC2 Instanz

    ✔️ Beweis:
    Beide Instanzen befinden sich in unterschiedlichen Availability Zones:

  2. 1.) Zugriff auf erste EC2 Instanz (PublicIP: 18.232.128.55) - us-east-1b : 🔎 Originalbild (oder unten auf erstes Bild klicken)
    2.) Zugriff auf zweite EC2 Instanz (PublicIP: 34.229.82.210) - us-east-1a: 🔎 Originalbild (oder unten auf zweites Bild klicken)

    Erste EC2 Instanz (AZ: us-east-1b) Zweite EC2 Instanz (AZ: us-east-1a)
    1. EC2 Instanz 2. EC2 Instanz

    Ziel der Übung

🔔 Verständnisaufbau für Merkmale, die eine High availability-Architektur auszeichnen. Sie wissen, wie eine Auto Scaling Group aufgesetzt wird und was sie genau macht. Sie kennen den Unterschied zwischen Scaling up (Vertikale Skalierung) und Scaling out (Horizontale Skalierung) und verstehen, wie die Services Auto Scaling Group und Load balancer arbeiten und wie sie sich gegenseitig ergänzen.

Leistungsnachweis
  • Das Launch template ist korrekt erstellt worden (gemäss Namenskonvention).
  • Die Auto Scaling Group ist korrekt erstellt worden (gemäss Namenskonvention).
  • Zwei Webserver-Instanzen in unterschiedlichen Availability Zones wurden gemäss Launch template erstellt.
  • Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
  • Fachgespräch mit Coach.
    • Sie kennen die Details des verwendeten User-data scripts
    • Sie kennen den Unterschied zwischen Auto-scaler und Load Balancer.
    • Sie verstehen, was High availability bedeutet und können diesen Begriff differenziert anhand eines Beispiels erklären.

Beachten Sie ausserdem die allgemeinen Informationen zu den Abgaben.


D) Lab: Load Balancer / High Availability

Ausgangslage:

🔖 Für dieses Lab verwenden Sie in der AWS Academy das Learner Lab. Es baut auf dem vorangegangenem Challenge B) auf. Das heisst: Die Auto Scaling Group existiert bereits und hat zwei Instanzen in zwei verschiedenen Availability Zones erstellt. Falls Sie in der Zwischenzeit das Lab aus- und wieder eingeschaltet haben sollten, ist das kein Problem. Die Auto Scaling Group ist persistent und startet die Instanzen wieder automatisch, wenn Sie das Lab starten. 📌 Das heisst aber auch, dass Sie diese und alle dazugehörigen Ressourcen am Ende dieses Challenges unbedingt löschen sollten.

Nun. Im ersten Challenge von KN06 haben Sie einen Load Balancer erstellt. Im zweiten Challenge dann haben Sie im Learner Lab eine Auto Scaling Group erstellt. Sie haben auch erfahren, wie diese beiden Dienste funktionieren, dass sie beste Freunde sind und sich perfekt ergänzen. Nun gilt es also, im Learner Lab noch den Load Balancer aufzusetzen und diesen mit dem bereits funktionierenden Auto Scaler zu vereinen. Wenn alles funktioniert, haben Sie am Ende dieses Challenges die reinste Form einer hochverfügbaren Plattform geschaffen. Dies, weil auch der vermeintlich einzige Single Point of Failure, der ELB (Elastic Load Balancer), AWS-Intern mehrfach über verschiedene IP-Adressen abgesichert wird.

Anleitung:

Dieser zweitletzte KN06 Challenge setzt einen funktionstüchtigen Auto Scaler aus dem letzten Challenge voraus (zwei EC2-Instanzen in unterschiedlichen AZs sollten ebenfall schon laufen).

⚠️ Hinweis:

Die Umgebung läuft im Moment also wie folgt:

  • Die Auto Scaling Group ist im Hintergrund aktiv und sorgt dafür, dass immer mindestens zwei Instanzen laufen.
  • Es gibt noch keinen Loadbalancer.
Use Case: Auto Scaler funktioniert, aber ohne Load Balancer

Dieses Beispiel mit einer Reihenfolge von 5 Bildern verdeutlicht, weshalb es nicht viel bringt, wenn man nur den Auto Scaler aufsetzt, ohne ihn mit dem Load Balancer zu ergänzen.

1. Bild: Wenn nun also User auf die Applikation zugreifen, können sie das theoretisch nur mit der IP-Adresse oder dem DNS.
2. Bild: Das bedeutet, dass die Last nicht gleichmässig verteilt wird. Hier fällt genau die EC2-Instanz aus, auf welche alle User zugreifen.
3. Bild: Der Auto Scaler erhält diese Info und ist sofort in der Lage, eine neue Instanz zu starten. Aber so, wie die Umgebung aktuell aufgesetzt ist, können die User nicht darauf zugreifen.
4. Bild: Der Auto Scaler funktioniert as designed. Bei noch mehr Anfragen wird er aufgrund des überschrittenen Grenzwertes weitere Instanzen hochfahren.
5. Bild: Der Prozess wird fortgesetzt. On-demand werden Instanzen hoch- oder runtergefahren. Obwohl der Load mit dieser Scale-out-Strategie abgedeckt wäre, können die User immer noch nicht auf den Dienst zugreifen.

  1. Zugriff auf App via IP oder DNS: 🔎 Originalbild (oder unten auf erstes Bild klicken)
  2. Instanz defekt: 🔎 Originalbild (oder unten auf zweites Bild klicken)
  3. Auto Scaler reagiert und startet neue Instanz: 🔎 Originalbild (oder unten auf drittes Bild klicken)
    1 Zugriff via IP oder DNS 2 Instanz failure 3 Auto Scaler reagiert und startet neue Instanz
    VPC Your VPC Create VPC 1
  4. Mehr Anfragen. Auto Scaler startet mehr Instanzen 🔎 Originalbild (oder unten auf erstes Bild klicken)
  5. Noch mehr Anfragen. Auto Scaler erstellt noch mehr Instanzen 🔎 Originalbild (oder unten auf zweites Bild klicken)
    4 Auto Scaler erstellt mehr Instanzen bei mehr Anfragen 5 Auto Scaler erstellt noch mehr Instanzen bei noch mehr Anfragen
    xxx xxx

Missing in action

💡 Und hier kommt der Loadbalancer ins Spiel. Falls dieser nämlich vorhanden wäre, würde er Hand in Hand mit dem Auto-Scaler die aktuellen Infos austauschen und dafür sorgen, dass die Anfragen gleichmässig auf die vom Auto Scaler zur Verfügung gestellten EC2-Instanzen verteilt werden. In diesem Challenge wird ein Loadbalancer aufgesetzt und so eingebunden, dass genau das funktioniert.
Die Archtitektur sieht dann wie folgt aus:

Netzwerkschema:
  1. Auto Scaling Group ist konfiguriert und reagiert dynamisch auf Status Checks und CloudWatch Metrics: 🔎 Originalbild (oder unten auf das Bild klicken)
  2. Load Balancer existiert noch nicht. Muss nun erstellt werden
    1 Auto Scaler ist konfiguriert und läuft / 2 Elastic Load Balancer wird nun erstellt und eingebunden
    1. Launch template

Anleitung:

In diesem Abschnitt wird erklärt, wie man einen Elastic Load Balancer einrichtet und mit einer bestehenden Auto Scaling Group verbindet. Es werden nicht alle Screenshots angezeigt. Es gibt allerdings die Möglichkeit, jeweils über den Begriff zu "hovern". Begriffe in Blau bedeuten, dass sie mit Links zu den zugehörigen Bildern ergänzt sind und können mit einem Klick geöffnet werden.

Schritt 1: Target Group erstellen

Zuerst definieren Sie eine Target Group. Hier wird bestimmt, welche EC2-Instanzen vom Loadbalancer bedient werden sollen.

  1. Navigation Bar: Wählen Sie links unter Load Balancing den Buttom Target Groups aus. Dann konfigurieren Sie die Target Group mit folgenden Parametern:
  2. Target Groups: Buttom Create Target Groups anklicken.
  3. Specify group details (1.Seite):
    • Choose a target type: Instances auswählen.
    • Target group name: KN06-XXX-TargetGroup1 eingeben
    • Protocol: HTTP Port: 80.
  4. Specify group details (2.Seite)::
    • IP address type: IPv4
    • VPC: M346-XXX-VPC (Früher eingerichtete VPC auswählen).
    • Protocol Version: HTTP1 (Defaultwert belassen).
    • Health checks:
      • Health check protocol HTTP (Defaultwert belassen).
      • Health check path / (LB sendet den Targets regelmässig Statusanfragen).
      • ...nach unten scrollen bis der Buttom Next erscheint.
  5. Auf den Buttom Next klicken, um auf die nächste Seite zu gelangen.
    1. Available Instances: Beide Instanzen aktivieren 🔎 Originalbild (oder unten auf erstes Bild klicken).
    2. Den Buttom Incluide as pending below anklicken.
  6. Review Targets: Buttom Create target group anklicken 🔎 Originalbild (oder unten auf zweites Bild klicken)
    6.1 Available instances - Instanzen aktivieren / 6.2. "Include as pending below" anklicken 7 Review targets: Buttom "Create target group" anklicken
    xxx xxx

Die Target group wurde nun erstellt. Im nächsten Bild ist allerdings zu erkennen, dass noch kein Load Balancer zugewiesen wurde.

  1. Load Balancer existiert noch nicht. Muss nun erstellt werden
    1 Auto Scaler ist konfiguriert und läuft / 2 Elastic Load Balancer wird nun erstellt und eingebunden
    1. Launch template
Schritt 2: Load Balancer erstellen
  1. Navigation Bar: Wählen Sie links unter Load Balancing den Buttom Load Balancers aus. Dann klicken Sie auf den Buttom Create Load balancer.
  2. Compare and select load balancer type: Wählen Sie den Application Load Balancer aus.
  3. Create Application Load Balancer (1.Seite):
    • Load balancer name: KN06-XXX-ALB1 eingeben
    • Scheme: Internet-facing auswählen
    • IP address type: IPv4 auswählen
  4. Create Application Load Balancer (2.Seite):
    • VPC: M346-XXX-VPC (früher erstellte VPC auswählen)
    • Mappings:
      • M346-XXX-Public-1A auswählen (erstes Public Subnet)
      • M346-XXX-Public-1B auswählen (zweites Public Subnet)
  5. Create Application Load Balancer (3.Seite):
    • Security Groups: M346-XXX-Web-Access (früher erstellte Security Group auswählen - Inbound rule Port 80 muss offen sein)
    • Listeners and routing:
      • Protocol HTTP und Port 80 auswählen
      • Default action: Forward to: KN06-XXX-TargetGroup1 auswählen (wenn Anfragen auf Port 80 eintreffen, sollen diese an die vorher erstellte TargetGroup weitergeleitet werden).
  6. Create Application Load Balancer (4.Seite):
    • Summary: Basic configuration, Security groups, Network mappings und Listeners and routing checken (überprüfen, ob alles korrekt konfiguriert ist)
    • Buttom Create load balancer anklicken (Load Balancer wird erstellt)
  7. Resultat: (Hinweis, dass das Setup ein paar Minuten dauern kann)
    7. Mitteilung mit grünem Hintergrund: Successfully created Load balancer
    LB

⚠️ Hinweis:

Jetzt sind Sie zwar soweit, dass Sie eine Auto Scaling Group und einen Load Balancer haben, aber diese sind noch nicht aufeinander abgestimmt. Falls jetzt also neue Instanzen gelauncht würden, würden diese noch nicht der Target Group des Loadbalancers zugewiesen. Dazu müssen unbedingt noch folgende Steps durchgeführt werden.

Schritt 3: Auto Scaling Group der Target Group des Load Balancers zuweisen
  1. Navigation Bar: Wählen Sie links unter Auto Scaling den Buttom Auto Scaling Groups aus. Dann klicken Sie auf die bereits existierende Auto Scaling Group KN06_XXX_AutoScalingGroup.
  2. Scrollen Sie runter bis Load balancing: und klicken Sie auf Edit.
  3. Unter Load balancers:
    • Setzen Sie ein Häkchen in das Feld "Application, Network or Gateway Load Balancer target groups"
    • Wählen Sie anschliessend die erstellte Target Group KN06-XXX-TargetGroup1 aus.
    • Klicken Sie unten auf das Feld Update
Schritt 4: Konfiguration prüfen

Im letzten Schritt nochmals kurz checken, ob in der Target Group die Targets (Instanzen) registriert sind und Health status healthy haben und dann mit dem DNS-Namen des Load Balancers testen, ob der Dienst funktioniert.

  1. Bei der Navigation Bar: wählen Sie links unter Load Balancing den Buttom Target Groups aus. Dann klicken Sie auf den Tab Targets.
  2. Bei der Navigation Bar: wählen Sie links unter Load Balancing den Buttom Load Balancers aus. Dann erscheint gleich der Name des Load Balancers KN06-XXX-ALB1 und der zugehörige DNS Name KN06-XXX-ASB1-xxxxxx.us-east-1.elb.amazonaws.com.
  3. 1.) Browser öffnen und DNS-Namen in neuen Tab kopieren: 🔎 Originalbild (oder unten auf erstes Bild klicken)
    2.) Reload Buttom des Browsers mehrmals betätigen - us-east-1a und us-east-1b wechseln sich ab: 🔎 Originalbild (oder unten auf zweites Bild klicken)
    Random AZ. Entweder us-east-1a oder us-east-1b Random AZ. Entweder us-east-1a oder us-east-1b
    LoadBalancer in action1 LoadBalancer in Action2
  4. Loadbalancer Details: 🔎 Originalbild (oder unten auf Bild 4 klicken)
  5. Loadbalancer Listener and rules: 🔎 Originalbild (oder unten auf Bild 5 klicken)
  6. Loadbalancer Network mapping: 🔎 Originalbild (oder unten auf Bild 6 klicken)
    4 LB Details 5 LB Listener and rules 6 LB Network mapping
    xxx xxx xxx
  7. Target Groups Targets (Zugehörige Instanzen): 🔎 Originalbild (oder unten auf Bild 7 klicken)
  8. Auto Scaling Group Launch template (Welches Template wird genutzt): 🔎 Originalbild (oder unten auf Bild 8 klicken)
  9. Auto Scaling Group Activitiy (Journal über gelaunchte Instanzen): 🔎 Originalbild (oder unten auf Bild 9 klicken)
    7 Target Groups und zugehörige Instanzen 8 Infos zu Launch Template 9 Journal, Log
    TG-Inst Template Journal

⚠️ Hinweis:

Im Gegensatz zum Anfang dieses Challenges, entspricht die Umgebung jetzt dem High availiabilty-Standard - wie folgt:

  • Die Auto Scaling Group ist im Hintergrund aktiv und sorgt dafür, dass immer mindestens zwei Instanzen laufen.
  • Es wurde ein Load Balancer hinzugefügt, der die Last auf die verfügbaren Instanzen verteilt. Er nutzt dafür eine Target Group, auf welche auch der Auto Scaler Zugriff hat.
Use Case: Auto Scaler und Load Balancer funktionieren:

Dieses Beispiel mit einer Reihenfolge von 5 Bildern verdeutlicht, wie Auto Scaler und Load Balancer interagieren und gemeinsam sicherstellen, dass die Plattform fehlertolerant und somit hochverfügbar ist.

1. Bild: Der erste Benutzer greift auf die App zu. Der Load Balancer leitet ihn weiter zur Instanz 1.
2. Bild: Der zweite Benutzer greift auf die App zu. Der Load Balancer leitet ihn weiter zur Instanz 2.
3. Bild: Der dritte und vierte Benutzer greifen auf die App zu. Der Load Balancer verteilt diese gleichmässig auf beide Instanzen (Lastverteilung funktioniert)
4. Bild: Die Instanz 1 fällt aus.
5. Bild: Der Load Balancer erkennt den Fehler und leitet die Anfragen auf Instanz 2 um
6. Bild: Der Auto-Scaler erkennt Fehler und erstellt gemäss Desired State: 2 eine neue Instanz (Nr.3).
7. Bild: Der Load Balancer erhält die Info, dass vom Auto Scaler eine neue Instanz bereitgestellt wurde, nimmt diesen in seine Target Group auf und leitet Teil des Traffics darauf um.

  1. Zugriff vom ersten Benutzer: 🔎 Originalbild (oder unten auf erstes Bild klicken)
  2. Zugriff vom zweiten Benutzer: 🔎 Originalbild (oder unten auf zweites Bild klicken)
  3. Zugriff vom dritten und vierten Benutzer: 🔎 Originalbild (oder unten auf drittes Bild klicken)
    1 Zugriff vom ersten Benutzer 2 Zugriff vom zweiten Benutzer 3 Zugriff vom dritten und vierten Benutzer
    User1 User2 User3+4
  4. Instanz1 fällt aus 🔎 Originalbild (oder unten auf erstes Bild klicken)
  5. Der Load Balancer erkennt den Fehler und leitet Traffic auf gesunde Instanz um 🔎 Originalbild (oder unten auf zweites Bild klicken)
    4 Instanz (Nr.1) fällt aus 5 Load Balancer reagiert und leitet auf gesunde Instanz (Nr.2) um
    Instanz1Error Umleitung
  6. Der Auto-Scaler erkennt den Fehler und erstellt sofort eine neue Instanz (Nr.3) 🔎 Originalbild (oder unten auf erstes Bild klicken)
  7. Der Load Balancer reagiert, bindet die neue Instanz ein und leitet einen Teil des Traffics darauf um 🔎 Originalbild (oder unten auf zweites Bild klicken)
    6 Auto-Scaler erkennt Fehler und startet neue Instanz (Nr.3) 7 Load Balancer reagiert und bindet neue Instanz (Nr.3) ein
    Instanz1Error Umleitung

Ziel der Übung

🔔 Sie wissen, wie man eine High availability-Architektur aufsetzt. Sie sind in der Lage, einen Load Balancer aufzusetzen und so zu konfigurieren, dass er mit einer Auto Scaling Group zusammenarbeitet und so sicherstellt, dass die Plattform resilient und Fault tolerant aufgebaut ist.

Leistungsnachweis
  • Die Target Group ist korrekt erstellt worden (gemäss Namenskonvention).
  • Der Load Balancer ist korrekt erstellt worden (gemäss Namenskonvention).
  • Die Auto Scaling Group wurde korrekt der Target Group des Load Balancers zugewiesen.
  • Der Load Balancer funktioniert fehlerfrei. Bei Reload des Browsers greift der Load Balancer auf beide Availability Zones zu.
  • Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
  • Fachgespräch mit Coach.
    • Sie wissen, was eine Target Group ist und wie diese mit dem Load Balancer interagiert.
    • Sie verstehen, weshalb die Auto Scaling Group der Target Group zugewiesen wird und können anhand eines Beispiels differenziert erklären, wie sich das auf die Funktion der Plattform auswirkt.

Beachten Sie ausserdem die allgemeinen Informationen zu den Abgaben.

Services löschen

⚠️ Hinweis:

Nachdem Sie den Challenge D abgeschlossen haben und bevor sie mit dem letzten Challenge E starten, müssen Sie die bestehende Umgebung löschen. Im folgenden Challenge werden Sie das gelernte Wissen für einen neuen, etwas ergänzten, Use-case anwenden. Führen Sie nun folgende Schritte der Reihe nach durch, damit sie später keine Konflikte bekommen:

  1. Auto Scaling Group löschen: 🔎 Originalbild
  2. Instanzen löschen (falls ASG gelöscht wird, nicht zwingend nötig): 🔎 Originalbild
  3. Load Balancer löschen: 🔎 Originalbild
  4. Target Groups löschen: 🔎 Originalbild
  5. Launch Template löschen: 🔎 Originalbild


E) High Availability Setup mit elastischer Anpassung der Ressourcen (HA Ninja)

Ausgangslage:

Sie wissen nun, wie man eine High Availability Plattform aufbaut und betreibt. Was nun noch fehlt ist, dass die Applikation on-demand weitere Instanzen hoch- und runterfahren kann. Im AWS Fachjargon nennt man diesen Prozess Elasticity. AWS Elasticity hilft, Geld zu sparen und gleichzeitig sicherzustellen, dass die Anwendungen immer reibungslos laufen.

Challenge +

💡 Im letzten KN06-Challenge werden Sie selbständig eine Elastic High Availability Plattform aufbauen. Erschwerend kommt jetzt also nur noch hinzu, dass Sie die Umgebung so aufsetzen müssen, dass sie elastisch skalieren kann. Alles andere haben Sie bereits gemacht. Damit am Ende technisch alles funktioniert, müssen sie für die neue Auto Scaling Group eine sogenannte Dynamic scaling policy erstellen. In diesem Fall mit dem Target value = 20. Das bedeutet, dass sobald Sie ihre Webseite mehr als 20x reloaden, automatisch weitere Instanzen hochgefahren und an den Load Balancer angehängt werden. Damit Sie dies auch beweisen können, erstellen Sie ein neues Launch Template mit leicht ergänztem Code. Dieser ist dafür verantwortlich, dass auf Ihrer Webseite unter der Availability Zone noch eine zweite Zeile erscheint mit der Instanz-ID. So kann man schön überprüfen, ob die neuen Instanzen auch vom Load Balancer angesprochen werden können.

📑 Die ergänzenden Skills bzgl. elastischem Setup werden Ihnen, wenn es soweit ist, step by step erklärt. Bzgl. Namenskonvention gibt es ebenfalls noch ein paar wichtige Informationen unten. Alles andere müssen Sie allerdings selber elaborieren. Nutzen Sie dazu die Anleitung des letzten Challenges. Achten Sie darauf, dass die Namenskonvention leicht angepasst wurde und dass Sie z.B. für das Launch Template ein anderes Script (ergänzt mit Instance-IDs) verwenden. Dies, weil Sie am Ende beweisen werden, dass Ihre Plattform in der Lage sein wird, on-demand neue Instanzen hinzuzufügen und dass der Load Balancer anschliessend auch darauf zugreifen kann.

Die Bildreihenfolge unten zeigt nochmals, was mit Elastic Load Balancing gemeint ist.

1. Bild: Es greifen weit mehr als gewöhnlich viele User auf die Applikation zu. Desired State ist auf 2 Instanzen gesetzt.
2. Bild: Der Auto-Scaler erhält von Amazon CloudWatch die Information, dass der Grenzwert Target value überschritten wurde (Policy-Metric). Er erstellt eine neue Instanz (Nr.3)
3. Bild: Der Auto Scaler erstellt weitere Instanz (4/5), nimmt diese in seine Target Group auf und leitet einen Teil des Traffics darauf um.

  1. Viele Benutzer greifen auf die App zu: 🔎 Originalbild (oder unten auf erstes Bild klicken)
  2. Auto Scaler reagiert und fährt neue Instanz hoch: 🔎 Originalbild (oder unten auf zweites Bild klicken)
  3. Metrics Alarm besteht weiterhin. Weitere Instanzen werden hochgefahren: 🔎 Originalbild (oder unten auf drittes Bild klicken)
    1 Hohe Belastung. CloudWatch Alarm 2 Grenzwert überschritten. Weitere Instanz 3 Demand bleibt hoch. Noch mehr Instanzen
    User1 User2 User3+4

Anleitung:

⚠️ Hinweis:

In diesem Abschnitt wird in groben Zügen erklärt, was zu tun ist. Achten Sie auf die Namenskonvention und auf die Änderungen in Bezug auf den letzten Challenge. Sie können also nicht einfach alles vom letzten Challenge 1:1 kopieren.

Zum Kompetenznachweis gehört nicht nur eine funktionierende Plattform, sondern auch die korrekte Namensgebung, eine nachvollziehbare Dokumentation und solide Argumente im Fachgespräch 💪


Schritt 1: Launch template erstellen

Referenz: HIER geht's zur ausführlichen Anleitung Launch Template erstellen des letzten Challenges.

Wählen Sie links in der Navigation Bar unter Instances das Unterverzeichnis Launch Templates aus. Dann klicken Sie auf den orangen Buttom Create launch template. Danach erscheint eine neue Seite mit dem Titel Create launch template, welches Sie wie folgt ausfüllen:

  • Launch template Name and description:
    • Name: KN06_XXX_LaunchTemplate_2
    • Description: KN06_XXX_LaunchTemplate_2
  • Application and OS Image:
    • Amazon Linux 2023 AMI (AWS)
  • Instance type:
    • t2.micro
  • Key-pair name:
    • Don't include in launch template
  • Network settings:
    • Subnet Don't include in launch template
    • Security-Groups M346-XXX-Web-Access auswählen (wurde bereits früher erstellt)
  • Advanced Details (unter User data):
    • diesen Code eingeben (Copy/Paste). Achtung: Dies ist nicht derselbe Code wie im letzten Challenge!
  • Buttom Create launch template anklicken: (Template wird erstellt)
  • Buttom View launch template anklicken: (Kontrolle)

Schritt 2: Auto Scaling Group erstellen

Referenz: HIER geht's zur Anleitung Auto Scaling Group erstellen des letzten Challenges.

Wählen Sie links in der Navigation Bar unter Auto Scaling das Unterverzeichnis Auto Scaling Groups aus. Dann klicken Sie auf den orangen Buttom Create Auto Scaling group. Danach erscheint eine neue Seite mit dem Titel Choose launch template, welches Sie wie folgt ausfüllen:

  • Name:
    • Auto Scaling group name: KN06_XXX_AutoScalingGroup_2
    • Launch template: KN06_XXX_LaunchTemplate_2
    • VPC: M346-XXX-VPC
    • Availability Zones and subnets: beide Public-subnets
  • Load balancing:
    • No load balancer (da noch kein LB vorhanden ist)
  • VPC Lattice integration options
    • No VPC Lattice service
  • Group size:
    • Desired capacity auf 2
    • Minimum capacity auf 2
    • Maximum capacity auf 4
  • Scaling policies
    • None anklicken. Später werden wir hier allerdings noch eine sogenannte Target tracking scaling policy ergänzen.
  • Next bestätigen
  • Sobald die Auto Scaling Group erstellt ist, werden im Hintergrund die beiden Instanzen gemäss Launch Template gestartet.
    Instanz 1 Instanz 2
    Instanz1 Instanz2
  • Ergänzend wird noch die Instanz ID ausgegeben. Diese wird später benötigt, um zu überprüfen, ob die Scaling Policy funktioniert und on-demand weitere Instanzen startet, wenn der Grenzwert überschritten wurde.

Schritt 3: Target Group erstellen

Referenz: HIER geht's zur Anleitung Target Group erstellen des letzten Challenges.

Die Target Group bestimmt, welche EC2-Instanzen vom Loadbalancer bedient werden sollen.
Wählen Sie links in der Navigation Bar unter Load Balancing den Buttom Target Groups aus. Dann konfigurieren Sie die Target Group mit folgenden Parametern:

  • Target Groups: Buttom Create Target Group anklicken.
  • Specify group details:
    • Basic configuration:
      • Choose a target type: Instances auswählen.
      • Target group name: KN06-XXX-TargetGroup2 eingeben
      • Protocol: HTTP Port: 80.
      • IP address type: IPv4
      • VPC: M346-XXX-VPC (Früher eingerichtete VPC auswählen).
      • Protocol Version: HTTP1 (Defaultwert belassen).
    • Health checks:
      • Health check protocol HTTP (Defaultwert belassen).
      • Health check path / (LB sendet den Targets regelmässig Statusanfragen). ...nach unten scrollen bis der Buttom Next erscheint. Auf den Buttom Next klicken, um auf die nächste Seite zu gelangen.
    • Available Instances:
      • Beide Instanzen aktivieren 🔎 Originalbild (oder unten auf erstes Bild klicken).
      • Den Buttom Incluide as pending below anklicken.
    • Review Targets: Buttom Create target group anklicken 🔎 Originalbild (oder unten auf zweites Bild klicken).
      Available instances - aktivieren / "Include as pending below" Review targets: "Create target group"
      xxx xxx

Schritt 4: Load Balancer erstellen

Referenz: HIER geht's zur Anleitung Load Balancer erstellen des letzten Challenges.

Wählen Sie links in der Navigation Bar unter Load Balancing den Buttom Load Balancers aus. Dann konfigurieren Sie den Load Balancer mit folgenden Parametern:

  • Compare and select load balancer type:
    • Load balancer types: Application Load balancer
  • Create Application Load Balancer
    • Load balancer name:** KN06-XXX-ALB2
    • Scheme: Internet-facing
    • IP address type: IPv4
  • Network mapping
    • VPC: M346-XXX-VPC (früher erstellte VPC auswählen)
    • Mappings:
      • M346-XXX-Public-1A (erstes Public Subnet)
      • M346-XXX-Public-1B (zweites Public Subnet)
      • Security Groups: M346-XXX-Web-Access (früher erstellte Security Group auswählen - Inbound rule Port 80 muss offen sein)
    • Listeners and routing:
      • Protocol HTTP und Port 80 auswählen
      • Default action: Forward to: KN06-XXX-TargetGroup2 auswählen (wenn Anfragen auf Port 80 eintreffen, sollen diese an die vorher erstellte TargetGroup weitergeleitet werden).
    • Summary:
      • Basic configuration, Security groups, Network mappings und Listeners and routing checken (überprüfen, ob alles korrekt konfiguriert ist)
    • Buttom Create load balancer anklicken (Load Balancer wird erstellt)
    • Resultat: (Hinweis, dass das Setup ein paar Minuten dauern kann)

Schritt 5: Auto Scaling Group der Target Group des Load Balancers zuweisen

Referenz: HIER geht's zur Anleitung Auto Scaling Group der Target Group des Load Balancers zuweisen des letzten Challenges.

Wählen Sie links in der Navigation Bar unter Auto Scaling den Buttom Auto Scaling Groups aus. Dann klicken Sie auf die bereits existierende Auto Scaling Group KN06_XXX_AutoScalingGroup_2. Scrollen Sie runter bis Load balancing: und klicken Sie auf Edit.

  • Load balancing:
    • Load balancers: Application Load balancer
    • Select target groups: KN06-XXX-TargetGroup2
    • Buttom: Update

Schritt 6: Dynamic Scaling policy erzeugen und einbinden

Diesen Schritt haben Sie bisher noch nicht durchgeführt. Die Dynamic Scaling Policy automatisiert die Anpassung der Instanzen basierend auf einer vordefinierten Metrik.

In diesem Fall erstellen Sie folgende Metric:

  • Metric type Application Load Balancer request count per target
  • Target value 20.

Wenn die Metrik den Schwellenwerte 20 über- oder unterschreitet, wird die Anzahl der Serverinstanzen automatisch erhöht oder verringert, um die Leistung und Effizienz zu gewährleisten, ohne manuelle Eingriffe. Dies ermöglicht eine flexible und ressourceneffiziente Skalierung der Anwendung in der AWS-Cloud. Wichtig noch als Ergänzung: Instance Warmup ist mit 300 seconds definiert. Diesen Wert können Sie so lassen. Das ist die Zeitspanne, in der neue Instanzen starten und sich vorbereiten können, bevor sie in die Bereitstellung einbezogen werden. So kann man sicherstellen, dass die neu gestarteten Instanzen stabil und betriebsbereit sind, bevor sie den Verkehr von ihrem Application Load Balancer übernehmen. Es braucht also ein bisschen Geduld.