Pengantar
Terraform adalah alat Infrastructure as Code (IaC) yang memungkinkan kita untuk mendefinisikan dan mengelola infrastruktur cloud menggunakan kode. Salah satu implementasi umum Terraform adalah membuat instance EC2 di VPC AWS.

Artikel ini akan membahas langkah demi langkah, mulai dari instalasi Terraform hingga membuat EC2 di dalam VPC lengkap dengan subnet, security group, dan key pair.
1. Persiapan Lingkungan
Sebelum memulai, pastikan Anda memiliki:
- Akun AWS dengan akses IAM yang memiliki izin untuk membuat VPC, EC2, Security Group, dan Key Pair.
- Terraform terinstal di sistem Anda. Cek versi Terraform:
terraform version
- AWS CLI (opsional tapi membantu) dan sudah dikonfigurasi dengan kredensial:
aws configure
2. Membuat Struktur Direktori Terraform
Buat direktori proyek Terraform, misalnya:
mkdir terraform-ec2-vpc
cd terraform-ec2-vpc
Di dalam direktori ini, buat file-file berikut:
main.tf→ definisi sumber daya (resources)variables.tf→ deklarasi variabeloutputs.tf→ output hasil eksekusi Terraformprovider.tf→ konfigurasi provider AWS
3. Konfigurasi Provider AWS
Buat file provider.tf untuk menentukan provider AWS:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
required_version = ">= 1.5.0"
}
provider "aws" {
region = "ap-southeast-1" # ganti dengan region yang Anda inginkan
}
4. Membuat VPC
File main.tf dapat digunakan untuk membuat VPC baru:
resource "aws_vpc" "main_vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "main-vpc"
}
}
resource "aws_subnet" "main_subnet" {
vpc_id = aws_vpc.main_vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "ap-southeast-1a"
tags = {
Name = "main-subnet"
}
}
Penjelasan:
aws_vpc→ membuat VPC dengan CIDR 10.0.0.0/16aws_subnet→ membuat subnet dalam VPC dengan CIDR 10.0.1.0/24
5. Membuat Security Group
Agar EC2 bisa diakses via SSH, buat Security Group:
resource "aws_security_group" "sg_ssh" {
name = "allow_ssh"
description = "Allow SSH inbound traffic"
vpc_id = aws_vpc.main_vpc.id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "allow-ssh"
}
}
6. Membuat Key Pair
Agar bisa login ke EC2, buat key pair AWS (atau gunakan key pair yang sudah ada):
resource "aws_key_pair" "my_key" {
key_name = "my-key"
public_key = file("~/.ssh/id_rsa.pub") # path ke public key lokal
}
7. Membuat Instance EC2
Terakhir, buat EC2 di subnet yang sudah dibuat:
resource "aws_instance" "my_ec2" {
ami = "ami-0b0dcb5067f052a63" # ganti sesuai region
instance_type = "t2.micro"
subnet_id = aws_subnet.main_subnet.id
key_name = aws_key_pair.my_key.key_name
vpc_security_group_ids = [aws_security_group.sg_ssh.id]
tags = {
Name = "my-ec2-instance"
}
}
8. Mendefinisikan Output
Buat file outputs.tf untuk menampilkan informasi EC2 setelah deployment:
output "instance_id" {
value = aws_instance.my_ec2.id
}
output "instance_public_ip" {
value = aws_instance.my_ec2.public_ip
}
9. Menjalankan Terraform
Langkah-langkah untuk menjalankan Terraform:
- Inisialisasi Terraform:
terraform init
- Melihat rencana (plan):
terraform plan
- Menerapkan perubahan (apply):
terraform apply
Setelah menekan yes, Terraform akan membuat VPC, subnet, security group, key pair, dan EC2.
10. Mengakses EC2
Setelah EC2 berjalan, Anda bisa mengaksesnya via SSH:
ssh -i ~/.ssh/id_rsa ec2-user@<EC2_PUBLIC_IP>
Catatan: Ganti
<EC2_PUBLIC_IP>dengan output dari Terraform.
11. Membersihkan Infrastruktur
Untuk menghapus semua resource yang dibuat oleh Terraform:
terraform destroy
Ini akan mencegah biaya yang tidak perlu di AWS.
12. Tips dan Best Practices
- Gunakan variabel untuk AMI, region, dan instance_type agar lebih fleksibel.
- Gunakan Terraform state backend seperti S3 untuk tim agar state tersimpan secara aman.
- Pisahkan resource ke beberapa file (VPC, EC2, SG) agar mudah di-maintain.
- Gunakan Terraform modules jika akan membuat pola EC2 + VPC berulang.
Dengan langkah-langkah di atas, Anda sekarang dapat membuat instance EC2 di VPC AWS secara otomatis menggunakan Terraform. Pendekatan ini jauh lebih efisien daripada membuat manual melalui AWS Console, apalagi jika Anda mengelola banyak instance dan jaringan.
