L
Infrastructure as Code (IaC) • Literally Web ID

Automasi Infrastruktur Skala Besar: Terraform dan GitOps di Lingkungan Multi-Cloud

⏱️ 18 menit baca • 📅 19 Oct 2026 • 👁️ 1 views
Automasi Infrastruktur Skala Besar: Terraform dan GitOps di Lingkungan Multi-Cloud

1. Konteks Industri & Analisis Akar Masalah

Dalam lanskap enterprise modern, pengelolaan infrastruktur berskala besar sering kali menjadi titik buta operasional yang memicu kegagalan sistemik. Pendekatan manual menggunakan Command Line Interface (CLI) atau Console Web (ClickOps) pada lingkungan multi-cloud (AWS, GCP, Azure) menciptakan inkonsistensi lingkungan yang masif. Masalah klasik ini merambat ke seluruh lapisan arsitektur web modern, mulai dari ketidakselarasan konfigurasi Nginx/Apache, perbedaan versi PHP-FPM atau Node.js runtime, inkonsistensi konfigurasi DNS (record A, MX, SPF, DKIM, DMARC), hingga celah keamanan pada manajemen SSL/TLS Let's Encrypt dan aturan WAF Cloudflare.

Sebelum penerapan otomasi berbasis Infrastruktur sebagai Kode (IaC) dan GitOps:

  • Drift Konfigurasi: Lingkungan staging berbeda dengan production, menyebabkan bug yang hanya muncul saat rilis publik.
  • Waktu Pemulihan (MTTR) yang Lambat: Ketika terjadi kegagalan server, pemulihan memakan waktu berjam-jam karena dilakukan secara manual.
  • Kurangnya Keterlacakan (Audit Trail): Perubahan infrastruktur tidak tercatat dengan baik, menyulitkan investigasi keamanan insiden siber.

Setelah penerapan Terraform dan GitOps:

  • Infrastruktur yang Dapat Direproduksi (Reproducible Infrastructure): Setiap perubahan didefinisikan dalam kode, diuji melalui Pull Request, dan divalidasi secara otomatis.
  • Rekonsiliasi Otomatis: GitOps menjamin bahwa status aktual sistem di Kubernetes selalu sinkron dengan repositori Git terpusat.
  • Keamanan Skalabel: Manajemen S3/MinIO bucket policy, Fail2ban, Postfix relay, hingga Redis caching cluster dideploy dengan standar keamanan enterprise yang seragam.

2. Konsep Inti & Deep Dive Arsitektur

Arsitektur GitOps dengan Terraform berpusat pada pemisahan tanggung jawab yang jelas antara manajemen Cloud Infrastructure (IaaS) dan manajemen Kubernetes Application Delivery (GitOps/ArgoCD).

+------------------------------------------------------------------------+
|                              Developer                                 |
+------------------------------------------------------------------------+
                                     |
                       Git Push (Infrastructure Code)
                                     v
+------------------------------------------------------------------------+
|                        Git Repository (GitHub/GitLab)                  |
+------------------------------------------------------------------------+
          |                                                 |
          v                                                 v
+---------------------------+             +------------------------------+
| Terraform Cloud / CI/CD   |             |         ArgoCD Sync          |
| (Provisi S3, RDS, EKS, DNS)|             | (Deployment ke Kubernetes)   |
+---------------------------+             +------------------------------+
          |                                                 |
          v                                                 v
+------------------------------------------------------------------------+
|                         Multi-Cloud Infrastructure                     |
|  (AWS: S3, DynamoDB, RDS MySQL, Redis) + (Cloudflare DNS & WAF)        |
+------------------------------------------------------------------------+

Alur eksekusi bekerja melalui tahapan berikut:

  1. Developer melakukan push kode Terraform untuk provisioning sumber daya dasar (Database MySQL, Redis Cache, S3 Bucket, dan Cluster Kubernetes EKS).
  2. Terraform menggunakan remote backend yang diamankan menggunakan Amazon S3 dan DynamoDB untuk mengunci state file, mencegah race condition saat eksekusi paralel.
  3. Setelah cluster siap, ArgoCD mendeteksi perubahan manifest Kubernetes pada repositori Git terpisah dan melakukan reconcile (rekonsiliasi) secara otomatis ke dalam kluster.

3. Perbandingan Komparatif / Analisis Pendekatan

Berikut adalah analisis komparatif antara pendekatan tradisional (ClickOps) melawan pendekatan modern Terraform + GitOps:

Parameter Perbandingan ClickOps (Manual Konfigurasi) Terraform & GitOps (Otomatis)
Waktu Provisioning Berjam-jam / Berhari-hari Menit (Otomatis terpusat)
Konsistensi Lingkungan Rendah (Sering terjadi drift) Tinggi (100% identik via kode)
Audit & Compliance Lemah / Berdasarkan memori tim Kuat (Git commit history)
MTTR (Mean Time to Recovery) Tinggi (> 2 jam) Rendah (< 10 menit)
Penggunaan CPU/RAM Tidak teroptimasi Efisien melalui template baku
Kompleksitas Awal Rendah Tinggi (Membutuhkan kurva belajar)

4. Prasyarat Sistem & Persiapan Lingkungan

Sebelum memulai implementasi, pastikan sistem lokal dan CI/CD runner Anda memiliki perangkat lunak berikut:

  • Terraform: Versi >= 1.6.0
  • AWS CLI: Versi >= 2.13.0 terkonfigurasi dengan hak akses IAM yang memadai
  • Kubectl & Helm: Untuk manajemen Kubernetes
  • ArgoCD CLI: Untuk manajemen kontrol GitOps
  • Git: Untuk manajemen versi repositori

Verifikasi instalasi dengan menjalankan perintah terminal:

terraform -version
aws --version
kubectl version --client
argocd version --client

[!WARNING] Jangan pernah menggunakan kredensial AWS Root Account untuk menjalankan Terraform. Gunakan IAM User atau IAM Role dengan prinsip Least Privilege yang hanya memiliki akses ke layanan S3, DynamoDB, EC2, IAM, dan EKS.

5. Panduan Implementasi Langkah demi Langkah

Langkah 1: Konfigurasi Remote Backend Terraform (S3 & DynamoDB)

Buat file backend.tf untuk menyimpan state secara aman dan terdistribusi.

terraform {
  required_version = ">= 1.6.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = "~> 2.24"
    }
  }
  backend "s3" {
    bucket         = "enterprise-terraform-state-bucket-prod"
    key            = "infrastructure/state.tfstate"
    region         = "ap-southeast-1"
    dynamodb_table = "enterprise-terraform-locks"
    encrypt        = true
  }
}

provider "aws" {
  region = "ap-southeast-1"
  default_tags {
    tags {
      Environment = "Production"
      ManagedBy   = "Terraform"
      Project     = "Enterprise-Web-Core"
    }
  }
}

Langkah 2: Provisioning S3 Storage dan Database MySQL / Redis

Buat file resources.tf untuk mendefinisikan infrastruktur pendukung web aplikasi (Storage dan Database).

resource "aws_s3_bucket" "web_assets" {
  bucket = "enterprise-web-assets-storage-2024"
}

resource "aws_s3_bucket_ownership_controls" "web_assets" {
  bucket = aws_s3_bucket.web_assets.id
  rule {
    object_ownership = "BucketOwnerEnforced"
  }
}

resource "aws_s3_bucket_public_access_block" "web_assets" {
  bucket                  = aws_s3_bucket.web_assets.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

resource "aws_db_subnet_group" "db_subnet" {
  name       = "enterprise-db-subnet-group"
  subnet_ids = ["subnet-0123456789abcdef0", "subnet-0123456789abcdef1"]
}

resource "aws_db_instance" "mysql_primary" {
  identifier             = "enterprise-mysql-prod"
  engine                 = "mysql"
  engine_version         = "8.0.35"
  instance_class         = "db.t4g.xlarge"
  allocated_storage      = 100
  max_allocated_storage  = 1000
  storage_type           = "gp3"
  db_name                = "webapp_production"
  username               = "dbadmin"
  password               = "SuperSecurePasswordChangeMe123!"
  db_subnet_group_name   = aws_db_subnet_group.db_subnet.name
  skip_final_snapshot    = false
  final_snapshot_identifier = "enterprise-mysql-prod-final-snapshot"
  publicly_accessible    = false
  multi_az               = true
}

Langkah 3: Konfigurasi ArgoCD untuk GitOps

Instalasi ArgoCD ke dalam kluster Kubernetes menggunakan manifes YAML deklaratif (argocd-install.yaml):

apiVersion: v1
kind: Namespace
metadata:
  name: argocd
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: enterprise-web-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: 'https://github.com/enterprise/kubernetes-manifests.git'
    targetRevision: HEAD
    path: 'environments/production'
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

Terapkan manifes ArgoCD menggunakan terminal:

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -f argocd-install.yaml

6. Bedah Kode & Penjelasan Detail Baris Kunci

  • backend "s3": Baris ini menginstruksikan Terraform untuk menyimpan file state secara terpusat di S3. Parameter dynamodb_table krusial untuk mencegah concurrent writes yang dapat merusak (corrupt) state file jika dua engineer menjalankan terraform apply secara bersamaan.
  • block_public_acls = true: Pada konfigurasi S3 Bucket, baris ini memastikan tidak ada aset web sensitif atau backup database yang terekspos secara publik akibat kesalahan konfigurasi ACL.
  • syncPolicy.automated.prune: true: Pada konfigurasi ArgoCD, parameter prune memastikan bahwa jika sebuah resource dihapus dari repositori Git, resource tersebut juga akan otomatis dihapus dari kluster Kubernetes untuk mencegah resource drift.

7. Skenario Produksi & Studi Kasus Dunia Nyata

Dalam menghadapi lonjakan lalu lintas ekstrem (misalnya flash sale pada platform e-commerce dengan 500.000 concurrent users):-

  1. Edge Caching & WAF: Cloudflare mendistribusikan aset statis (HTML/CSS/JS) ke seluruh Edge Node dunia, sementara aturan WAF menangkis serangan DDoS Layer 7.
  2. Load Balancing & Web Server: Nginx bertindak sebagai reverse proxy yang mengarahkan trafik ke pod backend (Node.js / Go) dengan konfigurasi worker_processes auto; dan optimalisasi keepalive_timeout 65;.
  3. Database Scaling: MySQL menggunakan konfigurasi Read Replica multi-AZ untuk memisahkan beban read dan write, sementara Redis bertindak sebagai session store dan query cache berkinerja tinggi.

8. Common Pitfalls, Anti-Patterns & Solusi

  • Anti-Pattern 1: Menyimpan Secret dalam Plain Text di Terraform. Solusi: Gunakan AWS Secrets Manager atau HashiCorp Vault, lalu ambil nilainya secara dinamis menggunakan data "aws_secretsmanager_secret_version".
  • Anti-Pattern 2: Mengabaikan Lock State DynamoDB. Solusi: Selalu pastikan tabel DynamoDB dengan atribut primary key LockID terkonfigurasi sebelum menjalankan state bersama.
  • Anti-Pattern 3: Manual Hotfixing di Kluster Kubernetes. Solusi: Jangan pernah menggunakan kubectl edit di production. Segala perubahan harus melalui Pull Request di repositori GitOps agar siklus rekonsiliasi ArgoCD tetap valid.

9. Benchmark, Metrik Kinerja & Tuning Performa

Lakukan pengujian beban (load testing) menggunakan k6 untuk memvalidasi ketahanan infrastruktur web setelah dideploy melalui Terraform dan ArgoCD.

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 1000 },
    { duration: '5m', target: 5000 },
    { duration: '2m', target: 0 },
  ],
};

export default function () {
  const res = http.get('https://api.enterprise-production.com/health');
  check(res, { 'status was 200': (r) => r.status === 200 });
  sleep(1);
}

Jalankan perintah pengujian:

k6 run load-test.js

Tuning Parameter Lanjutan: Sesuaikan parameter kernel Linux pada node worker Kubernetes (/etc/sysctl.conf) untuk menangani koneksi TCP tinggi:

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535

10. Checklist Penerapan Produksi & Kesimpulan

Gunakan checklist berikut sebelum melakukan rilis sistem ke produksi:

  • State Terraform terenkripsi di S3 dengan DynamoDB Lock aktif.
  • Semua kredensial sensitif dikelola melalui Secret Manager, bukan hardcode.
  • ArgoCD dikonfigurasi dengan automated pruning dan self-heal aktif.
  • Aturan WAF Cloudflare dan Fail2ban telah diuji terhadap serangan brute-force.
  • Backup otomatis database MySQL dan S3 bucket telah diverifikasi periodiknya.

Dengan mengintegrasikan Terraform untuk provisi infrastruktur dasar dan GitOps (ArgoCD) untuk orkestrasi aplikasi, organisasi enterprise dapat mencapai skalabilitas tinggi, keamanan berlapis, serta ketahanan operasional jangka panjang di lingkungan multi-cloud.

🏷️ Tags: #Kubernetes #Terraform #Aws #Gitops #Argocd