Come gestire macchine virtuali con il modulo Ansible EC2 AWS

Quando si gestiscono istanze esistenti di Amazon Web Service (AWS) EC2, fare clic sulla Console di Gestione funziona bene. Ma man mano che l’infrastruttura cresce, la gestione delle istanze richiede molto tempo e diventa complessa. Esiste un modo migliore per gestire le istanze? Sì! Il modulo AWS Ansible EC2 può aiutarti.

In questo tutorial, imparerai come il modulo Ansible AWS EC2 ti offre un controllo potente per gestire le istanze AWS EC2 seguendo un approccio basato su esempi.

Continua a leggere e inizia!

Prerequisiti

Questo tutorial comprende istruzioni passo-passo. Se desideri seguirla, assicurati di avere quanto segue:

Assicurati che l’utente IAM sia configurato per l’accesso programmato e che gli venga assegnata la politica esistente AmazonEC2FullAccess.

  • Un file di inventario e uno o più host sono configurati per eseguire comandi e playbooks di Ansible. Il computer Linux remoto è chiamato myserver, e questo tutorial utilizza un gruppo di inventario chiamato web.
  • Python v3.6 o successivo installato sull’host del controller di Ansible e sulla macchina remota. Questo tutorial utilizza Python v3.8.10 su una macchina Ubuntu.
  • Python modules boto3 superiori a 1.15.0 e botocore superiori a 1.18.0 devono essere installati sull’host del controller Ansible e sulla macchina del nodo remoto.

Creare o riavviare un’istanza EC2 con comandi ad hoc

Se prevedi di creare o riavviare una singola istanza EC2 su un account AWS, eseguire comandi ad hoc sarà sufficiente. I comandi ad hoc sono un modo rapido ed efficiente per eseguire un singolo comando per creare un’istanza EC2 o modificare il tipo di istanza EC2 di AWS.

Accedi al tuo controller Ansible ed esegui il seguente comando ansible per connetterti (-m amazon.aws.ec2_instance) all’host (web).

Il comando passa un argomento (-a) che dice ad Ansible di riavviare l’istanza EC2 di AWS con instance_tags=Name=Tag1) nella regione us-east-2. Per autenticare la connessione all’account AWS, aggiungi i dettagli di aws_access_key e aws_secret_key nel comando ad hoc.

Il tutorial esegue tutte le azioni nella regione us-east-2, ma puoi eseguire le stesse azioni in qualsiasi regione AWS a tua scelta.

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"

Una volta completato il comando, vedrai un messaggio CHANGED, come mostrato di seguito, che conferma che Ansible ha riavviato con successo l’istanza EC2 di AWS.

Running an Ad Hoc Command to Restart an Amazon EC2 Instance

Avvio di un’istanza EC2 con Ansible Playbook

Hai appena imparato come eseguire un comando ad hoc di Ansible, che è ottimo per un’azione singola! Ma forse hai bisogno di eseguire più compiti. In tal caso, crea un playbook di Ansible che avvierà un’istanza EC2 per eseguire più compiti.

1. Apri il terminale nel tuo host controller di Ansible, quindi esegui i seguenti comandi per creare una directory chiamata ~/ansible_aws_ec2_module e passa a quella directory.

Questa directory conterrà il playbook e tutti i file di configurazione richiesti che utilizzerai per invocare il modulo Ansible AWS EC2.

mkdir ~/ansible_aws_ec2_module
cd ~/ansible_aws_ec2_module

2. Successivamente, apri il tuo editor di testo preferito, crea un file chiamato main.yml nella directory ~/ansible_aws_ec2_module. Popola il file main.yml con i seguenti contenuti del playbook YAML.

Il playbook qui sotto contiene il compito che avvia un’istanza con un indirizzo IP pubblico all’interno di una particolare VPC in un account AWS.

Da questo punto in poi nel tutorial, sostituisci i valori aws_access_key, aws_secret_key con i tuoi.

---
- name: Ansible EC2 instance Launch module demo
# Definizione del server remoto dove il modulo EC2 di Ansible gestirà gli oggetti
  hosts: web
  remote_user: ubuntu # Utilizzando l'utente remoto come ubuntu
  tasks:
		# Attività per avviare un'istanza AWS EC2 con un IP pubblico
    - name: start an instance with a public IP address
      amazon.aws.ec2:
				# Impostazione del nome chiave 
        key_name: mykey
				# Definisci il tipo di istanza, l'immagine, l'id della subnet vpc, assegna l'IP pubblico, la regione aws
        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. Esegui il comando di seguito per invocare il playbook (main.yml). Il playbook esegue quindi le attività per creare una nuova istanza nella regione us-east-2 con tipo di istanza t2.micro.

ansible-playbook main.yml

Di seguito, puoi vedere che alcune attività mostrano uno stato changed, il che indica che Ansible ha creato correttamente l’istanza e ha modificato lo stato dell’attività per eseguire il comando. In contrasto, vedi uno stato ok poiché alcune attività non richiedono modifiche.

Executing a Playbook

4. Ora, apri il tuo browser web preferito e accedi alla Console di Gestione AWS.

5. Infine, fai clic sulla barra di ricerca nella parte superiore della console, cerca EC2 e fai clic sull’elemento di menu EC2. In questo modo il tuo browser verrà reindirizzato alla pagina EC2.

Searching the EC2 service in the AWS account

Sulla pagina EC2, vedrai la tua nuova istanza creata, come mostrato di seguito.

newly created instance

Arresto di più istanze EC2 AWS

Forse alcune istanze AWS EC2 non servono più. In tal caso, puoi interrompere o terminare più istanze eseguendo un playbook Ansible. Specifica gli ID dell’istanza e dichiara i valori in un compito per impostare il comportamento del modulo AWS EC2 di Ansible nello stop delle istanze.

1. Crea un playbook Ansible chiamato stop.yml e copia/incolla il codice qui sotto nel playbook.

Il playbook sottostante interrompe due istanze (i-0d8c7eb4eb2c643a1 e i-0dbc17a67c0f7577c).

---
- name: Stopping the already Launched EC2 instances using Ansible EC2 Module
# Definizione del server remoto dove il modulo AWS EC2 di Ansible gestirà gli oggetti
  hosts: web
  gather_facts: false
  # Utilizzo dell'utente remoto come 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

Se preferisci terminare le istanze anziché interromperle, cambia il valore dello stato in assente.

2. Ora esegui il comando sottostante per eseguire il playbook (stop.yml), che interromperà le istanze specificate nel playbook. ansible-playbook stop.yml

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

3. Infine, vai alle tue istanze AWS nel browser web e vedrai due istanze interrotte con successo, come mostrato di seguito.

Viewing Stopped Instances

Creazione di un’istanza con etichetta, volume e monitoraggio Cloud Watch.

Forse è necessario dotare la tua istanza con componenti più avanzati come l’etichettatura, il monitoraggio con allarmi CloudWatch, e la creazione di un volume per scopi di archiviazione. In tal caso, l’utilizzo del modulo Ansible EC2 AWS in un playbook farà al caso tuo.

Le etichette sono un ottimo modo per organizzare le risorse AWS e calcolare efficientemente i costi delle risorse nella Console di Gestione AWS.

1. Crea un nuovo playbook Ansible chiamato advanced.yml e popolalo con il codice qui sotto.

Il playbook seguente avvierà un’istanza AWS EC2 con (volumi—> /dev/sdb, monitoraggio e etichetta dell’istanza con 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
				# Creazione dei volumi e collegamento all'istanza AWS EC2 di tipo io1
        volumes:
          - device_name: /dev/sdb
            volume_type: io1
            iops: 1000
            volume_size: 100
				# Abilitazione del monitoraggio CloudWatch
				# dell'istanza AWS EC2 che verrà avviata
        monitoring: yes
				# Etichettatura dell'istanza AWS EC2 che verrà avviata
        instance_tags:
            Name: Instance1

2. Ora esegui il comando seguente per eseguire il playbook (advanced.yml), che avvierà un’istanza AWS EC2 con etichetta, volume e monitoraggio CloudWatch. ansible-playbook advanced.yml

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

3. Passa alla scheda Archiviazione dell’istanza che desideri verificare nella console AWS EC2. In Dispositivi di blocco, clicca su un ID del volume dalla lista per visualizzare le informazioni dettagliate dell’istanza.

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

4. Infine, clicca sulla scheda Tag nella pagina delle informazioni di riepilogo dell’istanza. Vedrai il tag che hai impostato per l’istanza nel playbook (passo uno), come quello qui sotto.

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

Conclusione

In questo tutorial, hai sfruttato il modulo AWS EC2 di Ansible per gestire le istanze AWS EC2 con un singolo comando. Hai anche imparato come personalizzare le istanze AWS EC2, come riavviarle, terminarle, aggiungere tag, e così via.

Ora che hai una conoscenza approfondita del modulo AWS EC2 di Ansible, sei disposto a integrare il modulo AWS EC2 di Ansible nella tua routine di gestione delle istanze? Forse vorrai automatizzare il compito aggiungendo un lavoro cron?

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