In this tutorial, How to install Terraform on Centos and Ubuntu. Terraform an Open Source tool. It is safely and predictably create, improve and change Infrastructure.
Table of Contents
Feature Key
- Infrastructure as Code
- Change Automation
- Execution Plans
- Resource Graph
Install Terraform on Centos 7
Link download Terraform here. In this tutorial, The current version of Terraform is 0.12.16
$ sudo yum install wget unzip
$ wget https://releases.hashicorp.com/terraform/0.12.16/terraform_0.12.16_linux_amd64.zip
$ sudo unzip ./terraform_0.12.16_linux_amd64.zip -d /usr/local/bin/
Check Terraform has been installed on your system
$ terraform -v
The output terraform version as below
[vagrant@DevopsRoles ~]$ terraform -v
Terraform v0.12.16
Install Terraform on Ubuntu 18.04
$ sudo apt-get install wget unzip
$ wget https://releases.hashicorp.com/terraform/0.12.16/terraform_0.12.16_linux_amd64.zip
$ sudo unzip ./terraform_0.12.16_linux_amd64.zip -d /usr/local/bin/
Check Terraform has been installed on your system
$ terraform -v
Build an EC2 instance with Terraform
Terraform supports various providers. Example create main.tf file.
$ vi main.tf # The content as below: provider "aws" { access_key = "ACCESS_KEY" secret_key = "SECRET_KEY" region = "us-east-2a" }
Resource settings
The syntax is the resource “resource type” “resource name”.
Details: https://www.terraform.io/docs/providers/aws/index.html
Example like this
[vagrant@DevopsRoles terraform]$ cat main.tf provider "aws" { access_key = "ACCESS_KEY" secret_key = "SECRET_KEY" region = "us-east-2" } resource "aws_instance" "testEC2" { ami = "ami-0c64dd618a49aeee8" instance_type = "t2.micro" #key_name = "AWS-HUUPV"vpc_security_group_ids = [
"sg-00c448cd3e48ba684"
]
associate_public_ip_address = "true"
root_block_device {
volume_type = "gp2"
volume_size = "20"
}
# EBS ebs_block_device { device_name = "/dev/sdf" volume_type = "gp2" volume_size = "10" } tags = { Name = "testEC2" } } output "public_ip_of_testEC2" { value = "${aws_instance.testEC2.public_ip}" }
Note
ami
Access_key and Secure_key. You click IAM –> Roles
Build on AWS
[vagrant@DevopsRoles terraform]$ terraform init
[vagrant@DevopsRoles terraform]$ terraform plan
[vagrant@DevopsRoles terraform]$ terraform apply
The log console terraform as below
[vagrant@DevopsRoles terraform]$ terraform plan Refreshing Terraform state in-memory prior to plan… The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: create Terraform will perform the following actions: # aws_instance.testEC2 will be created resource "aws_instance" "testEC2" { ami = "ami-0c64dd618a49aeee8" arn = (known after apply) associate_public_ip_address = true availability_zone = (known after apply) cpu_core_count = (known after apply) cpu_threads_per_core = (known after apply) get_password_data = false host_id = (known after apply) id = (known after apply) instance_state = (known after apply) instance_type = "t2.micro" ipv6_address_count = (known after apply) ipv6_addresses = (known after apply) key_name = (known after apply) network_interface_id = (known after apply) password_data = (known after apply) placement_group = (known after apply) primary_network_interface_id = (known after apply) private_dns = (known after apply) private_ip = (known after apply) public_dns = (known after apply) public_ip = (known after apply) security_groups = (known after apply) source_dest_check = true subnet_id = (known after apply) tags = { "Name" = "testEC2" } tenancy = (known after apply) volume_tags = (known after apply) vpc_security_group_ids = [ "sg-00c448cd3e48ba684", ] ebs_block_device { delete_on_termination = true device_name = "/dev/sdf" encrypted = (known after apply) iops = (known after apply) kms_key_id = (known after apply) snapshot_id = (known after apply) volume_id = (known after apply) volume_size = 10 volume_type = "gp2" } ephemeral_block_device { device_name = (known after apply) no_device = (known after apply) virtual_name = (known after apply) } network_interface { delete_on_termination = (known after apply) device_index = (known after apply) network_interface_id = (known after apply) } root_block_device { delete_on_termination = true encrypted = (known after apply) iops = (known after apply) kms_key_id = (known after apply) volume_id = (known after apply) volume_size = 20 volume_type = "gp2" } } Plan: 1 to add, 0 to change, 0 to destroy. Note: You didn't specify an "-out" parameter to save this plan, so Terraform can't guarantee that exactly these actions will be performed if "terraform apply" is subsequently run. [vagrant@DevopsRoles terraform]$ terraform apply An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: create Terraform will perform the following actions: # aws_instance.testEC2 will be created resource "aws_instance" "testEC2" { ami = "ami-0c64dd618a49aeee8" arn = (known after apply) associate_public_ip_address = true availability_zone = (known after apply) cpu_core_count = (known after apply) cpu_threads_per_core = (known after apply) get_password_data = false host_id = (known after apply) id = (known after apply) instance_state = (known after apply) instance_type = "t2.micro" ipv6_address_count = (known after apply) ipv6_addresses = (known after apply) key_name = (known after apply) network_interface_id = (known after apply) password_data = (known after apply) placement_group = (known after apply) primary_network_interface_id = (known after apply) private_dns = (known after apply) private_ip = (known after apply) public_dns = (known after apply) public_ip = (known after apply) security_groups = (known after apply) source_dest_check = true subnet_id = (known after apply) tags = { "Name" = "testEC2" } tenancy = (known after apply) volume_tags = (known after apply) vpc_security_group_ids = [ "sg-00c448cd3e48ba684", ] ebs_block_device { delete_on_termination = true device_name = "/dev/sdf" encrypted = (known after apply) iops = (known after apply) kms_key_id = (known after apply) snapshot_id = (known after apply) volume_id = (known after apply) volume_size = 10 volume_type = "gp2" } ephemeral_block_device { device_name = (known after apply) no_device = (known after apply) virtual_name = (known after apply) } network_interface { delete_on_termination = (known after apply) device_index = (known after apply) network_interface_id = (known after apply) } root_block_device { delete_on_termination = true encrypted = (known after apply) iops = (known after apply) kms_key_id = (known after apply) volume_id = (known after apply) volume_size = 20 volume_type = "gp2" } } Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_instance.testEC2: Creating… aws_instance.testEC2: Still creating… [10s elapsed] aws_instance.testEC2: Still creating… [20s elapsed] aws_instance.testEC2: Still creating… [30s elapsed] aws_instance.testEC2: Creation complete after 36s [id=i-0501a62ccf6380761] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: public_ip_of_testEC2 = 18.191.123.168
Check on the AWS console!
Have a good nice! Thank you for reading the DevopsRoles page!