Introduction
Sebelumnya kita perlu tahu terlebih dahulu mengenai apa itu terraform , kemudian apa sih kegunaanya dan kenapa harus menggunakan Terraform, nah pada artikel kali ini saya akan menjelaskan sedikit tentang hal tsb.
Terraform adalah sebuah tools yang dibuat untuk membuat mengubah dan juga menggabungkan sebuah infrastruktur dengan smooth dan efisien menggunan code, atau konsep ini dikenal juga dengan istilah “Infrastructure as Code”.
Apa itu infrsatructure as code ? sebuah sistem atau metode pengelolaan infrastructure IT khusunya server yang menggunakan file konfigurasi berbasi code/coding dan beberapa bahasa pemograman yang kita gunakan seperti : Typescript, Python, java, C# & Golang
Kenapa kita perlu menggunakan metode “Infrastructure as Code” ? Hal-hal konfigurasi seperti creaate vm, storage dll yang semula manual via GUI dan juga tidak terdokumentasi kenapa IaC ini sangat membantu untuk mengkonfigurasi dan mengelola infrastruktur komponen tingkat rendah seperti membuat VM di cloud, Storage dan VPC, serta juga komponen tingkat tinggi lainya seperti entry DNS “management DNS”, fitur SAAS, dan lainya.

Prepare
Hal-hal yang perlu disiapkan untuk ngelab pada artikel ini adalah sebagai berikut :
- Install Terraform
- Code editor
- AWS Account
- Linux/WSL “AWS CLI”
Sebelumnya pastikan anda sudah melakukan export key account AWS anda, jika belum silahkan check artikel saya yang satu ini :
Study Case : Pada saat saya sedang membaca artikel tentang hal-hal yang berkaitan tentang DevOps, saya penasaran tentang apa itu Terraform dan juga bagaimana cara atau metode untuk menjalankanya pada sebuah cloud ?, nah karena hal itu lah saya mencoba mencari sebuah study case untuk praktik secara langsung atau implementasi penggunaan terraform ke AWS, karena tujuanya adalah supaya konfigurasi kita terdokumentasi dengan baik jika ada perubahan , update dan lainya ter commit di repository, dan untuk detail study case sebagai berikut :
Create ec2 in aws with Terraform “Infrastructure as a code”
Installation
Penggunaan terraform untuk provisioning instance
- 1 VPC
- 1 Public subnet
- Security Group
- Create Internet Gateway
- Create route
- Create 2 instance on AWS
Check it out
Step 1 – Create File Terraform
Ada 2 file yang akan kita gunakan

- Main.tf : berisi file konfigurasi yang akan kita gunakan nantinya contoh seperti, kita akan membuat vpc, subnet, security group dan juga instance dll
- Terraform.rf : adlaah file kofngiruasi yang berisikan tentang provider apa yang akan kita automation dan juga versi dari terraform itu sendiri.
untuk file diatas sebenarnya beragam yang digunakan seperti variable, output dll, secara fungsi sama.
terraform.tf
terraform {
//Version terraform yang digunakan
required_version = "~> 1.2.6"
required_providers {
aws = {
version = "~> 4.24.0"
//Version aws provider yang disupport
}
}
}
main.tf
Step 2 – Create VPC network
Task pertama kita akan membuat resource untuk VPC nya terlebih dahulu, untuk registrynya ada di dokumentasi resmi terraform https://registry.terraform.io/providers/hashicorp/aws/latest/docs
#create vpc
resource "aws_vpc" "lab-1" {
cidr_block = "10.5.0.0/16"
tags = {
Name = "terraform-aws-vpc"
}
}
aws_vpc adalah type resource yang sudah terdaftar di aws & terraform
lab-1 nama resource bisa di custom sesuai dengan kebutuhan
cidr_block adalah subnet IP yang akan kita gunakan, karena subnet itu tidak bisa dirubah ketika sudah di create maka saya membuat spare subnet /16 yang akan saya gunakan
tags nama tags untuk membuat deskripsi
Step 3 – Create Private Subnet
Task kedua membuat private subnet yang diambil dari salah satu subnet VPC yang kita buat
#create Public subnet
resource "aws_subnet" "public.subnet" {
vpc_id = aws_vpc.lab-1.id
cidr_block = "10.5.10.0/24"
tags = {
Name = "terraform-aws-public_subnet"
}
}
aws_subnet type resource
private_subnet nama resource custom yang bisa digunakan
vpc_id = type_resource dot nama_resource ditambahkan dot id
Step 4 – Create Security Group
Task ketiga adalah membuat security group yang dimana fungsi dari security group ini ibarat adalah firewall , contohnya adalah kita akan membuka aksess beberapa PORT TCP/IP & ICMP seperti SSH, Web, HTTPS dll, agar server dapat berkomunikasi ke external maupun internal
#create aws security group
resource "aws_security_group" "sg_terraform_lab" { #sg "security group"
name = "sg_terraform_lab"
description = "Configure Securty group for Terraform"
vpc_id = aws_vpc.lab-1.id
ingress {
description = "Allow SSH"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "Allow Web"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "Allow all protocol yang masuk"
from_port = -1
to_port = -1
protocol = "icmp"
cidr_blocks = [0.0.0.0/0]
}
ingress {
description = "Allow https from internet"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = [aws_vpc.lab-1.cidr_block]
}
egress {
description = "Allow semua protocol yang keluar"
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "sg_terraform_lab"
}
aws_security_group Resource yang digunakan oleh terraform untuk manage security group di aws
vpc_id = type_resource dot nama_resource ditambahkan dot id
ingress adalah konfigurasi yang ditambahkan untuk akses dari eksternal kedalam / internal
egress adalah konfigurasi yang ditambahkan untuk mengijinkan protocol dari dalam/internal ke luar/eksternal
Step 5 – Create Internet Gateway
Disini kita membuat internet gateway berfungsi untuk menghubungkan antara subnet VPC main kita ke internet atau internal ke eksternal begitupun sebaliknya
#create internet gateway supaya bisa diakses dari luar
resource "aws_internet_gateway" "igw_labterraform" {
vpc_id = aws_vpc.lab-1.id
tags = {
Name = "Int gateway"
}
}
aws_internet_gateway resource yang digunakan untuk membuat int gateway
vpc_id disesuaikan dengan VPC main kita
Step 6 – Create Route
Route diperlukan untuk membuka komunikasi antara VPC atau instance ke pihak eksternal melalui Internet gateway yang sudah kita buat.
#Create route for VPC main to 0.0.0.0/0
resource "aws_route" "route" {
route_table_id = "rtb-0d988ec3cecc72e2a"
destination_cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.igw_labterraform.id
}
aws_route resource yang diperlukan untuk membuat route
route_table_id parameter yang diambil dari console AWS yang dimana itu otomatis ter create ketika kita membuat VPC main
destination_cidr_block adalah kita meng allow semua ip supaya kita bisa akses vps atau instance tersebut
gateway_id berisikan tentang nama value dari internet gateway itu sendiri yang kita buat
Step 7 – Create Instance
Task selanjutnya adalah ketika kita sudah membuat ip kemudian security group, maka selanjutnya kita setup konfigurasi instance di terraform sebagai berikut
#create EC2 or instance on AWS
resource "aws_instance" "lab_terraform" {
count = 2
ami = "ami-043f1fdec42408287"
instance_type = "t3.micro"
vpc_security_group_ids = [aws_security_group.sg_terraform_lab.id]
subnet_id = aws_subnet.private_subnet.id
associate_public_ip_address = true
key_name = "key-pair-terraform"
tags = {
Name = "lab-terraform"
Owner = "Gunawan"
}
}
aws_instance adalah resource yang digunakan terraform untuk membuat instance
count digunakan untuk menentukan berapa jumlah instance yang akan kita buat nantinya
ami adalah type image yang ada di AWS
instance_type adalah jenis atau spesifikasi yang akan digunakan
vpc_security_group_ids = parameters aws instance untuk define security group
[aws_security_group dot nama_tag_security_group dot id] //type data : string list data
subnet_id adalah parameter aws instance untuk define subnet yang akan digunakan
associate_public_ip_address adalah paraeter aws instance untuk mendefine bahwa kita butuh IP public untuk diremote dari luar //type data boolean
key_name adalah nama keypair , sebelumnya kita harus tambahkan terlebih dahulu id_rsa.pub di laptop kita kedalam console AWS
Step 8 – Provisioning Instance
Ketika menjalankan terraform terdapat tiga perintah yang sering dijalankan
Terraform init diperlukan untuk inisialisasi awal pada directory file terraform kita

terraform planuntuk mengetahui resource apa saja yang kita akan buat

terraform applyuntuk melakukan provisioning membuat resource pada cloud provider kita dalam hal ini aws

terraform destroyadalah menghapus semua resource yang telah dibuat sebelumnya

Step 9 – Check console & Access SSH
Kemudian kita check terlebih dahulu apakah instance berhasil tercreate

Dan yang terakhir kita testing akses remote SSH nya


Selamat mencoba
NB : tfstate ketika kita membuat atau melakukan konfigurasi terraform akan ada 1 file dengan nama tfstate yang dimana file itu adalah sebuah kondisi sekarang atau saat ini dimana konfigurasimu sedang berlangsung, ketika melakukan perubahan , penammbahan atau pengurangan , jadi betapa pentingnya file ini ketika sebuah infra sudah production atau berjalan agar perlu diperhatikan agar file tersebut tidak hilang atau lebih baik di simpan di external bukan di laptop kita


Admin website igunawan.com, System Administrator, DevOps Engineer