In diesem Abschnitt werden wir lernen, wie man AWS-Ressourcen lokal bereitstellt. Wir werden die Ansible AWS Collection verwenden, um die AWS-Ressourcen bereitzustellen. Wir werden die folgenden AWS-Ressourcen erstellen:
Voraussetzungen
Um AWS-Ressourcen bereitzustellen, benötigen wir ein AWS-Konto. Wenn Sie noch kein AWS-Konto haben, besuchen Sie bitte die offizielle AWS Website und erstellen Sie ein Konto. Wenn Sie wie ich auch Ubuntu WSL verwenden, müssen wir einige Pakete installieren. Bevor wir die AWS CLI installieren können, müssen wir in der Lage sein, die heruntergeladene Datei zu extrahieren oder zu entpacken. Lassen Sie uns also das unzip-Paket installieren. Um das unzip-Paket zu installieren, führen Sie den folgenden Befehl aus:
Danach können wir die AWS CLI herunterladen und installieren. Um die AWS CLI herunterzuladen, führen Sie den folgenden Befehl aus:
And then, we can verify the installation by running the following command:
Nachdem wir die AWS CLI installiert haben, müssen wir sie mit unserem AWS-Konto konfigurieren. Um die AWS CLI zu konfigurieren, führen Sie den folgenden Befehl aus:
Dort werden Sie aufgefordert, die AWS Access Key ID, den AWS Secret Access Key, den Default-Regionsnamen und das Default-Ausgabeformat einzugeben. Sie können die AWS Access Key ID und den AWS Secret Access Key aus dem AWS-Konto erhalten. Sie können den Default-Regionsnamen auf die Region setzen, in der Sie die AWS-Ressourcen bereitstellen möchten. Sie können das Default-Ausgabeformat auf json setzen.
Nach der Konfiguration der AWS CLI müssen wir Ansible auf unserem Rechner installieren. Wir können Ansible auf Ubuntu mit folgendem Befehl installieren:
Ansible verwendet Python3, um seine Tasks auszuführen. Beachten Sie also, dass Python3 ebenfalls installiert wird.
Wir können die Installation mit folgendem Befehl überprüfen:
Die amazon.aws
-Collection ist bereits enthalten, wenn Sie sie mit apt
installiert haben. Wir müssen sie also nicht separat installieren. Wir können das mit folgendem Befehl überprüfen:
Falls sie noch nicht installiert ist, können wir sie mit folgendem Befehl installieren:
Bereitstellung von AWS-Ressourcen
Nachdem wir unsere Voraussetzungen erfüllt haben, können wir uns nun dem Prozess der Bereitstellung von AWS-Ressourcen mit Ansible und der AWS Collection widmen.
Schreiben von Ansible Playbooks
Ansible Playbooks stehen im Mittelpunkt der Automatisierung mit Ansible. Sie ermöglichen es Ihnen, den gewünschten Zustand Ihrer Infrastruktur zu definieren und Ansibles deklarative Sprache zu verwenden, um zu beschreiben, was getan werden soll. In unserem Fall erstellen wir ein Playbook, um die zuvor erwähnten AWS-Ressourcen bereitzustellen.
Erstellen Sie eine neue Datei, nennen wir sie provision.yml
, und beginnen wir mit der Angabe der grundlegenden Struktur eines Ansible Playbooks:
In diesem Playbook haben wir es “Provision AWS Resources” genannt, festgelegt, dass wir den localhost als Host verwenden, und das Sammeln von Fakten deaktiviert, da wir es für dieses Beispiel nicht benötigen. Wir verwenden den localhost als Host, weil Ansible die AWS CLI verwenden wird, die wir zuvor installiert und konfiguriert haben.
Erstellen des VPC
Beginnen wir mit der Erstellung des Virtual Private Cloud (VPC):
In dieser Task verwenden wir das ec2_vpc_net Modul, um ein VPC zu erstellen. Wir geben den Namen des VPC, den CIDR-Block, die Region und die Tags an. Wir registrieren auch die Ausgabe der Task in der Variable vpc_net. So können wir die VPC-ID aus der vpc_net Variable entnehmen und in der nächsten Task verwenden.
Erstellen des Subnets
Fügen wir nun die Task zum Erstellen eines Subnets hinzu:
In dieser Task verwenden wir das ec2_vpc_subnet Modul, um ein Subnet zu erstellen. Wir geben die VPC-ID, den CIDR-Block und die Tags an. Wir registrieren auch die Ausgabe der Task in der Variable etcd_subnet. So können wir die Subnet-ID aus der etcd_subnet Variable entnehmen und in der nächsten Task verwenden.
Erstellen des Internet Gateways
Als Nächstes fügen wir die Task zum Erstellen eines Internet Gateways hinzu, damit die EC2-Instanz auf das Internet zugreifen und vom Internet aus erreichbar sein kann:
In dieser Task verwenden wir das ec2_vpc_igw Modul, um ein Internet Gateway zu erstellen. Wir geben die VPC-ID und die Tags an. Wir registrieren auch die Ausgabe der Task in der Variable etcd_igw. So können wir die Internet Gateway-ID aus der etcd_igw Variable entnehmen und in der nächsten Task verwenden.
Erstellen der Route Table
Nun fügen wir die Task zum Erstellen einer Route Table hinzu:
In dieser Task verwenden wir das ec2_vpc_route_table Modul, um eine Route Table zu erstellen. Wir geben die VPC-ID, die Tags, die Subnet-ID und die Internet Gateway-ID an, damit die Route Table mit dem Internet Gateway verknüpft wird.
Erstellen der Security Group
Als Nächstes fügen wir die Task zum Erstellen einer Security Group hinzu:
In dieser Task verwenden wir das ec2_group Modul, um eine Security Group zu erstellen. Wir geben den Namen der Security Group, die Beschreibung, die VPC-ID, die Region, die Regeln und die Tags an. Wir erlauben den etcd-Client-Port (2379) und den etcd-Peer-Port (2380) aus dem CIDR-Block des VPC, damit der etcd-Cluster miteinander kommunizieren kann. Wir erlauben auch den SSH-Port (22) von jeder IP-Adresse aus, damit wir uns per SSH in die EC2-Instanz einloggen können. Die Ausgabe der Task wird in der Variable etcd_sg registriert. So können wir die Security Group ID aus der etcd_sg Variable entnehmen und in der nächsten Task verwenden.
Erstellen des EC2 Key Pairs
Nun fügen wir die Task zum Erstellen eines EC2 Key Pairs hinzu:
Wir verwenden das ec2_key Modul, um ein EC2 Key Pair zu erstellen. Wir geben den Namen des Key Pairs, den öffentlichen Schlüssel und die Tags an. Beachten Sie, dass wir lokal ein Key Pair erstellen müssen (z.B. mit ssh-keygen) und dann den öffentlichen Schlüssel im key_material Parameter verwenden. Die Ausgabe der Task wird in der Variable key_pair registriert. So können wir die Key Pair ID aus der key_pair Variable entnehmen und in der nächsten Task verwenden.
Starten der EC2-Instanz
Schließlich fügen wir die Task zum Erstellen einer EC2-Instanz hinzu:
In dieser Task verwenden wir das ec2_instance Modul, um eine EC2-Instanz zu erstellen. Wir geben den Instanztyp, die Image-ID, die Anzahl, die Region, das Netzwerk, die Security Group, die Subnet-ID, den Key Pair Namen und die Tags an.
Ausführen des Playbooks
Nachdem wir unser Playbook geschrieben haben, können wir es mit folgendem Befehl ausführen:
Wenn alles gut läuft, sollten Sie folgende Ausgabe sehen:
Sie können auch überprüfen, ob die AWS-Ressourcen erstellt wurden, indem Sie sich in die AWS-Konsole einloggen.
Zusammenfassung
Herzlichen Glückwunsch! Sie haben nun gelernt, wie man verschiedene AWS-Ressourcen mit Ansible und der AWS Collection bereitstellt. Mit diesem Playbook als Ausgangspunkt können Sie es erweitern und an Ihren spezifischen Anwendungsfall anpassen. Die Automatisierung durch Ansible ermöglicht es Ihnen, Ihre Infrastruktur einfach zu replizieren und dabei Konsistenz und Zuverlässigkeit zu gewährleisten.
In diesem Blogbeitrag haben wir die Grundlagen der Bereitstellung von AWS-Ressourcen mit Ansible und der AWS Collection behandelt. Wir haben die Voraussetzungen besprochen, Ansible-Tasks zum Erstellen von VPCs, Subnets, Internet Gateways, Route Tables, Security Groups, EC2 Key Pairs geschrieben und EC2-Instanzen gestartet. Durch die Kombination der Automatisierungskraft von Ansible mit der robusten Infrastruktur von AWS sind Sie nun gut gerüstet, um Ressourcen in der Cloud effizient zu verwalten und bereitzustellen.
Bleiben Sie dran für den nächsten Blogbeitrag in dieser Serie, in dem wir tiefer in Ansible und die AWS Collection eintauchen werden. Wenn Sie bei einer der Tasks genau aufgepasst haben, haben Sie vielleicht bemerkt, was wir als Nächstes behandeln werden! (Es ist die Security Group Task :P)
Farouq Abdurrahman ist Praktikant bei der Proventa AG und studiert Informatik. Sein Schwerpunkt liegt auf Cloud Computing. Er hat großes Interesse an der Digitalen Transformation und Cloud Computing. Aktuell beschäftigt er sich mit PostgreSQL Datenbanken in der Cloud.