Ziele
- Erfülle die Aufgaben
- Zeige deinem Mentor in einer Live-Demo was du umgesetzt hast.
- Wenn du Aufgabe 4 betrachtest: Gibt es andere Wege die Daten aus dem S3 Bucket auf die Instanzen zu bekommen? Welche Nachteile hat die vorgestellte Methode? Was passiert z.B. wenn die Daten im S3 Bucket aktualisiert werden?
- Was wäre ein besserer Weg Nginx auf den Instanzen verfügbar zu haben als diesen jedes mal beim starten zu installieren?
Aufgaben
Für diese Aufgaben baust du auf deinem Modul aus 415 auf.
Erstelle auch wieder für die einzelnen Aufgaben jeweils einen Merge Request.
Note
Die Beispiele hier dienen nicht unbedingt einem praxisrelevantem Setup, sondern sind dazu da, damit du einige Features verwenden kannst und einige der Probleme siehst, die beim Erstellen von Setups mit ASG auftreten können.
-
Ersetze deine "statisch" erstellten EC2 Instanzen durch eine Autoscaling Group. Auch hier soll die Amazon Linux 2 AMI verwendet werden und die zuvor erstellte Role assigned werden. Die Autoscaling Group soll spot instances verwenden. Die
ec2_instances
variable wird obsolet und durchasg_min
,asg_max
,asg_desired
undasg_instance_types
(list) parameter ersetzt. Dieasg_instance_types
list soll daraufhin geprüft werden, dass nur validet3
undt3a
Instanztypen erlaubt werden. -
Erstelle dir ein public Github Repository mit Ansible Code. Das Repository soll ein Playbook enthalten, dass Nginx installiert. Das Playbook soll via cloudinit Show archive.org snapshot angewendet werden.
-
Füge einen ALB zu deinem Modul hinzu. Erstelle eine Targetgroup, die den Traffic auf Port 80 zu deinen EC2 Instanzen forwarded. Die Targetgroup soll an deinem ALB verwendet werden. Konfiguriere die Security Groups so, dass der Traffic funktioniert. Du solltest nun deinen Nginx über den ALB erreichen können.
-
Erweitere dein Ansible Playbook so, dass beim ausführen Dateien aus deinem S3 Bucket in das Webroot von deinem Nginx default vhost kopiert werden. Der Name des S3 Buckets darf natürlich nicht direkt im Ansible Code vermerkt sein, sondern muss beim Aufruf übergeben werden. Wenn es in dem S3 Bucket noch keine
index.html
gibt, soll Ansible diese erstellen. -
Füge eine RDS Instanz mit
PostgreSQL
hinzu. Konfiguriere die Security Groups so, dass von deinen EC2 Instanzen in der ASG darauf zugegriffen werden kann. Teste die Verbindung manuell. -
Entferne die
asg_instance_types
und ersetze sie durch eine variable, die einobject
zur Beschreibung von Instanzen enthält, die anschließend automatisch ausgewählt werden sollen. Das Objekt soll folgende Felder enthalten:-
vcpu_count
: Objekt mit einemmin
undmax
key für die Anzahl der CPUs der Instanz. -
memory_mib
: Objekt mitmin
undmax
key für den Speicher der VM in Megabyte. -
excluded_instance_types
: List aus allen Instanzen, die bei der Auswahl nicht verwendet werden sollen.
Verwende das Instance Requirements Show archive.org snapshot Feature vom Lauch Template um die Instanzen auszuwählen. Es müssen weiterhin Spot Instances in der ASG verwendet werden.
Tipp: Wenn du Probleme hast das umzusetzen, versuche dir das ganze mal in der AWS Console (UI) anzusehen. Das gibt dir vielleicht einen wertvollen Hinweis. -