Skip to content

We have created an ASG oriented ansible-playbook with dynamic inventory and its helps to update git contents which if the currently available instances and you can use this manually or automate via Jenkins like (continues deployment) and who use the playbook it never needs to create instances unwanted.

Notifications You must be signed in to change notification settings

yousafkhamza/ASG-rolling-update

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ASG Rolling Update (Ansible + Jenkins)

Builds


Description

I just try to a new explanation method for easy to convey my work and details. Basically, this is an ansible-playbook with ASG Rolling update and Create an AWS Infrastructure with (ELB + ASG + Security Group). Its automated with Jenkins.

Client Query: I have an ELB (Elastic LoadBalancer) in amazon and that ELB under instances is registered from an ASG. Also, the developers are uploaded the site contents to the git, and the developers make updates on git (ELB git changes through user-data with git). So, that's very complicated each update time has to change the count of ASG but it's very annoying and expensive creates and removes instances unwanted is there any solution?

Answer: We have created a ASG oriented ansible playbook with dynamic inventory and its help to update git contents which if the current available instances and you can use this manually or automate via jenkins like (continues deployment) and who use the playbook it never needs to create instances unwanted.


Features

  • ASG Rolling updates through ansible-playbook (Primary)
  • Includs ELB + ASG + Security group infrastructure on this ansible-playbook
  • No need for hosts (Inventory file) for ASG under client servers. Because its work with Dynamic Inventory
  • Furthermore, I have included a test website with user-data for more clarification
  • Easy to handle and everyone can change the ASG (Count, Project_Name.. etc values)
  • No need to install any dependencies like boto and boto3 (Please note that if you have using Ansible 2.2+ and python 2.7)

Pre-Requests

  • Install Ansible on your Master Machine
  • Create an IAM user role under your AWS account and please enter the values once the playbook running time
Installation

Ansible2 (For your reference visit How to install Ansible)

IAM Role Creation

IAM Role Creation

Ansible Modules used

How To Use

Ansible Installation article is in pre-request section so please check out the pre-request section.

amzon-linux-extras install -y ansible2
yum install git -y
git clone https://github.com/yousafkhamza/ASG-rolling-update.git
cd ASG-rolling-update

---Please-Change Your-Credentials---

ansible-playbook main.yml

Architacture with Jenkins Automated

  • Architacture

alt text

Behind the playbook

I just explained the primary thing ASG Rolling update and Which variables I used so if you have any further doubts please look at the YAML file complete.

ASG Rolling update (Primary Code)

# Dynmic Inventory Creation
    - name: "Task 07-Fetch ASG Created EC2 Details"
      ec2_instance_info:
        aws_access_key: "{{ access_key }}"
        aws_secret_key: "{{ secret_key }}"
        region: "{{ region }}"
        filters:
          "tag:aws:autoscaling:groupName": "{{ asg_status.auto_scaling_group_name }}"      <------- this is your ASG Name
          instance-state-name: [ "running"]
      register: asg_instances


    - name: "Task 08-Autoscale - Creating Dynamic Inventory Of Autoscaling EC2"
      add_host:                    <---------- Creating Dynmic Inventory
        name: "{{ item.public_ip_address }}"
        groups: "asg"
        ansible_host: "{{ item.public_ip_address }}"
        ansible_port: 22
        ansible_user: "ec2-user"
        ansible_ssh_private_key_file: ansible.pem
        ansible_ssh_common_args: "-o StrictHostKeyChecking=no"
      with_items:
        - "{{ asg_instances.instances }}"

# Play 02-Dyanamic Inventory Rolling Update. (Dynamic Inventory Play starts)
- name: "Task Dynamic Inventory Play 09-ASG Rolling Update Start"
  hosts: asg          <------------ host works with dynmic inventory (hosts)
  become: true
  serial: 1
  gather_facts: False
  vars_files:
    - instance.vars
  tasks:

Used Variables:

  • asg.vars
env: "ansible_project"  <---------- ProjectName
ami: "ami-0d5eff06f840b45e9" <---------- I used us-east-1 region so the AMI under us-east-1
key: "ansible" <-------------- Creating A keypair for entering ASG under instances
region: "us-east-1" <-------------- Region
sg_name: sgroup  <--------------- Security group were I used. 
type: "t2.micro" <---------------  Instance_type
count: "2" <----------------- ASG Count
  • cred.vars
access_key: "<your-access-key>"     <------------------ Enter your IAM Access Key
secret_key: "<your-secret-key>"     <------------------ Enter your IAM Secret Key

Conclusion

This playbook is used for ASG rolling update with a website contents from git without recreate instances. Furthermore, I tried to create a additional AWS infrastructure with a (ELB + ASG + Lauch Configuration + Security Group) through Ansible. So, you guys please reffer the playbook for creating infrastructure and dynamic inventory works with localhost inventory

⚙️ Connect with Me

About

We have created an ASG oriented ansible-playbook with dynamic inventory and its helps to update git contents which if the currently available instances and you can use this manually or automate via Jenkins like (continues deployment) and who use the playbook it never needs to create instances unwanted.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages