Provisioning EC2 Instances using Ansible 2.0.

Posted By : Ankit Arora | 25-Sep-2017

Provisioning EC2 Instances using Ansible 2.0.

Ansible is a great tool to provision EC2 instances. Ansible provisioning gives us the power to automate

or perform tasks easily on AWS architecture.

 

Requirements:

  • Python boto
  • Ansible 2.0

 

Set up AWS access & secret keys in the ~/.boto file. If file is not present then create it.

 

Now writing host file:



[local]

localhost


[testserver]

 

Now writing ec2-playbook.yml to perform task:



---   

  - name: Provisioning an EC2 Instance

      hosts: local       connection: local        gather_facts: False  # For making provisioning faster.       tags: provision       # Below are the variables for creating/provisioning the EC2 Instance       vars:         instance_type: t1.micro         security_group: testserver # Change the security group name here         image: ami-98aa1cf0 # Change the AMI, from which you want to launch the server         region: us-east-1 # Change the Region         keypair: ansible # Change the keypair name         count: 2 # This will create 2 servers.           # Task that will be used to Launch/Create an EC2 Instance       tasks:         - name: Create a security group           local_action:              module: ec2_group             name: "{{ security_group }}"             description: Security Group for webserver Servers             region: "{{ region }}"             rules:               - proto: tcp                 type: ssh                 from_port: 22                 to_port: 22                 cidr_ip: 0.0.0.0/0               - proto: tcp                 from_port: 80                 to_port: 80                 cidr_ip: 0.0.0.0/0             rules_egress:               - proto: all                 type: all                 cidr_ip: 0.0.0.0/0                 - name: Launching the new EC2 Instance           local_action: ec2                          group={{ security_group }}                          instance_type={{ instance_type}}                          image={{ image }}                          wait=true                          region={{ region }}                          keypair={{ keypair }}                         count={{count}}           register: ec2             - name: Add the newly created EC2 instance(s) to the local host group (located inside the directory)           local_action: lineinfile                          dest="./hosts"                          regexp={{ item.public_ip }}                          insertafter="[webserver]" line={{ item.public_ip }}           with_items: "{{ ec2.instances }}"           - name: Wait for SSH to come up           local_action: wait_for                          host={{ item.public_ip }}                          port=22                          state=started           with_items: "{{ ec2.instances }}"             - name: Add tag to Instance(s)           local_action: ec2_tag resource={{ item.id }} region={{ region }} state=present           with_items: "{{ ec2.instances }}"           args:             tags:               Name: testserver  

 

Now spinning up the instances using:

ansible-playbook -i hosts ec2-playbook.yml

 

Thanks

About Author

Author Image
Ankit Arora

Ankit is a Redhat Certified Engineer and Cloud Engineer.

Request for Proposal

Name is required

Comment is required

Sending message..