This is the first article in a series that covers the end-to-end process of creating an Elastic Compute Cloud (EC2) instance on Amazon Web Services (AWS) using Red Hat Ansible Automation Platform. This tutorial demonstrates the steps required to set up the necessary resources to create an EC2 instance using the AWS module in Ansible Automation Platform.
Follow our 3-part series:
Part 1: How to create an EC2 instance in AWS using Ansible CLI
Part 2: How to create an EC2 instance in AWS using Ansible Automation
Part 3: How to create an EC2 instance in AWS using Ansible workflow
By the end of this article, you will have a better understanding of how to use the Ansible Automation Platform CLI to manage an EC2 instance and how it can help to streamline your infrastructure management workflows.
Prerequisites
- You must have an active AWS account.
How to create an EC2 instance
The following steps demonstrate how to use the Ansible Automation Platform CLI to create an EC2 instance on AWS.
- Step 1: Generate the access key and secret key from the AWS documentation.
- Step 2: Open any editor on your local machine and enter the following .yml:
--- # Creating an EC2 Instance
- name: Creating an EC2 Instance with ansible cli
hosts: localhost
vars:
region: ap-south-1
instance_type: t3.micro
ami: ami-0f9d9a251c1a44858
key_name: ansible-demo
vpc_name: ansible-vpc-test
cidr_block: "10.10.0.0/16"
cidr: "10.10.0.0/24"
aws_access_key:<YOUR ACCESS KEY>
aws_secret_key: <YOUR SECRET KEY>
tasks:
- name: Create a new VPC
amazon.aws.ec2_vpc_net:
name: "Ansible-Test"
cidr_block: "{{ cidr_block }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
region: "{{ region }}"
register: vpc
- name: Create a new Subnet
amazon.aws.ec2_vpc_subnet:
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
cidr: "{{ cidr }}"
region: "{{ region }}"
vpc_id: "{{ vpc.vpc.id }}"
register: subnet
- name: Create a Security Group
amazon.aws.ec2_security_group:
name: "Ansible-Test-Security-Group"
description: "Ansible-Testing"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
vpc_id: "{{ vpc.vpc.id }}"
region: "{{ region }}"
rules:
- proto: tcp
ports:
- 80
cidr_ip: 0.0.0.0/0
rule_desc: "allow all on port 80"
register: security_group
- name: Launch an EC2 Instance
amazon.aws.ec2_instance:
name: "Test-Ansible"
key_name: "{{ key_name }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
vpc_subnet_id: "{{ subnet.subnet.id }}"
instance_type: "{{ instance_type }}"
security_group: "{{ security_group.group_id }}"
count: 1
wait: yes
aws_region: "ap-south-1"
network:
assign_public_ip: true
image_id: "{{ ami }}"
- Step 3: Save and close the file.
- Step 4: Open the terminal in the directory where the file is located on your local machine.
- Step 5: Run the following command:
ansible-playbook <filename>.yml
The output is as follows:
ansible-playbook create_ec2_cli.yml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [Creating an EC2 Instance with ansible cli] ******************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Create a new VPC] *******************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Create a new Subnet] ****************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Create a Security Group] ************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Launch an EC2 Instance] *************************************************************************************************************************************************************************************
changed: [localhost]
PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Figure 1 illustrates the EC2 instance in AWS.
Stay tuned for more learning opportunities
In this article, we have demonstrated how to create an EC2 instance using Ansible Automation Platform. By following this step-by-step guide, you should now have a good understanding of how to use Ansible Automation Platform to create an EC2 instance on AWS. To learn more about Ansible Automation Platform and additional resources and guides, including examples and use cases, we recommend visiting the Red Hat Ansible Automation Platform learning portal.
If you are interested in exploring how to use Ansible Automation Platform on Azure, you can try hands-on interactive labs. These labs show how to automate infrastructure deployment. To understand automation more in-depth, you can refer to the e-book An IT executive's guide to automation, which provides a comprehensive overview of automation's impact on businesses. If you are new to Ansible Automation Platform, you can download it and get started by exploring interactive labs at no cost. Keep exploring and stay up to date with the latest trends and techniques in cloud infrastructure management on Red Hat Developer.
In our next article, we will explore how Ansible Automation Platform further eases the process of creating EC2 instances, by enabling you to define infrastructure as code, track infrastructure changes, and enforce compliance policies.
Last updated: January 11, 2024