Launching AWS EC2 Instances with Ansible: A Step-by-Step Guide

Ayushmaan Srivastav
4 min readOct 26, 2024

--

Managing cloud infrastructure can be complex, but automation tools like Ansible simplify provisioning and scaling cloud resources. In this blog, we will explore how to use Ansible to launch an EC2 instance on Amazon Web Services (AWS). Automating cloud infrastructure with Ansible not only reduces manual effort but also ensures consistency, scalability, and repeatability.

Why Use Ansible for AWS EC2 Automation?

Ansible is widely used for IT automation, and it integrates seamlessly with AWS to manage cloud infrastructure. Using Ansible to launch EC2 instances offers the following benefits:

  • Automated provisioning: Automatically launch and configure EC2 instances.
  • Idempotency: Ensures that tasks are executed once and only when required.
  • Scalability: Easy to scale infrastructure based on your needs.
  • Simplicity: Manage infrastructure with simple YAML playbooks.

Let’s dive into how to set up an Ansible playbook for launching an EC2 instance on AWS.

Prerequisites

  1. AWS Account: You need an AWS account with appropriate permissions to launch EC2 instances.
  2. AWS Access and Secret Keys: These are required for Ansible to authenticate with AWS.
  3. Ansible and Boto3 Installed: Ansible and the Boto3 Python library (for AWS API interaction) should be installed on your local machine.
  • Install Boto3 with the command:
pip install boto3

4. IAM Role: Ensure you have an IAM user with appropriate permissions to launch EC2 instances.

Step-by-Step Guide to Launch an EC2 Instance with Ansible

1. Set Up AWS Credentials

First, configure AWS credentials to allow Ansible to access your AWS account. You can do this by exporting your AWS Access and Secret keys as environment variables:

export AWS_ACCESS_KEY_ID='your_access_key'
export AWS_SECRET_ACCESS_KEY='your_secret_key'

Alternatively, you can configure these credentials using the AWS CLI:

aws configure

2. Ansible Inventory Configuration

You need to define the inventory to target your AWS environment. Create a hosts file with your localhost entry:

[local]
localhost

3. Install Ansible EC2 Module Dependencies

Ansible interacts with AWS through specific modules. To ensure that you have everything ready, install the amazon.aws collection:

ansible-galaxy collection install amazon.aws

4. Write the Ansible Playbook to Launch an EC2 Instance

Now, let’s write the playbook that will automate the process of launching an EC2 instance.

---
- name: Launch EC2 Instance with Ansible
hosts: localhost
gather_facts: False
vars:
instance_type: t2.micro
key_name: your_key_pair
region: us-east-1
image_id: ami-0c55b159cbfafe1f0 # This is the Ubuntu 20.04 AMI ID for us-east-1, change it for other regions
security_group: your_security_group

tasks:
- name: Launch a new EC2 instance
amazon.aws.ec2_instance:
key_name: "{{ key_name }}"
instance_type: "{{ instance_type }}"
image_id: "{{ image_id }}"
wait: yes
region: "{{ region }}"
vpc_subnet_id: subnet-12345678 # Replace with your subnet ID
group: "{{ security_group }}"
count: 1
assign_public_ip: yes
register: ec2

- name: Display the instance information
debug:
msg: "EC2 instance {{ ec2.instances[0].id }} launched successfully in region {{ region }}"

Playbook Breakdown:

  • amazon.aws.ec2_instance: This module is used to launch an EC2 instance. It takes parameters such as instance_type, key_name, image_id, and security_group.
  • Variables: Variables like instance_type, region, and key_name are defined in the vars section to make the playbook dynamic.
  • Debug Task: The debug task displays the instance ID and other details after successful launch.

5. Run the Playbook

Once the playbook is ready, run it using the following command:

ansible-playbook -i hosts launch_ec2.yml

After executing this command, Ansible will launch the EC2 instance with the specified configuration.

6. Verify the EC2 Instance

Once the playbook finishes, you can verify the instance from the AWS Management Console:

  • Go to the EC2 Dashboard.
  • Check if the instance is running under Instances.

Customizing the EC2 Instance Launch

You can further customize the EC2 launch process by adding additional tasks or tweaking variables in the playbook:

Adding Tags

Tags help identify instances in a large infrastructure. You can add tags to your EC2 instance by modifying the playbook like this:

tags:
Name: "MyAnsibleInstance"
Environment: "Development"

User Data for Instance Initialization

You can use user data to run scripts when the instance launches. For example, to install Apache upon launch:

user_data: |
#!/bin/bash
sudo apt update -y
sudo apt install apache2 -y

This will install Apache on the instance as soon as it launches.

Benefits of Using Ansible for AWS EC2 Instance Automation

  1. Consistency: Playbooks ensure that instances are launched and configured consistently every time.
  2. Scalability: You can easily scale your infrastructure by adjusting parameters like count to launch multiple instances.
  3. Flexibility: Ansible allows you to customize the instance launch process, including user data, instance type, and region.
  4. Error Reduction: By automating the EC2 instance creation process, you reduce the chances of human errors during provisioning.
  5. Repeatability: The playbook can be reused, shared with team members, or integrated into larger automation pipelines.
  6. Seamless Integration: Ansible integrates well with other AWS services, allowing you to manage VPCs, RDS instances, and more alongside EC2.

Conclusion

Automating the launch of EC2 instances using Ansible simplifies infrastructure management by making it repeatable, scalable, and error-free. The playbook provided in this blog serves as a starting point to customize and scale your cloud infrastructure according to your needs. Whether you’re managing a small development environment or a large production system, Ansible’s automation capabilities will save you time and reduce complexity.

--

--

No responses yet