04.022016

Ansible und AWS

Nachdem wir letztes mal die Grundlagen von Ansible gelernt haben, wollen wir diesmal etwas weiter gehen. Anstelle von einer Reihe fest konfigurierter Server, generieren wir uns ein dynamisches Inventar aller Server, die mit einem AWS-Account verknüpft sind. So lassen sich insbesondere kleinere Aufgaben (apt-get clean usw) schnell auf einer Reihe von Servern ausführen.


Wir legen direkt los, indem wir eine nötige Abhängigkeit auf unserem Client installieren, der mittels Ansible auf die Server zugreifen soll.

Zunächst laden wir uns das folgende python Skript herunter ec2.py, welches das dynamische Inventar füllt. Dieses ersetzt nun die 'hosts' Datei aus dem ersten Tutorial.

Damit das Skript auch arbeiten kann werden noch die folgenden Dinge benötigt:

Installiert python-boto (die Python Schnittstelle zu AWS):

sudo apt-get install python-boto

Solltet ihr kein Ubuntu System nutzen, schaut einfach nach dem passenden Paket oder verwendet pip.

Ladet die Standard-Konfiguration herunter und passt diese gegebenenfalls an: ec2.ini . Die Datei sollte im selben Verzeichnis wie ec2.py liegen.

Setzt die eure Credentials. Für unsere experimente genügt es diese via export bekannt zu machen:

export AWS_ACCESS_KEY_ID='XXXXXXXXXXXXXXXXX'
export AWS_SECRET_ACCESS_KEY='XXXXXXXXXXXXXXXX'

Nun benötigt ihr noch euren privaten SSH-Key, mit dem die Verbindung zu eueren Server-Instanzen aufgebaut werden kann. Macht diesen Beispielsweise via ssh-agent bekannt:

ssh-add ~/.ssh/id_aws

Als ersten test könnt ihr nun das ec2.py-Script manuell testen:

python ec2.py --list

Ihr solltet nun eine sehr ausführliche Liste an Server-Instanzen erhalten.

Sollte die Liste passen, so könnt ihr versuchen mit Ansible direkt eine Abfrage zu starten:

ansible -i ec2.py -u [USER_NAME] [INSTANZ/GRUPPE] -m ping

Setzt [USER_NAME] auf den Standard-Login der Instanzen, die ihr ansprechen möchtet. Bei mir ist das 'ubuntu'. [INSTANZ/GRUPPE] ist hierbei besonders interessant, da das Script sehr viele Servergruppen generiert. So könnt ihr beispielsweise mit 'type_t2_medium' auf allen t2.medium Instanzen einen Befehl ausführen. Ebenso könnt ihr nach Tags, Security-Groups oder Opsworks-Tags gehen.

Weitere Informationen findet ihr natürlich auch auf der Seite der Entwickler von Ansible.

Nachdem wir nun wissen, wie ein dynamisches Inventar für Opsworks und EC2-Instanzen eingerichtet werden kann, geht es im nächsten Tutorial darum, playbooks zu schreiben, um wiederkehrende Aufgaben effizient zu lösen.

Bis dahin bleibt mir nur euch viel Spaß beim Ausprobieren zu wünschen!