Creating an AWS EC2 Instance using Terraform
Requirements:
Step 1: AWS CLI Login
To start, log in to AWS using the CLI and configure your credentials:
aws configure
- Enter your Access Key, Secret Access Key, and Region.
- If you don't know them, refer to AWS CLI Configuration Guide.
- The region is essential for Terraform to know where to launch resources (e.g.,
ap-south-1
for India).
Step 2: Create a User via AWS CLI
Create an IAM user with the required permissions:
aws iam create-user --user-name omkara
Assign Administrator Access to the User:
aws iam attach-user-policy --user-name omkara --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
Generate Access Keys for Terraform Configuration:
aws iam create-access-key --user-name omkara
This command will return an AccessKeyId
and SecretAccessKey
. Copy them carefully and save them in a secure location, as they are required for Terraform.
Step 3: Key Pair for EC2 Instance
You will also need a key pair to access your EC2 instance via SSH. You can create this using the AWS Management Console or CLI:
The command creates an SSH key pair in AWS and saves the private key locally for EC2 instance access.
aws ec2 create-key-pair --key-name my-key-pair --query 'KeyMaterial' --output text > my-key-pair.pem
Explanation:
-
--key-name my-key-pair
: Creates a key pair named "my-key-pair." -
--query 'KeyMaterial'
: Extracts only the private key content. -
--output text > my-key-pair.pem
: Saves the private key to a file calledmy-key-pair.pem
.
After this, run chmod 400 my-key-pair.pem
to set secure permissions, and use this key to SSH into your EC2 instance.
Terraform Configuration
The Terraform configuration is made up of the following components:
- Provider: Specifies the provider (AWS, in this case) and its region.
- Resource: Defines the resource being created (an EC2 instance here).
- Output: (Optional) Used to display information.
- Variable: (Optional) Parameters to make the configuration dynamic.
- Data Sources: (Optional) External information sources.
For EC2 creation, we'll focus on provider and resource blocks.
Terraform Configuration File
Here’s a simple configuration file to create an EC2 instance:
provider "aws" {
alias = "india"
region = "ap-south-1"
}
resource "aws_instance" "jenkins-server" {
ami = "ami-0e53db6fd757e38c7" # Amazon Machine Image ID
instance_type = "t2.micro" # EC2 instance type
key_name = "ec2-login" # Name of the SSH key pair
}
Explanation of Parameters:
-
Provider Block:
-
region: Specifies the AWS region (e.g.,
ap-south-1
for India).
-
region: Specifies the AWS region (e.g.,
-
Resource Block:
- ami: Amazon Machine Image ID, which defines the operating system and software for the instance.
-
instance_type: Defines the instance's computing power (e.g.,
t2.micro
is a free-tier eligible, low-cost instance). - key_name: The name of the key pair used to SSH into the EC2 instance.
Terraform Commands:
-
terraform init
- Purpose: Initializes the Terraform configuration and downloads the necessary provider plugins (in this case, AWS).
- Use: Run this before any other Terraform command to set up your working directory.
terraform init
-
terraform plan
- Purpose: Runs a "dry run" to show you what resources will be created, modified, or destroyed.
- Use: It is good practice to run this command before applying changes to verify the configuration.
terraform plan
-
terraform apply
- Purpose: Applies the Terraform configuration and asks for confirmation before creating resources.
- Use: After reviewing the plan, run this command to create the EC2 instance. Enter "yes" when prompted.
terraform apply
-
terraform destroy
- Purpose: Destroys the resources managed by Terraform, including the EC2 instance.
- Use: Be careful when using this command, as it will delete the resources.
terraform destroy
Important Notes:
- Since you are already logged in via the AWS CLI, you don't need to mention AWS credentials in the Terraform file.
- In cases where you want to manage resources without the CLI login, you can include the
AccessKey
andSecretAccessKey
in the Terraform provider block, but this is not recommended due to security risks.
Conclusion:
By following these steps, you can create an AWS EC2 instance using Terraform. The process involves logging into AWS via the CLI, setting up a user with the necessary permissions, configuring Terraform, and using key commands such as terraform init
, plan
, apply
, and destroy
.
These commands help you manage your infrastructure as code, providing a more streamlined and consistent approach to resource management in the cloud.
Top comments (3)
Thanks!
Good post, but imo overly verbose. Nonetheless, thanks! :)
Great one!