[10]: https://git-scm.com/downloads
![TBZ Banner](../x_gitres/tbz_logo.png)
# KN03 Inhaltsverzeichnis
[TOC]
## Intro
Beachten Sie die [allgemeinen Informationen zu den Abgaben](../Abgaben.md).
Wir nutzen **Amazon Web Services** oder abgekürt **AWS**. Alles was wir hier umsetzen, bieten allerdings auch andere public cloud Anbieter (z.B. Microsoft Azure, Google Cloud Platform oder Linode).
## Challenges
### A) Cloud-init Datei verstehen
#### Ausgangslage:
In den vorangegangenen Challenges haben sie vorwiegend mit der imperativen Methode gearbeitet. Jetzt beginnen Sie, sich mit der deklarativen Methode auseinanderzusetzen. Der erste Challenge ist relativ einfach. Sie analysieren ein bereits vorhandenes .yaml-File und setzen sich mit den einzelnen Zeilen/Kommandos auseinander.
#### Anleitung:
Die wichtigsten Informationen zu Cloud-init und YAML [finden Sie in der Theorie](../InfrastructureAsCode.md).
Laden Sie diese [cloud-init Datei](./cloud-init.yaml) herunter. Erklären Sie **alle** Zeilen der Cloud-init Datei in folgendem Schema. **Achtung**: Viele Werte sind nicht definiert von cloud-init, sondern von Linux/Ubuntu. z.B. *sudo: <sudo-Regeln>*. Die Sudo-Regeln sind definiert in Linux (sudoers-file).
```yaml
#cloud-config
users: # ....
- name: ubuntu # Benutzername
sudo: ALL=(ALL) NOPASSWD:ALL # sudo-Regeln für diesen Benutzer
#...
#...
```
#### Ziel der Übung
:bell: Sie verstehen die Befehlsstruktur von **Cloud-init**-files und können diese interpretieren und dokumentieren.
##### Leistungsnachweis
- [ ] Im Cloud-init Script sind sämtliche Zeilen dokumentiert.
- [ ] Sie verstehen die Befehle im Cloud-init Script.
- [ ] Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
- [ ] Fachgespräch mit Coach.
Beachten Sie ausserdem die [allgemeinen Informationen zu den Abgaben](../Abgaben.md).
----
### B) SSH-Key und Cloud-init (Beginner)
#### Ausgangslage:
Sie wissen bereits, wie man auf AWS ein SSH Keypair erstellt und können sich mit diesem Key per SSH mit einer Instanz in der Cloud verbindet. Dieser Challenge geht nun etwas tiefer. Weil das Keypair von AWS und nicht von Ihnen erzeugt wurde, fehlt ihnen noch der Public-Key zu Ihrem bereits bei sich abgelegten Private Key (file.pem). Mit puttygen können Sie jederzeit den zugehörigen Public Key erzeugen. Diesen können Sie dann auf jeder beliebigen Instanz in der Cloud ablegen, um schnell darauf zuzugreifen.
#### Anleitung
Anstatt, dass Sie den SSH-Key im GUI auswählen, können Sie ihn auch im Cloud-Init mitgeben. Dies werden wir folgend tun. Installieren Sie **puttygen**, falls Sie es noch nicht haben (unter Quellen finden Sie den Link). Extrahieren Sie den öffentlichen Schlüssel (für beide Keys) wie folgt.
![puttykeygen](./x_res/puttykeygen.png)
Erstellen Sie eine neue Instanz in AWS mit den folgenden Einstellungen:
- Ubuntu 22.04
- Bei "Key pair" verwenden Sie ihren **zweiten** Schlüssel.
- Keine Änderungen bei den restlichen Einstellungen.
- aber: verwenden Sie die [cloud-init Datei](cloud-init.yaml) und ersetzen Sie den Schlüssel mit ihrem **ersten** öffentlich Schlüssel. Beachten Sie das Format `ssh-rsa aws-key`
![Schema](./x_res/04_public-key_800.png)
- Sie können ihre Cloud-init Konfiguration einfach in dem Feld "*user data*" in der Sektion "*Advanced details*" reinkopieren.
**Hinweis**: In KN02 haben Sie sich per SSH mit der laufenden EC2-Instanz verbunden und dann sämtliche Installationsschritte per Hand (imperativ) ausgeführt. Wenn Sie nun aber ihre YAML-Datei in das Feld kopieren, wird AWS sämtliche Schritte automatisch durchführen und alles ohne Handeingabe installieren.
**Hinweis**: Stellen Sie sicher, dass die Zeile `#cloud-config` auch tatsächlich in der YAML-Datei steht, sonst wird der Inhalt nicht korrekt ausgeführt.
Sie haben nun aber ihren Public-Key zwei mal verwendet (einmal beim Feld "Key Pair" in der Management Console und einmal im Cloud-init Script).
Ein Schlüssel wird demzufolge vom anderen Schlüssel überschrieben. Welcher von welchem?
Die beiden unten Bilder verdeutlichen nochmals, dass der Public-Key aus dem Cloud-init Script übernommen wurde (links das Cloud-init Script und rechts das authorized_keys File von der EC2-Instanz).
Denken Sie nochmals an den Ablauf beim Erstellen der EC2-Instanz. Was wurde **wann** eingetragen? **Was ist genau passiert?**
Cloud-init Script | Eintrag in AWS EC2-Instanz (authorized_keys)
:-------------------------:|:-------------------------:
![keypair1](./x_res/05_cloud-init_600.png) | ![keypair2](./x_res/06_cloud-init_600.png)
Zeigen Sie nun, dass Sie **nur mit dem Key aus der Cloud-Init Datei** einloggen können.
Rufen Sie nun das cloud-init-log (`/var/log/cloud-init-output.log`) auf und merken Sie sich den Pfad **/var/log/** für zukünftige Aufträge für die Fehlerfindung.
#### Ziel der Übung
:bell: **Verständnisaufbau** für xxx
...des weiteren:
- erstellen Sie einen DB-Benutzer (inkl. Passwort)
-
##### Leistungsnachweis
- [ ] xx
- [ ] Ihre angepasste Cloud-init Konfiguration als **Datei** im Git-Repository.
- [ ] Ein Screenshot der Details oder Liste der Instanz, welcher den **verwendeten** Key zeigt.
- [ ] 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 mit dem Auszug aus dem Cloud-Init-Log.
- [ ] Technisch nachvollziehbare Erklärung, weshalb nur einer der beiden Keys funktioniert.
- [ ] Differenziert und nachvollziehbar im persönlichen Repository dokumentiert.
- [ ] Fachgespräch mit Coach.
Beachten Sie ausserdem die [allgemeinen Informationen zu den Abgaben](../Abgaben.md).
----
### C) Template (Beginner)
#### Ausgangslage:
Sie wissen bere
---
### Quellen
- xx
---
> [⇧ **Zurück zu KN03**](./README.md)
---
> [⇧ **Zurück zur Hauptseite**](https://gitlab.com/ser-cal/M346)
---