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).
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.
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).
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 <ihr-Schlüssel-ohne-zeilenumbrüche> 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)
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.