

→Pre-requisiti:
– >RedHat Ansible scaricato e configurato nel sistema locale.
>Do controllare il mio articolo precedente per Ansible👇👇:
~Problem Statement:
♦️ Deploy Web Server on AWS through ANSIBLE!
🔹 Provision EC2 instance through ansible.
🔹 Recupera l’indirizzo IP dell’istanza usando il concetto di inventario dinamico.
🔹 Configura il webserver attraverso Ansible!
- Come Ansible è costruito sopra Python, è richiesto un kit di sviluppo software (SDK) Python che permette la configurazione dei servizi AWS. Il pacchetto è un’API orientata agli oggetti chiamata boto3.
pip3 install boto3 //assuming python3 is installed
→STEP-1)
- Nel primo passo, ho fornito un’istanza ec2 con questo playbook.
- Qui, il sistema RedHat stesso chiama l’API per la configurazione su AWS, e questa procedura è fatta sulla macchina locale, ecco perché l’host dovrebbe essere localhost.
- Per l’autenticazione all’account AWS, creare un utente IAM che ha meno privilegi dell’account root. La chiave AWS_ACCESS_KEY e AWS_SECRET sono passate esplicitamente attraverso un vault di Ansible chiamato secret.yml

- hosts: localhost
vars_files:
- secret.yml
tasks:
- name: Provision os in AWS
ec2:
key_name: "keytask" //keypair to be attached to the instance
instance_type: "t2.micro"
image: "ami-0ebc1ac48dfd14136" //amazon linux
count: 1
wait: yes
vpc_subnet_id: "subnet-e7780dab"
region: "ap-south-1" //asia-pecific-south region of AWS
state: present
assign_public_ip: yes
group_id: "sg-0512d293cfb4af6e4" //security group
aws_access_key: "{{ myuser }}"
aws_secret_key: "{{ mypass }}"
register: ec2 - debug:
var: ec2.instances.public_ip

Un registro ansible permette all’utente di catturare l’output e memorizzarlo come variabili e può essere utilizzato in diversi scenari. Le variabili conterranno il valore restituito dal task.
La variabile del registro stamperà l’indirizzo IP pubblico dell’istanza dai fatti Ansible che raccoglie.

→STEP-2)
> L’istanza è stata lanciata! E poi? 🤔🤔
Dobbiamo scaricare l’indirizzo IP di questa istanza nel file di inventario ed eseguire la procedura successiva!
Chiedo semplicemente di scrivere l’IP nel file host🤭? NAH! Non manualmente🤫🤫

E qui entra in gioco l’inventario dinamico🔥:
→L’inventario dinamico ansible è un concetto che contiene script che funzionano come API esterne ed estrae le informazioni (fatti) di un particolare fornitore.
→I fatti raccolti saranno scaricati dinamicamente nel file dell’host e, inoltre, possiamo creare gruppi di questi host secondo il requisito.
→Copiare i seguenti file nel nodo del controller per abilitare l’inventario dinamico.
https://raw.githubusercontent.com/ansible/ansible/stable-1.9/plugins/inventory/ec2.pyhttps://raw.githubusercontent.com/ansible/ansible/stable-1.9/plugins/inventory/ec2.ini
→Entrambi i file devono essere in formato eseguibile:
chmod +x ec2.py
chmod +x ec2.ini
→Inoltre, per l’autenticazione dell’account, passare AWS_ACCESS_KEY e AWS_SECRET_KEY nel file ec2.ini. Questo contatterà AWS per nostro conto e recupererà le informazioni dell’istanza ec2.
→Modificare il file inventario anche nei file di configurazione ANSIBLE.CFG.
→Ora, per vedere l’output, eseguire ./ec2.py - - list