Terraform Cloud #
Semua yang dibahas di artikel CI/CD sebelumnya — remote state, locking, plan approval, policy as code, drift detection — bisa diimplementasikan sendiri menggunakan GitHub Actions, S3, DynamoDB, dan Checkov. Tapi ada effort yang tidak kecil untuk menyatukan semua ini. Terraform Cloud (dan Terraform Enterprise untuk on-premise) menyediakan semua komponen ini sebagai satu platform terintegrasi, dengan UI yang dirancang khusus untuk workflow Terraform. Memahami apa yang ditawarkan membantu kamu memutuskan kapan membangun sendiri vs kapan menggunakan Terraform Cloud.
Apa yang Ditawarkan Terraform Cloud #
TERRAFORM CLOUD — FITUR UTAMA:
STATE MANAGEMENT:
Remote state untuk semua workspace
Locking otomatis
State history dengan kemampuan rollback
Enkripsi at rest dan in transit
REMOTE EXECUTION:
Plan dan apply berjalan di Terraform Cloud, bukan di mesin lokal
Environment konsisten untuk semua eksekusi
Log tersimpan dan bisa diaudit
VCS INTEGRATION:
Connect ke GitHub, GitLab, Bitbucket
Plan otomatis saat ada PR/MR
Plan output tampil sebagai check di VCS
TEAM & ACCESS CONTROL:
RBAC (Role-Based Access Control) per workspace
Teams dengan permission granular
Audit log semua aktivitas
POLICY (SENTINEL):
Policy as Code menggunakan bahasa Sentinel
Enforce di semua workspace
Soft-mandatory vs hard-mandatory policy
DRIFT DETECTION:
Health assessments terjadwal
Dashboard kondisi workspace
Setup: Menggunakan Terraform Cloud sebagai Backend #
# terraform.tf — konfigurasi backend Terraform Cloud
terraform {
cloud {
organization = "my-company"
workspaces {
name = "production"
# Atau gunakan tag untuk multi-workspace:
# tags = ["production", "aws"]
}
}
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
# Login ke Terraform Cloud dari CLI
terraform login
# Browser akan terbuka untuk generate token
# Token disimpan di ~/.terraform.d/credentials.tfrc.json
# Setelah login, terraform init akan otomatis menggunakan Terraform Cloud
terraform init
# Terraform plan dan apply sekarang berjalan di Terraform Cloud
# (bukan di mesin lokal)
terraform plan
# Output: Running plan in Terraform Cloud...
VCS Integration: Plan Otomatis dari PR #
# Tidak perlu konfigurasi CI/CD terpisah jika menggunakan VCS integration
# Cukup connect GitHub repository di Terraform Cloud UI
# Alur kerja dengan VCS integration:
# 1. Developer buka PR → Terraform Cloud otomatis jalankan plan
# 2. Plan output tampil sebagai GitHub check di PR
# 3. Reviewer melihat plan langsung di PR
# 4. PR di-merge → Terraform Cloud otomatis apply (jika dikonfigurasi)
# atau tunggu konfirmasi manual di Terraform Cloud UI
# Konfigurasi di Terraform Cloud workspace:
# - VCS Connection: github.com/myorg/infra-repo
# - Working Directory: infrastructure/environments/production
# - Terraform Version: 1.7.0
# - Apply Method: Manual apply (atau Auto apply untuk non-production)
# - Auto Speculative Plans: Enabled
Remote Variables: Mengelola Konfigurasi dan Secret #
Terraform Cloud menyimpan variable secara terpusat, termasuk secret yang dienkripsi.
VARIABLE DI TERRAFORM CLOUD:
Terraform Variables (HCL values):
environment = "production"
instance_count = 3
vpc_cidr = "10.2.0.0/16"
→ Tersimpan sebagai plaintext, muncul di plan output
Environment Variables (credentials dan config):
AWS_ACCESS_KEY_ID = "..." [sensitive]
AWS_SECRET_ACCESS_KEY = "..." [sensitive]
TF_VAR_db_password = "..." [sensitive]
→ Dienkripsi, tidak pernah muncul di log
Variable Sets:
Kumpulan variable yang bisa di-share ke banyak workspace
Contoh: "AWS Production Credentials" shared ke semua workspace production
# Variable bisa diset via CLI (berguna untuk automation)
# Gunakan Terraform Cloud API atau tfe provider
# Dengan tfe provider:
resource "tfe_variable" "environment" {
key = "environment"
value = "production"
category = "terraform"
workspace_id = tfe_workspace.production.id
}
resource "tfe_variable" "aws_secret" {
key = "AWS_SECRET_ACCESS_KEY"
value = var.aws_secret_key
category = "env"
sensitive = true # Tidak bisa dibaca kembali setelah diset
workspace_id = tfe_workspace.production.id
}
Sentinel: Policy as Code Built-in #
Sentinel adalah bahasa policy yang terintegrasi di Terraform Cloud (paket Plus ke atas). Lebih powerful dari Checkov untuk use case enterprise karena berjalan di dalam platform dan bisa enforce di semua workspace.
# policy/require-tags.sentinel
# Semua resource harus punya tag Environment dan Owner
import "tfplan/v2" as tfplan
# Ambil semua resource dari plan
all_resources = filter tfplan.resource_changes as _, rc {
rc.mode is "managed" and
rc.change.actions is not ["delete"]
}
# Check setiap resource punya tag yang diperlukan
required_tags = ["Environment", "Owner"]
violations = filter all_resources as address, rc {
tags = rc.change.after.tags else {}
any required_tags as tag {
not tags[tag]
}
}
# Rule utama: tidak boleh ada violations
main = rule {
length(violations) is 0
}
TIPE POLICY DI SENTINEL:
advisory:
Pelanggaran dicatat tapi apply tetap bisa dilanjutkan
→ Cocok untuk aturan baru yang masih dalam sosialisasi
soft-mandatory:
Pelanggaran memblokir apply, TAPI bisa di-override oleh user dengan izin
→ Cocok untuk aturan yang butuh exception sesekali
hard-mandatory:
Pelanggaran memblokir apply, TIDAK bisa di-override oleh siapapun
→ Cocok untuk aturan compliance yang mutlak (HIPAA, PCI-DSS)
Terraform Cloud vs Self-Managed CI/CD #
TERRAFORM CLOUD SELF-MANAGED (GitHub Actions + S3)
──────────────────────────────────────────────────────────────────────────
Setup awal 30 menit 2-4 jam (tergantung kompleksitas)
Maintenance Hampir nol Butuh update dependency secara rutin
State management Built-in Perlu setup S3 + DynamoDB
Locking Otomatis Perlu setup DynamoDB
Plan UI Bagus, terintegrasi Tergantung implementasi
Policy enforcement Sentinel (bayar) Checkov/OPA (gratis, butuh setup)
Audit log Komprehensif Tersebar di berbagai tempat
Biaya Berbayar (> 5 users) Gratis (tapi ada engineering cost)
Kontrol penuh Terbatas Penuh
On-premise option Terraform Enterprise Bisa (self-hosted runner)
KAPAN PILIH TERRAFORM CLOUD:
✓ Tim kecil yang ingin setup cepat tanpa banyak engineering overhead
✓ Sudah ada budget untuk tooling
✓ Butuh Sentinel untuk compliance requirements yang ketat
✓ Tim tidak punya kapasitas untuk maintain CI/CD infrastructure sendiri
KAPAN PILIH SELF-MANAGED:
✓ Tim sudah familier dengan GitHub Actions atau GitLab CI
✓ Budget terbatas atau preferensi open-source
✓ Butuh kontrol penuh atas pipeline behavior
✓ Ada compliance requirement yang melarang data keluar ke third-party
Ringkasan #
- Terraform Cloud menyediakan semua komponen CI/CD Terraform dalam satu platform: remote state, locking, VCS integration, plan UI, team access, policy, dan drift detection.
- Setup sangat cepat — cukup tambahkan blok
cloudditerraform.tf, jalankanterraform login, danterraform init. Tidak perlu setup S3, DynamoDB, atau pipeline terpisah.- Remote Variables menyimpan konfigurasi dan secret terpusat, dengan enkripsi built-in untuk sensitive values.
- Sentinel adalah policy engine yang lebih powerful dari Checkov/OPA untuk enterprise — bisa set sebagai soft-mandatory (bisa di-override) atau hard-mandatory (tidak bisa di-override).
- VCS Integration menghilangkan kebutuhan pipeline terpisah untuk plan — Terraform Cloud otomatis plan saat ada PR dan menampilkan hasilnya sebagai GitHub check.
- Terraform Cloud cocok untuk tim yang ingin setup cepat dan tidak mau maintain CI/CD infrastructure sendiri; self-managed lebih cocok untuk tim yang butuh kontrol penuh atau punya constraint tertentu.
← Sebelumnya: Drift Detection Automation Berikutnya: Provider Authentication →