Automasi Provisioning AWS EC2 Menggunakan Terraform
3 min read

Pada tahap ini, kita akan melakukan provisioning server EC2 secara otomatis. Menggunakan Infrastructure as Code (IaC) memastikan infrastruktur kita dapat direproduksi dengan cepat dan konsisten.
Berikut adalah struktur fundamental untuk membuat instance EC2. Kita menggunakan pendekatan modular agar konfigurasi ini bisa digunakan kembali untuk berbagai environment (Staging/Production).
module/main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
region = var.region
access_key = var.access_key
secret_key = var.secret_key
}
resource "aws_instance" "default" {
ami = var.ami
instance_type = var.instance_type
tags = {
Name = var.name
}
associate_public_ip_address = var.public_ip
subnet_id = var.subnet_id
key_name = var.key_name
vpc_security_group_ids = var.vpc_security_group_ids
}
Setelah Terraform berhasil membuat resource, kita tidak ingin repot membuka AWS Console hanya untuk mencari IP server. Di sinilah outputs.tf berperan. File ini berfungsi untuk mengekspos atribut spesifik dari resource yang telah dibuat sehingga bisa digunakan oleh modul lain atau ditampilkan langsung di terminal.
Module/Output.tf
output "instance_id" {
description = "ID unik dari instance EC2 yang dibuat"
value = aws_instance.default.id
}
output "public_ip" {
description = "Public IP address untuk akses SSH atau monitoring"
value = aws_instance.default.public_ip
}
Agar modul EC2 kita bersifat dinamis dan dapat digunakan kembali (reusable), kita perlu mendefinisikan variabel. Variabel memungkinkan kita untuk mengganti tipe instance, region, atau AMI tanpa harus mengutak-atik kode utama di main.tf.
Module/Vars.tf
variable "region" {
type = string
default = "ap-southeast-1" //Region Jakarta
}
variable "access_key" {
type = string
default = "AKIA4KA*********" //buat User di IAM AWS
}
variable "secret_key" {
type = string
default = "6klZ95kRV+OZWC**********" //buat User di IAM AWS
}
variable "ami" {
type = string
default = "ami-082b1f4237bd816a1" //lihat AMI ID saat create instance EC2 AWS
}
variable "instance_type" {
type = string
default = "t2.medium" //lihat Instance Type saat create instance EC2 AWS
}
variable "name" {
type = string
}
variable "public_ip" {
type = bool
default = true
}
variable "subnet_id" {
type = string
default = "subnet-0af42ddc7c8b1182f" //lihat di VPC AWS bagian subnet group
}
variable "key_name" {
type = string
default = "****" //create Key di bagian IAM AWS
}
variable "vpc_security_group_ids" {
type = list(any)
default = ["sg-03527e3d13cc3706c"] //lihat di bagian VPC AWS
}
Setelah kita membangun modul yang reusable, langkah terakhir adalah memanggil modul tersebut di dalam file utama (root). File server.tf ini bertindak sebagai manajer yang menentukan server apa saja yang ingin kita buat dengan memanfaatkan blueprint dari folder ./module.
module "Jenkins-server" {
source = "./module"
name = "Jenkins-server"
}
output "Jenkins_server_id" {
value = module.Jenkins-server.instance_id
}
output "Jenkins_server_public_ip" {
value = module.Jenkins-server.public_ip
}
Setelah semua file siap, saatnya kita mengeksekusi kode Terraform tersebut. Ada tiga langkah utama (Workflow) yang wajib kamu pahami untuk mengubah kode menjadi server nyata di AWS:
1. Inisialisasi Project
Langkah pertama adalah menyiapkan environment kerja. Perintah ini akan mendownload provider AWS yang dibutuhkan agar Terraform bisa berkomunikasi dengan API AWS.
terraform init
2. Preview Infrastruktur (The "Safety" Check)
Jangan pernah melewatkan tahap ini. Perintah ini akan memberikan simulasi atau rencana (plan) tentang apa yang akan dibuat, diubah, atau dihapus oleh Terraform tanpa benar-benar menyentuh infrastruktur kamu.
terraform plan
Mentor Note: Baca output-nya dengan teliti. Pastikan jumlah resource yang akan dibuat (Plan: X to add) sudah sesuai dengan ekspektasi.
3. Eksekusi dan Provisioning
Langkah terakhir adalah menerapkan perubahan. Terraform akan meminta konfirmasi sekali lagi sebelum benar-benar membangun server Jenkins kamu di AWS.
terraform apply

