verwenden Sie FÜR den folgenden Challenge (bestehend aus zwei Labs) das AWS Academy *"**Learner Lab**"*. Ab jetzt arbeiten Sie **immer** im **Learner Lab** - **Ausser explizit anders angegeben.**
- Der erste Teil-Challenge heisst **EC2 Einstieg**. Dieses Lab ist der erste Kompetenznachweis dieses Challenges (Details unten)
- Das zweite Teil-Challenge heisst **S3 Einstieg**. Dieses Lab ist der zweite Kompetenznachweis dieses Challenges (Details unten).
Führen Sie alle Tasks durch. Sie erstellen die Screenshots der verschiedenen Bereiche für Ihre Abgabe **nachdem** Sie **alle** Schritte des Challenges durchgeführt haben.
- Tags helfen Ihnen, Ihre AWS-Ressourcen auf verschiedene Weise zu kategorisieren, z. B. nach Zweck, Eigentümer oder Umgebung.
- Dies ist besonders nützlich, wenn Sie viele Ressourcen desselben Typs haben, da Sie eine bestimmte Ressource schnell anhand der vergebenen Tags identifizieren können.
- In der Liste der verfügbaren **Quick Start AMIs** bleibt die standardmäßig ausgewählte **Amazon Linux AMI** ausgewählt.
- Behalten Sie ebenfalls das standardmäßig ausgewählte **Amazon Linux 2023 AMI x86_64 (HVM)** bei.
- Der Typ des ausgewählten **Amazon Machine Image (AMI)** bestimmt das Betriebssystem (OS), das auf der gestarteten EC2-Instanz läuft. In diesem Fall haben Sie **Amazon Linux 2023** als Gastbetriebssystem ausgewählt.
- Im **Instance type**-Panel bleibt die standardmäßig ausgewählte **t2.micro**-Instanz ausgewählt.
- Der **Instance Type** definiert die Hardware-Ressourcen, die der Instanz zugewiesen werden. Dieser Instanztyp verfügt über **1 virtuelle CPU** (vCPU) und **1 GiB Speicher**.
- Wählen Sie im Menü **Key pair name** das Schlüsselpaar **vockey** aus.
- Das ausgewählte Schlüsselpaar **vockey** ermöglicht es Ihnen, nach dem Start der Instanz über SSH eine Verbindung herzustellen. Obwohl Sie dies in diesem Lab nicht tun müssen, ist es erforderlich, ein vorhandenes Schlüsselpaar zu identifizieren oder ein neues zu erstellen, wenn Sie eine Instanz starten.
- Behalten Sie die Standard-VPC- und Subnetz-Einstellungen bei. Lassen Sie die Einstellung **Auto-assign public IP** auf **Enable**.
- Das **Netzwerk** gibt die Virtual Private Cloud (VPC) an, in die Sie die Instanz starten möchten. Sie können mehrere Netzwerke haben, z. B. eines für die Entwicklung, ein zweites für das Testen und ein drittes für die Produktion.
- Eine **Security Group** fungiert als virtuelle Firewall, die den Datenverkehr für eine oder mehrere Instanzen steuert. Beim Start einer Instanz können Sie eine oder mehrere **Security Groups** mit der Instanz verknüpfen. Sie fügen jeder **Security Group** Regeln hinzu, die den Datenverkehr zu oder von den zugehörigen Instanzen zulassen. Sie können die Regeln einer **Security Group** jederzeit ändern. Neue Regeln werden automatisch auf alle mit der **Security Group** verknüpften Instanzen angewendet.
- Sie werden die Amazon EC2-Instanz mit einem standardmäßigen **Elastic Block Store (EBS)**-Datenträger starten. Dieser wird Ihr **Root-Volume** (auch als Boot-Volume bekannt) sein, auf dem das zuvor angegebene **Amazon Linux 2023**-Gastbetriebssystem gehostet wird.
- Es wird auf einer **General Purpose SSD (gp2)**-Festplatte mit einer Größe von **8 GiB** laufen.
Führen Sie alle Schritte durch. Sie erstellen die Screenshots der verschiedenen Bereiche für Ihre Abgabe **nachdem** Sie **alle** Schritte des Challenges durchgeführt haben.
Wechseln Sie nun den Kurs und verwenden Sie *"**Learner Lab**"*. Ab jetzt arbeiten Sie **immer** im **Learner Lab** - **Ausser explizit anders angegeben.**
Unter [Quellen](./KN02.md#quellen) finden Sie ein Dokument, welches die Unterschiede zwischen Passwort und SSH-Key beschreibt. Lesen Sie sich **kurz** ein, wenn Sie möchten. Wir werden grundsätzlich **kein Passwort** verwenden, sondern **immer** SSH Keys.
Sie werden nun gemäss der folgenden Anleitung eine EC2-Instanz und **zwei** Keypairs erstellen. Danach weisen Sie dieser EC2-Instanz einen der beiden Key pair Namen zu. Sobald die Instanz verfügbar ist, überprüfen Sie, ob Sie sich mit beiden Keys darauf einloggen können.
#### Anleitung:
Erstellen Sie nun eine neue **Ubuntu**-Instanz in AWS mit den Standard-Einstellungen und erstellen Sie dann **zwei Key pairs** wie folgt:
- Ubuntu Server 22.04 AMI (Amazon Machine Image) auswählen.
- Achten auf **Free tier eligible**.
Auswahl AMI (Amazon Machine Image), **Free tier eligible** |
:-------------------------:|
![keypair1](./x_res/02_os_800.png) |
- Bei "Key pair" erstellen Sie **zwei** Key-Value Pairs! Geben Sie Namen wie **\<Ihr-Name\>-1** und &**\<Ihr-Name\>-2**.
- Stellen Sie sicher, dass Sie **beide Schlüssel** herunterladen.
- Nachdem beide Keys erstellt wurden, wählen Sie bei "Key pair" dann den **ersten** Key aus. Belassen sie die restlichen Parameter so wie sie bereits eingestellt sind. Scrollen Sie bis ganz nach unten und klicken Sie auf **Launch instance**.
Speicherort der privaten (und öffentlichen) Schlüssel muss ein Pfad sein, der eingeschränkte Rechte hat (nur Ihr persönlicher Account). Normalerweise wird der Pfad `C:\Users\<ihrBenutzer>\.ssh` verwendet.
Der Befehl für den Zugriff sieht nun folgendermassen aus. Der Parameter -o verhindert, dass Sie ein Timeout kriegen.
Zeigen Sie, dass sie sich **nur** mit **dem ausgewählten** Schlüssel einloggen können.
**Hinweis**: AWS speichert ihren privaten Schlüssel **nicht**. Sie können den nicht wiederherstellen. Auf dem Ubuntu-Server liegt immer nur der öffentliche Schlüssel. Seien Sie also vorsichtig und verlieren Sie den Schlüssel nicht.
#### Ziel der Übung
:bell: Sie verstehen, wie Key pairs erstellt und angewendet werden. Einer wird nicht funktionieren. Überlegen Sie sich, weshalb das so ist und wie die Authentifizierung durchgeführt wird. Wo werden die Keys (Private / Public) abgelegt?
##### Leistungsnachweis
- [ ] Screenshot mit dem ssh-Befehl und des Resultats unter Verwendung des **ersten** Schlüssels.
- [ ] Screenshot mit dem ssh-Befehl und des Resultats unter Verwendung des **zweiten** Schlüssels.
- [ ] Screenshot der Instanz-Detail (oder Liste), so dass der verwendete Schlüssel sichtbar ist.
- [ ] Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
- [ ] Fachgespräch mit Coach.
Beachten Sie ausserdem die [allgemeinen Informationen zu den Abgaben](../Abgaben.md).
<br>
----
### C) Installation von Web- und Datenbankserver
#### Ausgangslage:
Via SSH auf EC2-Instanz zugreifen und sämtliche Kommandos für das Setup des Webservers mit DB-Zugriff **manuell** (imperativ) der Reihe nach ausführen.
Verwenden Sie die Instanz aus Aufgabe B) und gehen Sie wie folgt vor:
- Stellen Sie sicher, dass die dazu notwendigen Ports in der ausgewählten Security-Group offen sind:
- 22 für SSH Zugriff (sollte bereits vorhanden sein)
- 80 für HTTP Zugriff (dazu müssen sie in der ausgewählten Security Group noch eine Inbound rule erstellen - gleich wie beim ersten Lab, siehe Bild unten)
Inbound rule für HTTP hinzufügen |
:-------------------------:|
![keypair1](./x_res/02_sg_http_800.png) |
#### SSH-Verbindung aufbauen
- Bauen Sie von Ihrem Laptop aus eine SSH-Verbindung auf Ihre EC2-Instanz auf (via Terminalfenster auf ihrem Laptop mit SSH auf die EC2-Instanz zugreifen). Kommandos auf Ihrer EC2-Instanz der letzten Übung auszuführen:
**1.** Connect to instance | **2.** SSH Client auswählen
- Führen Sie wie folgt sämtliche Kommandos für das Setup des Webservers mit DB-Zugriff **manuell** (imperativ) der Reihe nach aus.
-`sudo apt update` auf. Dieser Befehl aktualisiert die Pakete/Software.
-`sudo apt install apache2`. Dieser Befehl installiert den Apache Webserver.
-`sudo apt install php`. Dieser Befehl installiert den PHP Applikationsserver.
-`sudo apt install libapache2-mod-php`. Dieser Befehl installiert die PHP-Erweiterung für Apache.
-`sudo apt install php-mysqli`. Dieser Befehlt installiert das PHP-Modul, um Datenbank-Abfragen zu erstellen.
-`sudo apt install mariadb-server`. Dieser Befehl installiert den Datenbankserver.
-`sudo mysql -sfu root -e "GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;"`.
-`sudo systemctl restart mariadb.service`. Dieser Befehl startet den DB Server neu.
-`sudo systemctl status mariadb.service`. Dieser Befehl checkt, ob der DB Server läuft. Falls Anzeige grün **active (running)**, dann ok.
-`sudo systemctl restart apache2`. Dieser Befehl startet den Webserver neu.
-`sudo systemctl status apache2`. Dieser Befehl checkt, ob der Webserver läuft. Falls Anzeige grün **active (running)**, dann ok.
-`cd ~`. Dieser Befehl stellt sicher, dass Sie sich in ihrem Home-Verzeichnis befinden
-`git clone https://gitlab.com/ser-cal/m346-scripts.git`. Diesen Befehl sollten Sie bereits beherrschen.
-`sudo cp ./m346-scripts/KN01/*.php /var/www/html/`. Dieser Befehl kopiert die beiden PHP-Dateien in das Verzeichnis des Webservers.
- Rufen Sie von ihrem Rechner nun die folgenden Seiten auf:
- *http://[Ihre-IP]/index.html*. Diese URL zeigt ihnen die Informationen von Apache an. Wenn die Seite funktioniert, zeigt dies, dass Apache installiert wurde und funktioniert.
- *http://[Ihre-IP]/info.php*. Diese URL zeigt ihnen die Informationen von PHP an. Wenn diese Seite funktioniert, zeigt dies, dass das PHP-Modul funktioniert und Sie nun dynamische Seiten hosten können.
- *http://[Ihre-IP]/db.php*. Diese URL zeigt ihnen die Datenbank-Benutzer. Wenn diese Seite funktioniert, zeigt es Ihnen, dass die Datenbank-Verbindung funktioniert.
#### Ziel der Übung
:bell: **Verständnisaufbau** für den Unterschied zwischen **imperativer** und **deklarativer** Plattformentwicklung.
Bei dieser Übung setzen Sie auf einer bestehenden EC2-Instanz einen Webserver mit Datenbankanbindug auf. Sie installieren dazu **imperativ** (Eingabe einzelner Kommandos per Tastatur) folgende Software:
- Apache Webserver
- PHP und PHP-Erweiterung für Apache
- PHP-Modul für Datenbankabfragen
- Datenbankserver (MariaDB)<br>
...des weiteren: <br>
- erstellen Sie einen DB-Benutzer (inkl. Passwort)
- restarten anschliessend den DB-Server
- ...und den den Webserver
Alle Commands schön der Reihe nach, sonst gibt es Probleme. Falls Sie **100** weitere Instanzen so aufsetzen müssten, würden Sie sämtliche Schritte 100x wiederholen :grimacing:. Gut also, dass das **imperative** Vorgehen vom **deklarativen** Vorgehen - auch **IaC** (Infrastructure as Code) genannt - abgelöst wird. Wie das geht, erfahren Sie schon bald :smiley:.
##### Leistungsnachweis
- [ ] Erstellen Sie Screenshots der **drei** Webseiten (mit sichtbaren URLs).
- [ ] Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
- [ ] Fachgespräch mit Coach.
Beachten Sie ausserdem die [allgemeinen Informationen zu den Abgaben](../Abgaben.md).