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
Now writing host file:
[local] localhost [testserver]
Now writing ec2-playbook.yml to perform
--- - 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
Cookies are important to the proper functioning of a site. To improve your experience, we use cookies to remember log-in details and provide secure log-in, collect statistics to optimize site functionality, and deliver content tailored to your interests. Click Agree and Proceed to accept cookies and go directly to the site or click on View Cookie Settings to see detailed descriptions of the types of cookies and choose whether to accept certain cookies while on the site.
About Author
Ankit Arora
Ankit is a Redhat Certified Engineer and Cloud Engineer.