Setting Up Ansible for EC2 With Dynamic Inventory🙂

Poojan Mehta
Poojan Mehta

Follow

Sep 25, 2020 – 5 min read

→Wymagania wstępne:

– >RedHat Ansible pobrane i skonfigurowane w systemie lokalnym.

>Sprawdź mój poprzedni artykuł dla Ansible👇👇:

~Problem Statement:

♦️ Deploy Web Server on AWS through ANSIBLE!

🔹 Provision EC2 instance through ansible.

🔹 Retrieve the IP Address of instance using the dynamic inventory concept.

🔹 Configure the webserver through ansible!

  • As Ansible is built on top of python, a Python Software Development Kit (SDK) is required that enables the configuration of AWS services. Pakiet ten to obiektowe API o nazwie boto3.
pip3 install boto3 //assuming python3 is installed

→STEP-1)

  • W pierwszym kroku zaopatrzyłem instancję ec2 za pomocą tego playbooka.
  • Tutaj system RedHat sam wywołuje API do konfiguracji na AWS, a ta procedura jest wykonywana na lokalnej maszynie, dlatego hostem ma być localhost.
  • Do uwierzytelnienia do konta AWS, utwórz jednego użytkownika IAM, który ma mniejsze uprawnienia niż konto root. Klucz AWS_ACCESS_KEY i AWS_SECRET są przekazywane jawnie przez skarbiec Ansible o nazwie secret.yml

Encrypted Vault🔒
- 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

anible-…playbook ec2.py – ask-vault-pass🚀

Rejestr Ansible pozwala użytkownikowi na przechwytywanie danych wyjściowych i przechowywanie ich jako zmiennych i może być używany w różnych scenariuszach. Zmienne będą zawierały wartość zwróconą przez zadanie.

Zmienna register będzie drukowała publiczny adres IP instancji z faktów Ansible, które zbiera.

→STEP-2)

>Instancja została uruchomiona! Co dalej?🤔🤔

Musimy zrzucić adres IP tej instancji do pliku inventory i wykonać dalszą procedurę!

Ciekawe, że po prostu zapiszę IP w pliku hosta🤭?? NAH ! Nie ręcznie🤫🤫

AND THIS ISERE 🔥DYNAMIC INVENTORY🔥 COMES TO PLAY:

→Ansible dynamic inventory to koncepcja zawierająca skrypty, które działają jako zewnętrzne API i wyciągają informacje(fakty) z danego dostawcy.

→Zebrane fakty będą dynamicznie zrzucane do pliku hosta i dalej, możemy tworzyć grupy tych hostów zgodnie z wymaganiami.

→Kopiujemy następujące pliki do węzła kontrolera aby włączyć dynamiczną inwentaryzację.

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

→Oba pliki muszą być w formacie wykonywalnym:

chmod +x ec2.py
chmod +x ec2.ini

→Ponadto, dla uwierzytelnienia konta, podaj AWS_ACCESS_KEY i AWS_SECRET_KEY w pliku ec2.ini. Spowoduje to skontaktowanie się z AWS w naszym imieniu i pobranie informacji o instancji ec2.

→Edytuj również plik inventory w plikach konfiguracyjnych ANSIBLE.CFG.

→Teraz, aby zobaczyć dane wyjściowe, uruchom ./ec2.py - - list

.

Dodaj komentarz