☀️Siang
DevOps & Cloud

Terraform: Infrastructure as Code

Tutorial lengkap Terraform untuk Infrastructure as Code — konsep IaC, HCL syntax, providers, resources, state management, modules, dan best practices untuk mengelola infrastruktur cloud secara terprogram

Artikel: Terraform Iac Artikel: Terraform Iac


1. Konsep Infrastructure as Code

Infrastructure as Code (IaC) adalah pendekatan pengelolaan infrastruktur IT melalui kode yang dapat dibaca manusia, bukan melalui konfigurasi manual melalui web console. Dengan IaC, Anda bisa membuat, memodifikasi, dan menghapus infrastruktur cloud secara konsisten dan reproducible.

Terraform adalah tool IaC open-source yang dikembangkan oleh HashiCorp. Terraform menggunakan bahasa deklaratif bernama HCL (HashiCorp Configuration Language) untuk mendeskripsikan infrastruktur yang diinginkan, lalu menghitung dan menjalankan langkah-langkah yang diperlukan untuk mencapai state tersebut.

Mengapa Terraform?

Keunggulan Penjelasan
Multi-CloudBisa mengelola infrastruktur di AWS, GCP, Azure, dan 1000+ provider lainnya
DeclarativeCukup deskripsikan akhir state yang diinginkan, Terraform menangani cara mencapainya
Version ControlInfrastruktur di-version sebagai kode di Git — bisa track perubahan dan rollback
ReusableModul bisa digunakan kembali di berbagai project dan environment
PlanningFitur terraform plan menunjukkan perubahan sebelum diterapkan
State TrackingTerraform melacak state aktual infrastruktur dan membandingkannya dengan desired state
Dependency GraphSecara otomatis menentukan urutan pembuatan resource berdasarkan dependency

IaC vs Manual Provisioning

Aspek Manual (Console) IaC (Terraform)
Kecepatan🔴 Lambat, satu per satu🟢 Cepat, sekaligus
Konsistensi🔴 Rentan human error🟢 Identik setiap kali
Dokumentasi🔴 Dokumentasi terpisah🟢 Kode = dokumentasi
Reproduksi🔴 Sulit mengulang🟢 Jalankan ulang kapan saja
Collaboration🔴 Satu orang tahu🟢 Semua orang bisa baca kode
Rollback🔴 Manual dan rumit🟢 terraform apply versi sebelumnya
Scalability🔴 Tidak practical🟢 Scale dengan mudah
Diagram: Cara Kerja Terraform
Cara Kerja Terraform
3. Apply Execute Changes

HCL Config Files

Diff: Current vs Desired

API Calls to Cloud Provider

1. Write Code (.tf)

State File (tfstate)

Install Terraform

Terraform Core • HCL Parser • State Manager ...

Kubernetes Provider • Pods • Services • Deploym...

AWS Provider • EC2 • S3 • RDS • VPC • Lambda • EKS

Google Cloud Provider • GCE • GKE • Cloud SQL •...

⚠️ Version Constraint

Gunakan version constraint untuk menghindari breaking changes. Tanda ~> 5.0 berarti "gunakan versi 5.x terbaru, tetapi jangan upgrade ke 6.0". Tanda = 5.82.2 berarti "gunakan persis versi ini". Untuk production, selalu pin versi dengan ketat.



4. Resources & Data Sources

Resource adalah blok yang mendeskripsikan satu atau lebih infrastruktur objects — seperti EC2 instance, VPC, S3 bucket, atau DNS record. Data source memungkinkan Anda mengambil data dari provider yang sudah ada (bukan membuat baru) untuk digunakan dalam konfigurasi.

Resource Blocks

Diagram

plan

apply

destroy

terraform init

terraform fmt -recursive

terraform validate

terraform plan

terraform plan -out=tfplan No. Simpan plan ke file

terraform plan -var='instance_type=t3.medium' N...

terraform apply

terraform apply tfplan No. Apply dari file plan

terraform apply -auto-approve No. Skip confirma...

terraform apply -target=aws_instance.web_server...

terraform destroy

terraform destroy -target=aws_instance.web_serv...

terraform state list

terraform state show aws_instance.web_server

terraform import aws_instance.web_server i-1234...

terraform state rm aws_instance.web_server

terraform state mv aws_instance.old_name aws_in...

terraform refresh

terraform taint aws_instance.web_server

terraform apply -replace=aws_instance.web_server

terraform workspace list

terraform workspace new staging

terraform workspace select production

Diagram

.tf Config

Terraform Engine

Plan Current vs Desired

State File .tfstate

S3 Backend + DynamoDB Lock

Cloud Provider AWS / GCP / Azure

⚠️ Keamanan State


6. Modules

Module adalah kumpulan file Terraform (.tf) yang dikemas bersama untuk digunakan kembali. Module memungkinkan Anda mengorganisir kode, membagikannya ke tim, dan menghindari duplikasi. Setiap direktori yang berisi file .tf adalah sebuah module.

Root Module vs Child Module

HCL — Module Structure
Diagram: # STRUKTUR DIREKTORI
/"No. STRUKTUR DIREKTORI"/
main.tf
/"variables.tf"/
/"outputs.tf"/
/"providers.tf"/
/"modules/"/
vpc/
main.tf
/"variables.tf"/
/"outputs.tf"/
ec2/
main.tf
/"variables.tf"/
/"outputs.tf"/
rds/
main.tf
/"variables.tf"/
/"outputs.tf"/

Using Modules

HCL — Module Usage (main.tf)
# Menggunakan Local Module
module "vpc" {
source = "./modules/vpc"
name_prefix = local.name_prefix
environment = var.environment
vpc_cidr = "10.0.0.0/16"
availability_zones = ["ap-southeast-1a", "ap-southeast-1b"]
public_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
private_subnets = ["10.0.10.0/24", "10.0.11.0/24"]
}
module "ec2" {
source = "./modules/ec2"
name_prefix = local.name_prefix
environment = var.environment
subnet_ids = module.vpc.public_subnet_ids
# Menggunakan output dari module VPC!
}
# Menggunakan Remote Module (Terraform Registry)
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.1.2"
name = "${local.name_prefix}-vpc"
cidr = "10.0.0.0/16"
azs = ["ap-southeast-1a", "ap-southeast-1b"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
enable_nat_gateway = true
single_nat_gateway = true
tags = {
Environment = var.environment
ManagedBy = "terraform"
}
}
# Output dari Module
output "vpc_id" {
value = module.vpc.vpc_id
}
output "public_subnets" {
value = module.vpc.public_subnet_ids
}

Best Practices untuk Modules

📌 Module Best Practices
Bash — Terraform Testing & Linting
# tflint — Terraform Linter
# Install
brew install tflint
# Run
tflint --init
tflint --recursive
# terraform validate
terraform validate
# Success! The configuration is valid.
# checkov — Security scanning
pip install checkov
checkov -d .
# terraform-docs — Generate documentation
brew install terraform-docs
terraform-docs markdown table ./modules/vpc > ./modules/vpc/README.md
💡 Terraform Registry

Kunjungi registry.terraform.io untuk menemukan ribuan module dan provider yang sudah dibuat komunitas. Module populer seperti terraform-aws-modules/vpc sudah digunakan oleh ribuan perusahaan dan sangat teruji. Jangan reinvent the wheel — gunakan module yang sudah ada jika memungkinkan.



7. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Terraform dan Infrastructure as Code:

Pertanyaan 1: Apa perbedaan utama antara IaC (deklaratif) dan scripting (imperatif)?

a) IaC hanya bisa digunakan di cloud, scripting bisa di mana saja
b) IaC mendeskripsikan state akhir yang diinginkan, scripting mendeskripsikan langkah-langkah untuk mencapainya
c) IaC lebih lambat dari scripting
d) Tidak ada perbedaan

Pertanyaan 2: Perintah apa yang digunakan untuk preview perubahan sebelum diterapkan ke infrastruktur?

a) terraform apply
b) terraform init
c) terraform plan
d) terraform validate

Pertanyaan 3: Mengapa file terraform.tfstate TIDAK boleh di-commit ke Git?

a) Terlalu besar ukurannya
b) Bisa mengandung password, API keys, dan data sensitif lainnya
c) Formatnya tidak kompatibel dengan Git
d) Tidak ada alasan khusus

Pertanyaan 4: Apa fungsi dari "data source" dalam Terraform?

a) Membuat resource baru di cloud
b) Menghapus resource yang sudah ada
c) Mengambil informasi dari resource atau provider yang sudah ada untuk digunakan dalam konfigurasi
d) Mengatur authentication ke cloud provider

Pertanyaan 5: Apa kepanjangan dari HCL dalam konteks Terraform?

a) HashiCorp Cloud Language
b) HashiCorp Configuration Language
c) High-level Configuration Language
d) Hybrid Cloud Language
🔍 Zoom
100%
🎨 Tema