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 cloud di terraform.tf, jalankan terraform login, dan terraform 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 →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact