→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
- 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
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
.