Menguasai Infrastructure as Code dan automation: membedakan provisioning (Terraform/OpenTofu) dan configuration management (Ansible), menulis konfigurasi pertama, serta pola pipeline yang aman untuk mengelola infrastruktur sebagai kode

Setelah di episode 7 kita mengelola container, kini saatnya membahas kemampuan yang paling membedakan Infrastructure Engineer 2026 dari sysadmin generasi lama: IaC & automation. Di 2026, infrastruktur yang dikelola dengan klik console dianggap utang teknis — standar industri adalah infrastruktur yang lahir dari kode, ditinjau seperti kode, dan diaudit seperti kode.
Mengapa topik ini penting? Karena ia mengubah sifat pekerjaan: dari manual dan melelahkan menjadi reproducible dan bisa ditinjau. Kesalahan besar bisa dicegah di code review sebelum sampai ke produksi. Episode ini membekali kalian dua pilar: provisioning (Terraform/OpenTofu — membuat infrastruktur) dan configuration management (Ansible — mengonfigurasi mesin).
Sering tertukar, padahal keduanya menyelesaikan masalah yang berbeda:
| Aspek | Provisioning | Configuration Management |
|---|---|---|
| Pertanyaan | "Bagaimana infrastruktur dibuat?" | "Bagaimana mesin dikonfigurasi?" |
| Tools | Terraform/OpenTofu, CloudFormation, Pulumi | Ansible, Puppet, Chef |
| Objek | Server, VPC, subnet, storage, LB | Paket, service, file, user di dalam OS |
| State | Menyimpan state infrastruktur | Menyimpan (atau tidak) state config |
| Alur | Apply sekali saat dibuat | Idempotent, bisa diulang terus |
Keduanya saling melengkapi: Terraform membuat VM, lalu Ansible mengonfigurasi di dalamnya. Kalian akan sering melihat pola "Terraform untuk lahir, Ansible untuk hidup".
.tf yang mendeskripsikan infrastruktur yang diinginkan (declarative).terraform.tfstate adalah sumber kebenaran, wajib diamankan.plan menunjukkan apa yang akan berubah; apply mengeksekusinya.provider "proxmox" {
pm_api_url = "https://pve01.lab.local:8006/api2/json"
}
resource "proxmox_vm_qemu" "web" {
name = "web-01"
target_node = "pve01"
clone = "ubuntu-2204-template"
cores = 2
memory = 2048
disk {
size = "20G"
storage = "local-lvm"
}
}Perhatikan sifat declarative: kalian menulis hasil akhir, bukan langkah demi langkah. Terraform membandingkan state dengan config, lalu menghitung langkah yang dibutuhkan untuk mencapai hasil itu.
terraform init
terraform plan
terraform apply -auto-approve
terraform destroy -auto-approveterraform.tfstate berisi rahasia (password database, IP internal). Aturan wajib:
---
- name: Siapkan web server
hosts: web
become: true
tasks:
- name: Install nginx
ansible.builtin.apt:
name: nginx
state: present
- name: Pastikan nginx berjalan
ansible.builtin.systemd:
name: nginx
state: started
enabled: true
- name: Salin halaman index
ansible.builtin.copy:
src: index.html
dest: /var/www/html/index.html
mode: "0644"Playbook ini: install nginx, pastikan service jalan dan aktif saat boot, lalu salin halaman. Jalankan dengan:
ansible-playbook -i inventory.ini install-nginx.yamlKarena idempotent, playbook yang sama bisa dijalankan 100 kali dengan hasil akhir yang sama — inilah perbedaan fundamental dengan script shell if-then-else.
[web]
web-01.lab.local ansible_user=root
web-02.lab.local ansible_user=root
[db]
db-01.lab.local ansible_user=rootWorkflow yang benar mengangkat infrastruktur ke level yang sama dengan kode aplikasi:
Prinsip-prinsipnya:
terraform plan dan ansible-playbook --check dijalankan otomatis di CI, hasilnya dilihat sebelum apply.Important
Prinsip "cattle, not pets": server produksi seharusnya bisa dihancurkan dan dibuat ulang dari kode kapan saja. Jika kalian punya server yang "harus disayang dan tidak boleh disentuh" karena tidak ada yang tahu cara membuatnya lagi, itu adalah debt terbesar tim infra — IaC adalah obatnya.
Konfigurasi IaC sering menyentuh kredensial. Aturan yang tidak bisa ditawar:
1. Jangan hardcode kredensial di file .tf/.yaml
2. Jangan commit state berisi secret ke Git
3. Pakai variabel environment atau secret manager (Vault — episode 19)
4. Scan repo secara rutin untuk secret yang bocordestroy: kode yang tidak pernah diuji build ulang = kode yang sebenarnya rusak.--check dulu.Pada episode 8 ini kalian telah menguasai jantung automation:
Di episode 9 selanjutnya kita membangun mata infrastruktur: monitoring & observability — Prometheus, Grafana, logging, dan alerting yang membuat kalian bisa melihat dan merespons masalah sebelum user mengeluh. Sampai jumpa di episode 9!