Basic example of how to use modules in Terraform, interacting with
AWS cloud provider.
If you don't have an
AWSaccount just click here, click on the top right corner and follow the steps provided.
The basic requirements to run this project are:
- An
AWSaccount (dahhh). - Terraform version
>= 0.12. - git
latestversion (recommended).
This project is composed with:
- A main project (terraform folder)
- Single module example (terraform/modules/aws_ec2 folder)
Each folder has their own files:
- main.tf - main project code, where the resource/modules will be called
- variables.tf - project variables, where all the dynamic parameters can be specified
- outputs.tf - project outputs, where all the output information that we meed to obtain, can be specified
Steps needed in order to deploy the project.
First of all, clone the project repository:
git clone https://github.com/aanogueira/testing_aws.git; cd testing_aws/terraformOnce he have the code and before we can deploy anything, we need to initialize the modules:
cd modules/aws_ec2
terraform initOnce that's finished, we can go back to our main terraform project.
cd ../..We'll need to access our AWS console, navigate to our account name,
on the dropdown select security_credentials, navigate to access keys, select Create New Access Key
and you'll be presented with a prompt where you can see your new access_key and secret_key.
Copy them and save them, once you close the prompt you won't be able to see them again and you'll need to generate new ones.
Now, in order to access our remote AWS project, we'll need to setup the credentials. We can do it
in multiple ways. Below I'll present you with some alternatives.
Now that we have the credentials, we can access the AWS. To do it so, open and change
the terraform/main.tf file:
provider "aws" {
region = var.aws_region
access_key = "my-access-key"
secret_key = "my-secret-key"
}This approach isn't recommended since we are exposing our information in the code. If we decide to publish it, anyone with acces to the project will be able to see our private credentials.
Before we begin, we'll need to download the AWS CLI. To do it so by following the steps
on this link.
Once we have it installed on our machine, we can simply type:
aws configureAnd fill with the required information.
Now that we have the credentials setup, we can initialize our main project. Like we did in with modules, we just need to type:
terraform initIn order to fit our need, we can change the instance properties by changing the terraform/variables.tf values:
# Region of the project
variable "aws_region" {
type = string
description = "Project region."
default = "us-west-2" # Updated with your region
}
# ID of the instance to be created
variable "aws_ami" {
type = string
description = "Instance ami ID."
default = "ami-082335b69bcfdb15b" # This might need to be updated since they are constantly changing
}
# Type of the instance to be created
variable "aws_type" {
type = string
description = "Instance type."
default = "t2.micro" # Updated with your desired instance type (this one is present in the free tier)
}For example proposes, I've left some default values. The instance selected won't be charged since is in the free tier.
Before we can deploy our project, it's a good practice to validate it. To do it so we just need to type:
terraform validateThis will output the resources that will be created, teh ones that wil be changed as well as the ones that wil be deleted.
If everything went well, we should see that only 1 resource will be created.
Finally we can deploy the project. To do it so, we can type:
terraform applyA better approach would be to generate a file from the plan option and apply it afterwards:
terraform plan -out tfplan
terraform apply tfplanAaaaand congratulations! You just deployed your EC2 instance in your AWS project!
Once we validated that our project was created and we don't need it no more, we can destroy it by typing:
terraform destroy