stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-10
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 10: Terraform IaC (HCL, State, Module, GitOps Workflow)
PEBD6027 · RPS minggu 11 · 2x50 menit

Terraform IaC

Infrastructure as Code · HCL · State · Module · Plan/Apply Workflow

Peta Pembelajaran Hari Ini

Sub-CPMK 10: menerapkan Terraform untuk provisioning AWS. Empat indikator.

Jam ke-1
  • IaC konsep & manfaat
  • HCL anatomi: provider, resource, variable
  • State file & backend remote
Jam ke-2
  • Module reusable pattern
  • Workflow: init, plan, apply, destroy
  • Best practice: GitOps & lock state
Posisi 14P: setelah IAM P9, hari ini Terraform IaC. P11 Kubernetes container orchestration.

Mengapa Infrastructure as Code (IaC)?

IaC = definisikan infra dalam kode. Bukan click di console manual. Manfaat strategis.

Reduksi Human Error
~90%
Studi HashiCorp 2023 — konfigurasi otomatis vs manual
Speed Deploy
60-80%
Provisioning 50 server: dari jam ke menit
Click-ops manual tidak sustainable. Tidak audit trail, tidak reproducible, dan drift antar environment pasti terjadi.
Bagian 1 · 1/4
HCL Anatomy
Diskusi: bila startup punya 3 environment dev staging prod, bagaimana cara konsisten infra?

HCL Block: Provider, Resource, Variable

Tiga block fundamental HCL. Pahami sebelum tulis kode Terraform.

# Provider declaration
provider "aws" {
  region = "ap-southeast-3"
}

# Resource: EC2 instance
resource "aws_instance" "web" {
  ami           = "ami-0abc123"
  instance_type = var.instance_type
  tags          = { Name = "web-server" }
}

# Variable
variable "instance_type" {
  type    = string
  default = "t3.micro"
}
Provider
  • Plugin cloud target
  • aws, google, azurerm
  • Konfigurasi region & credential
  • Version via required_providers
Resource
  • Resource infra nyata
  • aws_instance, aws_s3_bucket
  • Argument sesuai dokumentasi
  • Computed: id, arn, ip
Variable
  • Input parameter kode
  • type, default, validation
  • Dilewatkan via tfvars
  • Output untuk expose value
HCL mirip JSON tapi lebih readable. Comment dengan #. String bisa di-interpolasi ${var.x}.

Terraform State File

State = mapping realitas infra ke kode. File JSON, wajib di-manage dengan baik.

Fungsi State
  • Track resource yang dibuat Terraform
  • Detect drift realita vs kode
  • Enable plan: preview changes
  • Performance cache resource attribute
Best Practice State
  • Remote backend: S3 + DynamoDB lock
  • Jangan commit ke Git (sensitif)
  • Workspace terpisah per env
  • State locking wajib (no concurrent apply)
State berisi sensitive value (password, key). Remote backend + encryption wajib. Jangan commit ke Git.

Studi Kasus: Bank Jago GitOps Terraform

Bank Jago pakai GitOps workflow dengan Terraform untuk provisioning 50+ AWS account.

Bank Jago pattern (public case study AWS, dihedge): Terraform Enterprise sebagai control plane, 1 repository Git per AWS account, PR review wajib 2 approver dari DevOps & Security team, plan otomatis di CI comment PR, apply manual setelah merge, state lock via DynamoDB, audit via CloudTrail + Terraform Enterprise log.
Pra-Terraform
  • Manual click per akun
  • Drift antar env pasti
  • Audit sulit
  • Onboarding akun baru: minggu
Pasca-Terraform
  • Module reusable per tipe akun
  • Konsisten 100%
  • Audit via Git history
  • Onboarding: 1 hari
Pelajaran Bisdig: IaC bukan teknis semata tapi governance. Compliance audit lebih mudah dengan Git history.

Hitung dari Nol: ROI Terraform untuk Startup

Startup fintech 3 env (dev/staging/prod), 30 resource per env, onboarding 2x/bulan. Berapa ROI?

LangkahAktivitasTime Save
1Provision manual 30 resource (console)8 jam × $50 = $400
2Provision Terraform (apply)30 menit × $50 = $25
3Hemat per deploy$375 × 3 env = $1125
4Deploy 2x/bulan × 12 = 24/bln$1125 × 24 = $27K/tahun
5Initial Terraform setup cost2 minggu × $50 × 40 = $4000
6Maintenance cost (10%/tahun)$50/bln × 12 = $600
7Net benefit tahun-1$27K - $4600 = $22K+
8Plus: konsistensi, audit, no driftBonus non-finansial (regulator)
Harga engineering $50/jam (dihedge). Bonus: compliance audit lebih mudah dengan Git history Terraform.
Bagian 2 · 2/4
Module & Reusability
Diskusi: bila startup punya 5 microservice yang semua butuh VPC+EC2+RDS, bagaimana DRY?

Module Terraform

Module = function Terraform. Kumpulan resource yang reusable dengan input variable dan output.

Anatomi Module
  • Folder dengan .tf files
  • variables.tf: input
  • outputs.tf: expose value
  • main.tf: logic
Pemakaian Module
  • source: path lokal atau Registry
  • Input via arguments
  • Output di-read via module.NAME.ATTR
  • Version pinning wajib
Module = DRY untuk infra. 1 module bisa dipanggil banyak kali dengan variable berbeda.

Terraform Registry

Registry = NPM/GitHub untuk Terraform module. Pre-built module AWS resmi & community.

Official Modules
  • terraform-aws-modules/vpc
  • terraform-aws-modules/eks
  • terraform-aws-modules/rds
  • Maintained oleh AWS engineer
Best Practice Pemakaian
  • Pin version (jangan latest)
  • Review source code module
  • Audit security via SAST
  • Contribute upstream bila ada bug
Jangan pakai module community tanpa audit. Module bisa berisi backdoor. Stick ke verified AWS/HashiCorp.

Workspace & Multi-Env Strategy

Tiga strategi manage multi-env dengan Terraform. Trade-off complexity vs isolation.

StrategiTrade-offUse Case
Workspace (tf vars)1 module, multiple state workspaceEnv identik, isolasi rendah
Directory per envFolder terpisah, state terisolasiEnv berbeda (umumnya)
Terragrunt wrapperDRY config + state isolateTeam besar, banyak account
Module per service1 module, N root callMicroservice banyak
Terraform CloudState managed, VCS integrationEnterprise, compliance ketat
Aturan praktis: production = directory per env (isolasi maksimal). Workspace hanya untuk dev/test.
Bagian 3 · 3/4
Workflow & Best Practice
Diskusi: bila tim DevOps 5 orang semua bisa apply Terraform, bagaimana cegah chaos?

Workflow: init, plan, apply, destroy

Empat command fundamental Terraform. Pahami lifecycle infra sebagai kode.

CommandFungsiKapan Dipakai
terraform initDownload provider & moduleSetelah clone repo / add module baru
terraform fmtFormat kode HCL rapiPre-commit hook
terraform validateCek syntax & typePre-commit, CI
terraform planPreview changes (no apply)Sebelum apply, comment di PR
terraform applyProvision real infraSetelah approve PR
terraform destroyDelete semua resourceCleanup, hapus env
Plan selalu sebelum apply. Apply dengan -auto-approve hanya di dev. Production: manual review.

Terraform vs CloudFormation vs Pulumi

Tiga tool IaC populer. Trade-off: bahasa, multi-cloud, maturity, community.

AspekTerraformCloudFormationPulumi
BahasaHCL (custom)JSON/YAMLTS/Python/Go/C#
Multi-cloudYa (AWS, GCP, Azure)Tidak (AWS only)Ya
MaturitySangat matang (2014)Sangat matang (AWS)Cukup matang (2018)
CommunityTerbesar (HashiCorp)AWS-specificGrowing
StateManual/CloudManaged AWSManaged Pulumi SaaS
Learning curveHCL mudahYAML verboseButuh coding skill
Best ForMulti-cloud, matureAWS-only, nativeDev dengan coding skill
Pilihan tergantung strategi: multi-cloud → Terraform. AWS-only native → CloudFormation. Dev friendly → Pulumi.

GitOps Workflow dengan Atlantis/TF Cloud

GitOps = PR-driven Terraform apply. Audit trail penuh via Git history. Standard enterprise.

Cara Kerja
  • Developer buka PR dengan .tf changes
  • CI run terraform plan
  • Atlantis comment plan output ke PR
  • Reviewer approve based on plan
Apply Workflow
  • Merge PR ke main branch
  • Atlantis auto-run terraform apply
  • CloudTrail log setiap API call
  • Audit trail via Git + CloudTrail
Atlantis open-source. Terraform Cloud SaaS managed. Spacelift & Scalr enterprise variant.
Bagian 4 · 4/4
Security & Drift Management
Diskusi: bila developer darurat hotfix via console AWS (bukan Terraform), apa yang terjadi?

Terraform Security: tfvars & Secrets

Sensitive value (password, key) tidak boleh hardcoded. Pakai AWS Secrets Manager atau SSM Parameter Store.

Yang Salah
  • Hardcoded password di .tf
  • tfvars commit ke Git
  • State file tanpa encryption
  • Access key di provider block
Yang Benar
  • AWS Secrets Manager + data source
  • tfvars via env variable atau SOPS
  • State backend S3 encryption + KMS
  • Provider via IAM role/SSO
SOPS Mozilla untuk encrypt tfvars. AWS Secrets Manager untuk app secret. Jangan hardcoded password.

Drift Detection & Remediation

Drift = realita infra berbeda dari Terraform state. Wajib dideteksi & diperbaiki.

Penyebab Drift
  • Manual hotfix via console
  • Resource dimodifikasi tools lain
  • AWS auto-healing/resource schedule
  • Resource dihapus manual
Deteksi & Remediasi
  • terraform plan detect drift
  • AWS Config rule continuous
  • terraform refresh sync state
  • Update kode Terraform match realita
Drift wajib diperbaiki dengan update kode Terraform, bukan terraform apply yang overwrite. Kode = source of truth.

Widget: HCL ↔ AWS Resource Mapper

Klik tab di atas (provider, ec2, vpc, s3, rds, sg, iam) untuk lihat kode HCL di kiri dan resource AWS yang dibuat di kanan. Perhatikan bagaimana referensi aws_vpc.main.id membuat dependency graph otomatis.

Ringkasan Kunci Pertemuan 10

Hari ini Anda menguasai Terraform IaC: HCL, state, module, workflow, security.

HCL & Resource
Provider, resource, variable. State file mapping realita ke kode.
Module & Registry
Module = DRY infra. Registry untuk module community AWS.
Workflow GitOps
init-plan-apply via PR. Atlantis/TF Cloud untuk orchestrate.

Tiga lensa P10: HCL sebagai sumber kebenaran · Module DRY · GitOps workflow.

Persiapan P11: Kubernetes. Baca Burns bab 1-3 Kubernetes Up and Running. Kuis 5 menit soal HCL resource & state.