L
Infrastructure as Code (IaC) • Literally Web ID

Otomasi Infrastruktur Multi-Cloud yang Aman Menggunakan Terraform dan Ansible

⏱️ 15 menit baca • 📅 15 Oct 2026 • 👁️ 1 views
Otomasi Infrastruktur Multi-Cloud yang Aman Menggunakan Terraform dan Ansible

1. Konteks Industri & Analisis Akar Masalah

Dalam lanskap enterprise modern, ketersediaan infrastruktur komputasi yang resilien, skalabel, dan aman adalah fondasi mutlak. Pendekatan tradisional di mana administrator sistem melakukan provisioning server secara manual (menggunakan SSH, konfigurasi langsung via CLI, atau skrip Bash ad-hoc) telah terbukti meninggalkan celah fatal. Kondisi Configuration Drift—di mana perbedaan konfigurasi terjadi secara perlahan antar server dalam satu cluster—menyebabkan inkonsistensi perilaku aplikasi, kerentanan keamanan yang tidak terdeteksi, dan kegagalan pemulihan bencana (Disaster Recovery) yang memakan waktu berjam-jam.

Masalah utama yang dihadapi oleh DevOps Engineers saat ini meliputi:

  • Manajemen State Manual: Kehilangan rekam jejak aset cloud, resource tersembunyi yang terus menagih biaya (orphan resources), serta konflik ketika banyak engineer memodifikasi infrastruktur secara bersamaan.
  • Keterbatasan Single Cloud Vendor: Ketergantungan pada satu penyedia layanan cloud (vendor lock-in) meningkatkan risiko operasional jika terjadi pemadaman wilayah (regional outage).
  • Celah Keamanan & Kepatuhan: Konfigurasi manual sering mengabaikan prinsip Least Privilege, membiarkan port terbuka, atau menggunakan kunci akses yang tidak terotasi dengan benar.

Perbandingan antara pendekatan tradisional (Ad-hoc & Manual) dengan pendekatan otomatis berbasis Infrastructure as Code (IaC) dan Configuration Management dapat dilihat pada tabel berikut:

Aspek Pendekatan Tradisional (Manual) Pendekatan Otomatis (Terraform + Ansible) Dampak Bisnis
Waktu Provisioning Hitungan jam / hari Hitungan menit Time-to-market lebih cepat
Konsistensi Lingkungan Rendah (rentan Configuration Drift) 100% Identik (Immutable Infrastructure) Mengurangi bug lingkungan produksi
Auditabilitas Tidak ada catatan perubahan Tersimpan dalam VCS (Git) dengan Pull Request Kepatuhan regulasi (SOC2, ISO27001) terpenuhi
Pemulihan Bencana Manual, lambat, rentan human error Otomatis melalui eksekusi skrip ulang Recovery Time Objective (RTO) mendekati nol

Dengan mengombinasikan Terraform untuk provisioning lapisan infrastruktur dasar (Compute, Network, Storage) dan Ansible untuk konfigurasi konvergen pada level OS dan aplikasi (Web Server, Database, Caching), organisasi dapat mencapai tingkat otomatisasi tingkat enterprise yang dapat direproduksi kapan saja.


2. Konsep Inti & Deep Dive Arsitektur

Arsitektur infrastruktur multi-cloud yang aman menuntut pemisahan tugas yang jelas antara penciptaan sumber daya fisik/virtual dan konfigurasi perangkat lunak di dalamnya.

Alur Eksekusi (Workflow)

  1. Fase Perencanaan Terraform: Developer mendefinisikan infrastruktur sebagai kode. Terraform membaca state terkini, membandingkannya dengan definisi deklaratif, dan membuat Execution Plan.
  2. Fase Provisioning Terraform: Terraform berinteraksi dengan API Multi-Cloud (AWS, GCP, Azure) untuk membuat VPC, Subnet, Security Groups, dan Instance EC2/Compute Engine.
  3. Dinamis Inventori Ansible: Ansible secara otomatis mengambil IP instance yang baru dibuat melalui dynamic inventory plugin Terraform.
  4. Fase Konfigurasi Ansible: Ansible menjalankan Playbook untuk menginstal Nginx, PHP-FPM, Redis, mengonfigurasi sertifikat SSL Let's Encrypt, dan memperkuat keamanan SSH (Hardening).
+-------------------------------------------------------------+
|                     Developer Workstation                   |
|  [ Terraform Code (.tf) ]          [ Ansible Playbook ]     |
+---------------+-----------------------------+---------------+
                |                             |
        (terraform apply)            (ansible-playbook)
                v                             v
+---------------+-----------------------------+---------------+
|                   Multi-Cloud Provider                      |
|   [ AWS VPC / EC2 ]                 [ GCP Compute Engine ]  |
+---------------+-----------------------------+---------------+
                |                             |
                +-------> (Dynamic IP) <------+
                              |
                              v
              [ Target Server OS Configuration ]
              (Nginx, PHP-FPM, Redis, Firewall)
+-------------------------------------------------------------+

Prinsip Immutable Infrastructure diterapkan di sini: alih-alih memperbarui server yang sedang berjalan (in-place update), server yang mengalami masalah atau pembaruan mayor akan dihancurkan dan diganti sepenuhnya dengan instance baru yang dibuat dari template bersih.


3. Perbandingan Komparatif / Analisis Pendekatan

Dalam membangun pipeline otomatisasi, pemilihan alat sangat menentukan efisiensi penggunaan sumber daya sistem (CPU, RAM, dan Network Latency).

Fitur / Parameter Terraform (HashiCorp) Ansible (Red Hat) Pulumi Chef / Puppet
Paradigma Deklaratif Prosedural / Konvergen Deklaratif (Bahasa Umum) Deklaratif / Prosedural
Fokus Utama Provisioning Infrastruktur Konfigurasi & Manajemen OS Provisioning & Aplikasi Konfigurasi Sistem
Manajemen State Menggunakan File State (.tfstate) Agentless (Tanpa State Terpusat) Berbasis Cloud State Berbasis Agent / Server
Kebutuhan Memori & CPU Rendah (Go binary, efisien) Sangat Rendah (SSH-based) Sedang (Node.js/Python runtime) Tinggi (Agent berjalan terus)
Latensi Jaringan Tergantung API Cloud Provider Tergantung koneksi SSH Tergantung API Cloud Provider Tinggi (Komunikasi Agent-Server)

[!TIP] Gunakan Terraform semata-mata untuk mengelola Infrastructure-as-a-Service (IaaS) seperti jaringan dan mesin, lalu serahkan urusan Platform-as-a-Service (PaaS) atau konfigurasi internal OS kepada Ansible. Kombinasi ini memberikan efisiensi resource terbaik tanpa membebani memori server.


4. Prasyarat Sistem & Persiapan Lingkungan

Sebelum memulai implementasi, pastikan sistem lokal atau mesin CI/CD Anda memenuhi spesifikasi berikut:

  • OS: Ubuntu 22.04 LTS / Debian 12 / macOS Ventura+
  • Terraform: Versi >= 1.5.0
  • Ansible: Versi >= 2.15.0
  • Cloud Access: Akun AWS dan GCP dengan hak akses Administrator atau IAM yang sesuai.
  • Kunci SSH: Pasangan kunci SSH privat/publik yang di-generate menggunakan ssh-keygen -t rsa -b 4096 -C "devops@enterprise.internal".

Verifikasi instalasi dengan perintah terminal:

terraform -version
ansible --version
aws --version
gcloud --version

5. Panduan Implementasi Langkah demi Langkah

Langkah 1: Struktur Direktori Proyek

Buat struktur direktori yang bersih untuk memisahkan modul Terraform dan Ansible:

mkdir -p enterprise-infra/{terraform/modules/aws,terraform/modules/gcp,ansible/playbooks,ansible/roles}
cd enterprise-infra

Langkah 2: Konfigurasi Terraform untuk Multi-Cloud (AWS & GCP)

Buat file utama terraform/main.tf untuk mendefinisikan Provider dan sumber daya jaringan dasar.

terraform {
  required_version = ">= 1.5.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    gcp = {
      source  = "hashicorp/google"
      version = "~> 4.80"
    }
  }
  backend "s3" {
    bucket         = "enterprise-terraform-state-bucket-prod"
    key            = "multi-cloud/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-lock-table"
  }
}

provider "aws" {
  region = "us-east-1"
}

provider "gcp" {
  project = "enterprise-infra-prod"
  region  = "us-central1"
  zone    = "us-central1-a"
}

# AWS Web Server Instance
resource "aws_instance" "web_aws" {
  ami           = "ami-0c7217cdde317cfec" # Ubuntu 22.04 LTS
  instance_type = "t3.medium"
  key_name      = "enterprise-deploy-key"

  tags = {
    Name        = "Web-Server-AWS"
    Environment = "Production"
    Role        = "webserver"
  }
}

# GCP Web Server Instance
resource "google_compute_instance" "web_gcp" {
  name         = "web-server-gcp"
  machine_type = "e2-medium"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "ubuntu-os-cloud/ubuntu-2204-lts"
    }
  }

  network_interface {
    network = "default"
    access_config {
      // Ephemeral public IP
    }
  }

  tags = ["webserver", "production"]
}

output "aws_public_ip" {
  value = aws_instance.web_aws.public_ip
}

output "gcp_public_ip" {
  value = google_compute_instance.web_gcp.network_interface[0].access_config[0].nat_ip
}

Langkah 3: Konfigurasi Ansible Playbook untuk Hardening & Web Stack

Buat file ansible/playbooks/site.yml untuk mengonfigurasi server web (Nginx, PHP-FPM, UFW Firewall, Fail2ban).

---
- name: Configure Enterprise Web Servers
  hosts: webservers
  become: true
  vars:
    php_version: "8.2"
  
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Install essential system packages
      apt:
        name:
          - curl
          - git
          - ufw
          - fail2ban
          - nginx
          - certbot
          - python3-certbot-nginx
        state: present

    - name: Configure UFW Firewall
      ufw:
        rule: allow
        port: "{{ item }}"
        proto: tcp
      loop:
        - "22"
        - "80"
        - "443"

    - name: Enable UFW
      ufw:
        state: enabled
        policy: deny

    - name: Ensure Nginx is running and enabled at boot
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Deploy custom Nginx production configuration
      copy:
        dest: "/etc/nginx/sites-available/default"
        content: |
          server {
              listen 80;
              server_name _;
              root /var/www/html;
              index index.php index.html index.htm;

              location / {
                  try_files $uri $uri/ =404;
              }

              location ~ \.php$ {
                  include snippets/fastcgi-php.conf;
                  fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
              }

              location ~ /.ht {
                  deny all;
              }
          }
      notify: Restart Nginx

  handlers:
    - name: Restart Nginx
      service:
        name: nginx
        state: restarted

6. Bedah Kode & Penjelasan Detail Baris Kunci

  • Terraform Backend (backend "s3" & dynamodb_table): Baris ini sangat krusial dalam lingkungan kolaboratif. Dengan menyimpan state di S3 dan menggunakan DynamoDB untuk State Locking, Terraform mencegah dua engineer melakukan apply secara bersamaan yang dapat merusak struktur state file (race conditions).
  • Ansible become: true: Perintah ini setara dengan sudo. Memastikan bahwa seluruh tugas instalasi paket, konfigurasi firewall, dan manajemen servis dijalankan dengan hak istimewa root secara aman.
  • UFW Policy (policy: deny): Mengubah kebijakan bawaan firewall menjadi menolak semua trafik masuk secara default, kecuali port 22 (SSH), 80 (HTTP), dan 443 (HTTPS) yang diizinkan secara eksplisit.

7. Skenario Produksi & Studi Kasus Dunia Nyata

Dalam menghadapi lonjakan traffic tinggi (misalnya flash sale e-commerce atau event 11.11), infrastruktur harus mampu melakukan Auto-Scaling.

Implementasi nyata mencakup:

  1. Terraform mendefinisikan AWS Auto Scaling Group (ASG) dengan Launch Template yang merujuk pada AMI standar.
  2. Saat ASG meluncurkan instance baru secara otomatis, mekanisme User Data (Cloud-Init) memicu eksekusi skrip Ansible secara lokal atau melalui Ansible Controller via Webhook.
  3. Server baru langsung bergabung ke dalam Application Load Balancer (ALB) dengan status Healthy dalam waktu kurang dari 90 detik.

8. Common Pitfalls, Anti-Patterns & Solusi

[!WARNING] Anti-Pattern 1: Menyimpan Secret Langsung di File .tf atau Playbook Ansible Solusi: Selalu gunakan Terraform Vault Provider, AWS Secrets Manager, atau Ansible Vault untuk mengenkripsi kredensial sensitif seperti database password dan API keys.

[!WARNING] Anti-Pattern 2: Tidak Menggunakan State Locking Solusi: Mengabaikan remote backend dengan locking berisiko tinggi menyebabkan korupsi state saat dikerjakan oleh tim besar.


9. Benchmark, Metrik Kinerja & Tuning Performa

Untuk mengukur kesiapan infrastruktur web terhadap beban tinggi, gunakan tool pengujian beban seperti k6 atau wrk. Contoh skrip pengujian menggunakan wrk untuk menguji web server Nginx hasil otomatisasi:

wrk -t12 -c400 -d30s http://<AWS_PUBLIC_IP>/

Parameter Tuning Sistem Operasi (/etc/sysctl.conf):

Untuk menangani puluhan ribu koneksi konkuren (C10K problem), tambahkan baris berikut melalui Ansible:

fs.file-max = 2097152
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1

10. Checklist Penerapan Produksi & Kesimpulan

Sebelum merilis infrastruktur multi-cloud ini ke lingkungan produksi, pastikan checklist berikut terpenuhi:

  • Semua kredensial sensitif terenkripsi menggunakan Ansible Vault / AWS Secrets Manager.
  • State Terraform disimpan di remote storage terenkripsi dengan DynamoDB Locking aktif.
  • Firewall (UFW / Security Groups) dikunci secara ketat (Zero Trust Network Access).
  • Monitoring dan Logging terintegrasi (Prometheus, Grafana, ELK Stack).
  • Prosedur Backup & Restore database telah diuji coba secara berkala.

Dengan memadukan ketepatan deklaratif Terraform dan fleksibilitas konvergen Ansible, organisasi Anda memiliki fondasi infrastruktur yang tidak hanya aman dan handal, tetapi juga siap menghadapi masa depan komputasi awan yang dinamis.

🏷️ Tags: #Nginx #High Concurrency #Performance #Sysadmin #Web Server