→Voorvereisten:
– >RedHat Ansible gedownload en geconfigureerd op het lokale systeem.
>Kijk ook eens naar mijn vorige artikel voor Ansible👇👇:
~Probleemstelling:
♦️ Deploy Web Server op AWS via ANSIBLE!
🔹 Provision EC2 instance via ansible.
🔹 Haal het IP-adres van de instance op met behulp van het dynamische inventarisatieconcept.
🔹 Configureer de webserver via ansible!
- Omdat Ansible op python is gebouwd, is een Python Software Development Kit (SDK) vereist waarmee de configuratie van AWS-diensten mogelijk is. Het pakket is een objectgeoriënteerde API met de naam boto3.
pip3 install boto3 //assuming python3 is installed
→STAP-1)
- In de eerste stap heb ik een ec2-instantie ingericht met dit afspeelboek.
- Hier roept het RedHat systeem zelf de API voor configuratie op AWS, en deze procedure wordt gedaan op de lokale machine dat is de reden waarom de host wordt verondersteld om localhost.
- Voor authenticatie naar de AWS-account, maak een IAM-gebruiker die minder bevoorrechte dan de root-account. De AWS_ACCESS_KEY en AWS_SECRET sleutel worden expliciet doorgegeven via een Ansible vault met de naam 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
Ansible-register stelt de gebruiker in staat om de uitvoer vast te leggen en op te slaan als variabelen en kan in verschillende scenario’s worden gebruikt. De variabelen bevatten de door de taak geretourneerde waarde.
De registervariabele drukt het openbare IP-adres van de instantie af van Ansible-feiten die het verzamelt.
→STAP-2)
> De instantie is gelanceerd! Wat nu? 🤔🤔
We moeten het IP-adres van deze instantie in het inventarisbestand dumpen en de verdere procedure uitvoeren!
Wil je dat ik het IP-adres gewoon in het hostbestand schrijf🤭? NAH ! Niet handmatig🤫🤫
EN DIT IS WAAR 🔥DYNAMISCHE INVENTARISATIE🔥 KOMT OM TE SPELEN:
→Ansible dynamische inventaris is een concept dat scripts bevat die als externe API’s werken en de informatie(feiten) van een bepaalde provider ophalen.
→De verzamelde feiten zullen dynamisch in het hostbestand worden gedumpt en verder kunnen we groepen van deze hosts maken volgens vereiste.
→Kopieer de volgende bestanden naar het controller-knooppunt om dynamische inventaris mogelijk te maken.
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
→Beide bestanden moeten in uitvoerbaar formaat zijn:
chmod +x ec2.py
chmod +x ec2.ini
→Ook moeten voor de accountauthenticatie AWS_ACCESS_KEY en AWS_SECRET_KEY in het bestand ec2.ini worden doorgegeven. Dit zal namens ons contact opnemen met AWS en de informatie van de ec2-instance ophalen.
→Voeg het inventarisbestand ook in de configuratiebestanden ANSIBLE.CFG in.
→Nu, om de uitvoer te zien, voert u ./ec2.py - - list