Hoe virtuele machines te beheren met de Ansible EC2 AWS-module

Bij het beheren van bestaande Amazon Web Service (AWS) EC2 instanties werkt klikken in de Management Console prima. Maar naarmate je infrastructuur groeit, kost het beheren van instanties veel tijd en wordt het complex. Is er een betere manier om instanties te beheren? Ja! De AWS Ansible EC2-module kan helpen.

In deze tutorial leer je hoe de Ansible AWS EC2-module je een krachtige grip geeft om AWS EC2-instanties te beheren in een op voorbeelden gebaseerde aanpak.

Lees verder en ga aan de slag!

Vereisten

Deze tutorial bestaat uit stapsgewijze instructies. Zorg ervoor dat je het volgende hebt:

  • Een Ansible-controllerhost – Deze tutorial maakt gebruik van Ansible v2.11.7 op een Ubuntu 20.04.3 LTS-machine.

Zorg ervoor dat de IAM-gebruiker is ingesteld voor programmatische toegang en wijs deze toe aan het bestaande beleid AmazonEC2FullAccess.

  • Een inventarisbestand en één of meer hosts zijn geconfigureerd om Ansible-opdrachten en playbooks uit te voeren. De externe Linux-computer heet myserver, en deze handleiding maakt gebruik van een inventarisgroep genaamd web.
  • Python v3.6 of hoger is geïnstalleerd op uw Ansible-controllerhost en de externe node-machine. Deze handleiding gebruikt Python v3.8.10 op een Ubuntu-machine.
  • Python-modules boto3 groter dan 1.15.0 en botocore groter dan 1.18.0 moeten worden geïnstalleerd op de Ansible-controllerhost en de externe node-machine.

Het maken of opnieuw opstarten van een EC2-instantie met ad-hoc-opdrachten

Als u van plan bent om een enkele EC2-instantie te maken of opnieuw op te starten op een AWS-account, volstaan ad-hoc-opdrachten. Ad-hoc-opdrachten zijn een snelle en efficiënte manier om een enkele opdracht uit te voeren om een EC2-instantie te maken of de instantietype van een AWS EC2-instantie te wijzigen.

Meld u aan bij uw Ansible-controller en voer de onderstaande ansible-opdracht uit om (-m amazon.aws.ec2_instance) verbinding te maken met de host (web).

De opdracht geeft een argument door (-a) dat Ansible vertelt om de AWS EC2-instantie opnieuw op te starten met instance_tags=Name=Tag1) in de us-east-2-regio. Om de verbinding met het AWS-account te authenticeren, voegt u aws_access_key en aws_secret_key-details toe aan de ad-hoc-opdracht.

De tutorial voert alle handelingen uit in de us-east-2-regio, maar u kunt dezelfde handelingen uitvoeren in elke AWS-regio van uw keuze.

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"

Zodra de opdracht is voltooid, ziet u een GEWIJZIGD bericht, zoals hieronder weergegeven, dat bevestigt dat Ansible de AWS EC2-instantie succesvol heeft herstart.

Running an Ad Hoc Command to Restart an Amazon EC2 Instance

Het starten van een EC2-instantie met Ansible Playbook

Je hebt zojuist geleerd hoe je een Ansible ad-hoc commando uitvoert, wat geweldig is voor eenmalige acties! Maar misschien moet je meerdere taken uitvoeren. Als dat het geval is, maak dan een Ansible playbook aan dat een EC2-instantie start om meerdere taken uit te voeren.

1. Open de terminal op je Ansible controller host en voer vervolgens de volgende commando’s uit om een map genaamd ~/ansible_aws_ec2_module te maken en naar die map te schakelen.

Deze map bevat het playbook en alle vereiste configuratiebestanden die je zult gebruiken om de Ansible AWS EC2-module aan te roepen.

mkdir ~/ansible_aws_ec2_module
cd ~/ansible_aws_ec2_module

2. Open vervolgens je favoriete teksteditor, maak een bestand genaamd main.yml in de map ~/ansible_aws_ec2_module. Vul het bestand main.yml in met de volgende YAML playbook-inhoud.

Het playbook hieronder bevat de taak die een instantie start met een openbaar IP-adres binnen een specifieke VPC in een AWS-account.

Vanaf dit punt gedurende de tutorial, vervang de waarden van aws_access_key, aws_secret_key met je eigen waarden.

---
- name: Ansible EC2 instance Launch module demo
# Definiëren van de externe server waar de Ansible EC2-module de objecten zal beheren
  hosts: web
  remote_user: ubuntu # Gebruik Remote-gebruiker als ubuntu
  tasks:
		# Taak om een AWS EC2-instantie te starten met een openbaar IP-adres
    - name: start an instance with a public IP address
      amazon.aws.ec2:
				# Het instellen van de keyname
        key_name: mykey
				# Definieer de 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. Voer de onderstaande opdracht uit om het playbook (main.yml) aan te roepen. Het playbook voert vervolgens de taken uit om een nieuwe instantie te maken in de regio us-east-2 met de instantietype t2.micro.

ansible-playbook main.yml

Hieronder kunt u zien dat sommige taken een veranderd-status tonen, wat aangeeft dat Ansible de instantie succesvol heeft aangemaakt en de status van de taak heeft gewijzigd om de opdracht uit te voeren. Daarentegen ziet u een ok-status omdat sommige taken geen wijzigingen vereisen.

Executing a Playbook

4. Open nu uw favoriete webbrowser en log in op de AWS Management Console.

5. Klik ten slotte op de zoekbalk bovenaan de console, zoek naar EC2 en klik op het menu-item EC2. Hierdoor wordt uw browser doorgestuurd naar de EC2-pagina.

Searching the EC2 service in the AWS account

Op de EC2-pagina ziet u uw zojuist aangemaakte instantie, zoals hieronder weergegeven.

newly created instance

Meerdere AWS EC2-instanties stoppen

Misschien hebben sommige AWS EC2-instanties geen doel meer. Als dat het geval is, kunt u meerdere instanties stoppen of beëindigen door een Ansible playbook uit te voeren. Specificeer de instantie-ID’s en geef waarden op in een taak om het gedrag van de Ansible EC2 AWS-module in het stoppen van de instanties in te stellen.

1. Maak een Ansible playbook met de naam stop.yml en kopieer/plak de onderstaande code in het playbook.

Het onderstaande playbook stopt twee instanties (i-0d8c7eb4eb2c643a1 en i-0dbc17a67c0f7577c).

---
- name: Stopping the already Launched EC2 instances using Ansible EC2 Module
# Definieer de externe server waar de Ansible EC2-module de objecten zal beheren
  hosts: web
  gather_facts: false
  # Gebruik Externe gebruiker 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

Als u de instanties liever wilt beëindigen in plaats van ze te stoppen, wijzig dan de waarde van state naar absent.

2. Voer nu het onderstaande commando uit om het playbook (stop.yml) uit te voeren, dat de instanties zal stoppen die u hebt gespecificeerd in het playbook. ansible-playbook stop.yml

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

3. Navigeer tot slot naar uw AWS-instanties in uw webbrowser en u zult zien dat twee instanties succesvol zijn gestopt, zoals hieronder wordt weergegeven.

Viewing Stopped Instances

Het maken van een instantie met Tag, Volume en Cloud Watch Monitoring

Misschien moet je je instantie voorzien van meer geavanceerde componenten zoals tagging, monitoring met cloud watch alarms, en het creëren van een volume voor opslagdoeleinden. In dat geval zal het gebruik van de Ansible EC2 AWS-module in een playbook de truc doen.

Tags zijn een uitstekende manier om AWS-resources te organiseren en efficiënte kostenberekeningen van resources te maken in de AWS Management Console.

1. Maak een nieuw Ansible playbook met de naam advanced.yml en vul het playbook met de onderstaande code.

Het onderstaande playbook zal een AWS EC2-instantie starten met (volumes -> /dev/sdb, monitoring en tag de instantie met 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
				# Het creëren van de volumes en deze koppelen aan een AWS EC2-instantie van het type io1
        volumes:
          - device_name: /dev/sdb
            volume_type: io1
            iops: 1000
            volume_size: 100
				# Het inschakelen van de cloud watch monitoring
				# van de AWS EC2-instantie die zal worden gestart
        monitoring: yes
				# Het taggen van de AWS EC2-instantie die zal worden gestart
        instance_tags:
            Name: Instance1

2. Voer nu de onderstaande opdracht uit om het playbook (advanced.yml) uit te voeren, waarmee een AWS EC2-instantie met tag, volume en cloud watch monitoring wordt gestart. ansible-playbook advanced.yml

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

3. Navigeer naar het tabblad Opslag van de instantie die je wilt verifiëren in de AWS EC2-console. Onder Blokapparaten klik je op een Volumen-ID in de lijst om gedetailleerde informatie van de instantie te bekijken.

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

4. Klik tot slot op het tabblad Tags in de samenvattingsinformatiepagina van de instantie. Je ziet de tag die je hebt ingesteld voor de instantie in de playbook (stap één), vergelijkbaar met onderstaande.

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

Conclusie

In deze tutorial heb je gebruikgemaakt van de Ansible AWS EC2-module om AWS EC2-instanties te beheren met één commando. Je hebt ook geleerd hoe je AWS EC2-instanties kunt aanpassen, zoals herstarten, beëindigen, tags toevoegen, enzovoort.

Nu je een solide kennis hebt van de Ansible AWS EC2-module, ben je bereid om deze module op te nemen in je routine voor het beheren van instanties? Misschien wil je de taak automatiseren door een cronjob toe te voegen?

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