Wie man virtuelle Maschinen mit dem Ansible EC2 AWS-Modul verwaltet

Wenn Sie vorhandene Amazon Web Service (AWS) EC2-Instanzen verwalten, funktioniert das Klicken in der Managementkonsole gut. Aber wenn Ihre Infrastruktur wächst, dauert die Verwaltung der Instanzen viel Zeit und wird komplex. Gibt es eine bessere Möglichkeit, Instanzen zu verwalten? Ja! Das AWS Ansible EC2-Modul kann helfen.

In diesem Tutorial lernen Sie, wie das Ansible AWS EC2-Modul Ihnen einen leistungsstarken Griff gibt, um AWS EC2-Instanzen in einem beispielgesteuerten Ansatz zu verwalten.

Lesen Sie weiter und legen Sie los!

Voraussetzungen

Dieses Tutorial besteht aus schrittweisen Anweisungen. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie folgendes haben:

  • Einen Ansible-Controller-Host – Dieses Tutorial verwendet Ansible v2.11.7 auf einem Ubuntu 20.04.3 LTS-Rechner.
  • A remote Linux computer to test out the amazon.aws.ec2_instance Ansible module. This tutorial uses Ubuntu 20.04.3 LTS as the remote node.
  • Einen AWS-Account.
  • Ein AWS IAM-Benutzer, ein Zugriffsschlüssel-ID und ein geheimer Schlüssel, die auf Ihrem lokalen Rechner eingerichtet sind, um EC2-Instanzen zu erstellen und zu verwalten. In diesem Tutorial wird ein IAM-Benutzer mit dem Namen ec2user verwendet.

Stellen Sie sicher, dass der IAM-Benutzer für programmatischen Zugriff eingerichtet ist und weisen Sie ihm die vorhandene Richtlinie AmazonEC2FullAccess zu.

  • Eine Inventardatei und ein oder mehrere Hosts sind konfiguriert, um Ansible-Befehle und Playbooks auszuführen. Der entfernte Linux-Computer wird als myserver bezeichnet, und dieses Tutorial verwendet eine Inventargruppe namens web.
  • Python v3.6 oder höher ist auf Ihrem Ansible-Controller-Host und der Remote-Node-Maschine installiert. In diesem Tutorial wird Python v3.8.10 auf einer Ubuntu-Maschine verwendet.
  • Python-Module boto3 größer als 1.15.0 und botocore größer als 1.18.0 sollten auf dem Ansible-Controller-Host und der Remote-Node-Maschine installiert sein.

Erstellen oder Neustarten einer EC2-Instanz mit Ad-hoc-Befehlen

Wenn Sie planen, eine einzelne EC2-Instanz in einem AWS-Konto zu erstellen oder neu zu starten, reichen Ad-hoc-Befehle aus. Ad-hoc-Befehle sind eine schnelle und effiziente Möglichkeit, einen einzelnen Befehl auszuführen, um eine EC2-Instanz zu erstellen oder den Instanztyp einer AWS EC2-Instanz zu ändern.

Melden Sie sich auf Ihrem Ansible-Controller an und führen Sie den unten stehenden ansible-Befehl aus, um sich (-m amazon.aws.ec2_instance) mit dem Host (web) zu verbinden.

Der Befehl übergibt ein Argument (-a), das Ansible mitteilt, die AWS EC2-Instanz mit instance_tags=Name=Tag1 im us-east-2-Bereich neu zu starten. Um die Verbindung mit dem AWS-Konto zu authentifizieren, fügen Sie im Ad-hoc-Befehl Details zu aws_access_key und aws_secret_key hinzu.

Das Tutorial führt alle Aktionen in der Region us-east-2 durch, aber Sie können dieselben Aktionen in jeder AWS-Region Ihrer Wahl ausführen.

ansible web -m amazon.aws.ec2 -a " state=restarted instance_tags=Name=Tag1 aws_access_key=AKIAVWOJMI5I2DPXXXX aws_secret_key=F9PaprqnPUn/XXXXXXXXXXXX region=us-east-2"

Nach Abschluss des Befehls sehen Sie eine GEÄNDERT-Nachricht, wie unten gezeigt, die bestätigt, dass Ansible die AWS EC2-Instanz erfolgreich neu gestartet hat.

Running an Ad Hoc Command to Restart an Amazon EC2 Instance

Starten einer EC2-Instanz mit Ansible Playbook

Sie haben gerade gelernt, wie Sie einen Ansible-Ad-hoc-Befehl ausführen, was großartig für eine einmalige Aktion ist! Aber vielleicht müssen Sie mehrere Aufgaben ausführen. Wenn ja, erstellen Sie ein Ansible-Playbook, das eine EC2-Instanz startet, um mehrere Aufgaben auszuführen.

1. Öffnen Sie das Terminal auf Ihrem Ansible-Controller-Host und führen Sie dann die folgenden Befehle aus, um ein Verzeichnis namens ~/ansible_aws_ec2_module zu erstellen und zu diesem Verzeichnis zu wechseln.

Dieses Verzeichnis enthält das Playbook und alle erforderlichen Konfigurationsdateien, die Sie verwenden, um das Ansible AWS EC2-Modul aufzurufen.

mkdir ~/ansible_aws_ec2_module
cd ~/ansible_aws_ec2_module

2. Öffnen Sie als nächstes Ihren bevorzugten Texteditor, erstellen Sie eine Datei namens main.yml im Verzeichnis ~/ansible_aws_ec2_module. Füllen Sie die Datei main.yml mit den folgenden YAML-Playbook-Inhalten aus.

Das folgende Playbook enthält die Aufgabe, die eine Instanz mit einer öffentlichen IP-Adresse innerhalb einer bestimmten VPC in einem AWS-Konto startet.

Von diesem Punkt an im Tutorial ersetzen Sie aws_access_key, aws_secret_key Werte durch Ihre eigenen.

---
- name: Ansible EC2 instance Launch module demo
# Definieren des entfernten Servers, auf dem das Ansible EC2-Modul die Objekte verwalten wird
  hosts: web
  remote_user: ubuntu # Verwendung des Remote-Benutzers als ubuntu
  tasks:
		# Aufgabe zum Starten einer AWS EC2-Instanz mit einer öffentlichen IP
    - name: start an instance with a public IP address
      amazon.aws.ec2:
				# Festlegen des Schlüsselnamens
        key_name: mykey
				# Definition von instance_type, image, vpc_subnet_id, assign_public_ip, aws_region
        instance_type: t2.micro
        image: ami-0b9064170e32bde34
        wait: yes
        count: 1
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        assign_public_ip: yes
        aws_region: us-east-2
        aws_access_key: AKIAVWOJMI5XXXXXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQXXXXXXXXXXXXXXXXXX

3. Führen Sie den untenstehenden Befehl aus, um das Playbook (main.yml) aufzurufen. Das Playbook führt dann die Aufgaben aus, um eine neue Instanz in der Region us-east-2 mit dem Instanztyp t2.micro zu erstellen.

ansible-playbook main.yml

Wie unten dargestellt, zeigen einige Aufgaben einen geändert-Status an, was darauf hinweist, dass Ansible die Instanz erfolgreich erstellt hat und den Status der Aufgabe geändert hat, um den Befehl auszuführen. Im Gegensatz dazu sehen Sie einen ok-Status, da einige Aufgaben keine Änderungen erfordern.

Executing a Playbook

4. Öffnen Sie nun Ihren bevorzugten Webbrowser und melden Sie sich im AWS Management Console an.

5. Klicken Sie schließlich auf die Suchleiste oben in der Konsole, suchen Sie nach EC2 und klicken Sie auf den Menüpunkt EC2. Dadurch wird Ihr Browser auf die EC2-Seite umgeleitet.

Searching the EC2 service in the AWS account

Auf der EC2-Seite sehen Sie Ihre neu erstellte Instanz, wie unten gezeigt.

newly created instance

Beenden mehrerer AWS EC2-Instanzen

Vielleicht erfüllen einige AWS EC2-Instanzen keinen Zweck mehr. In diesem Fall können Sie mehrere Instanzen stoppen oder beenden, indem Sie ein Ansible-Playbook ausführen. Geben Sie die Instanz-IDs an und deklarieren Sie Werte in einer Aufgabe, um das Verhalten des Ansible EC2 AWS-Moduls beim Stoppen der Instanzen festzulegen.

1. Erstellen Sie ein Ansible-Playbook mit dem Namen stop.yml und kopieren Sie den unten stehenden Code in das Playbook.

Das folgende Playbook stoppt zwei Instanzen (i-0d8c7eb4eb2c643a1 und i-0dbc17a67c0f7577c).

---
- name: Stopping the already Launched EC2 instances using Ansible EC2 Module
# Definition des Remote-Servers, auf dem das Ansible EC2-Modul die Objekte verwalten wird
  hosts: web
  gather_facts: false
  # Verwendung des Remote-Benutzers als ubuntu
  remote_user: ubuntu 
  vars:
    instance_ids:
      - 'i-0d8c7eb4eb2c643a1'
      - 'i-0dbc17a67c0f7577c'
    region: us-east-2
  tasks:
    - name: Stopping the already launched AWS EC2 instances
      amazon.aws.ec2:
        instance_ids: '{{ instance_ids }}'
        region: '{{ region }}'
        state: stopped
        wait: True
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        assign_public_ip: yes
        aws_access_key: AKIAVWOJMI5XXXXXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQXXXXXXXXXXXXXXXXXX

Wenn Sie die Instanzen lieber beenden möchten, anstatt sie zu stoppen, ändern Sie den Wert von state zu absent.

2. Führen Sie nun den folgenden Befehl aus, um das Playbook (stop.yml) auszuführen, das die in der Playbook angegebenen Instanzen stoppt. ansible-playbook stop.yml

ansible-playbook stop.yml
Executing the Ansible playbook using the ansible-playbook command.

3. Gehen Sie schließlich in Ihrem Webbrowser zu Ihren AWS-Instanzen, und Sie werden feststellen, dass zwei Instanzen erfolgreich gestoppt wurden, wie unten gezeigt.

Viewing Stopped Instances

Erstellen einer Instanz mit Tag, Volume und Cloud Watch Monitoring

Vielleicht müssen Sie Ihre Instanz mit fortschrittlicheren Komponenten wie Tagging, Überwachung mit CloudWatch-Alarmen und Erstellung eines Volumens für Speicherzwecke ausstatten. In diesem Fall wird die Verwendung des Ansible EC2 AWS-Moduls in einem Playbook den Trick tun.

Tags sind eine ausgezeichnete Möglichkeit, AWS-Ressourcen zu organisieren und effiziente Kostenberechnungen von Ressourcen in der AWS Management Console durchzuführen.

1. Erstellen Sie ein neues Ansible-Playbook mit dem Namen advanced.yml und füllen Sie das Playbook mit dem unten stehenden Code.

Das folgende Playbook startet eine AWS EC2-Instanz mit (Volumes—> /dev/sdb, Überwachung und Tagging der Instanz mit Instance1).

---
- name: Adding Tag, Volumes, and cloud Watch Monitoring to an an instance
  hosts: web
  remote_user: ubuntu
  tasks:
    - name: Adding Tag, Volumes, and cloud Watch Monitoring to an an instance
      amazon.aws.ec2:
        instance_type: t2.micro
        image: ami-0b9064170e32bde34
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        region: us-east-2
        aws_access_key: AKIAVWOJMI5I2DXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQ5lWjXXXXXXXXXXXXXXXx
				# Erstellen der Volumes und Anhängen an die AWS EC2-Instanz vom Typ io1
        volumes:
          - device_name: /dev/sdb
            volume_type: io1
            iops: 1000
            volume_size: 100
				# Aktivieren der CloudWatch-Überwachung 
				# der AWS EC2-Instanz, die gestartet wird
        monitoring: yes
				# Tagging der AWS EC2-Instanz, die gestartet wird
        instance_tags:
            Name: Instance1

2. Führen Sie nun den folgenden Befehl aus, um das Playbook (advanced.yml) auszuführen, das eine AWS EC2-Instanz mit Tag, Volume und CloudWatch-Überwachung startet. ansible-playbook advanced.yml

ansible-playbook advanced.yml
Executing the Ansible Playbook to Create an Instance with Tag, Volume, and Cloud Watch Monitoring

3. Navigieren Sie zum Speicher-Tab der Instanz, die Sie im AWS EC2-Konsole überprüfen möchten. Klicken Sie unter Blockgeräte auf eine Volumen-ID aus der Liste, um die detaillierten Informationen der Instanz anzuzeigen.

Verifying the volume created in the AWS account for the AWS EC2 instance.

4. Klicken Sie schließlich auf den Tags-Tab auf der Zusammenfassungsseite der Instanzinformationen. Dort sehen Sie den Tag, den Sie für die Instanz im Playbook festgelegt haben (Schritt eins), ähnlich wie unten angezeigt.

Verifying the tags in the AWS account for the AWS EC2 instance.

Fazit

In diesem Tutorial haben Sie die Ansible AWS EC2-Modul genutzt, um AWS EC2-Instanzen mit einem einzigen Befehl zu verwalten. Sie haben auch gelernt, wie Sie AWS EC2-Instanzen anpassen können, z.B. durch Neustarten, Beenden, Hinzufügen von Tags usw.

Jetzt, da Sie solide Kenntnisse über das Ansible AWS EC2-Modul haben, sind Sie bereit, das Ansible EC2 AWS-Modul zu einem Teil Ihrer Instanzverwaltungsroutine zu machen? Vielleicht möchten Sie die Aufgabe automatisieren, indem Sie einen Cron-Job hinzufügen?

Source:
https://adamtheautomator.com/ansible-ec2/