Lab ini disusun dengan pendekatan praktis step-by-step, sehingga bahkan pemula bisa langsung mengikuti tanpa bingung. Kita mulai dari menyiapkan akun AWS dan user IAM, menginstal Terraform, menulis file konfigurasi .tf, lalu membuat sertifikat SSL di ACM lewat Console (klik per klik). Setelah itu, kita menambahkan record CNAME di DNS (Cloudflare/Route53) agar domain terhubung dengan benar, hingga akhirnya website otomatis redirect ke HTTPS.
Setiap langkah dilengkapi dengan perintah verifikasi dan juga tips troubleshooting umum (termasuk error klasik seperti 502 Bad Gatewayπ₯
Gambaran Arsitektur
ALB terminasi TLS (pakai ACM). EC2 cukup HTTP:80.
Failover: kalau EC2 #1 mati, trafik tetap ke EC2 #2.
1) Prasyarat Wajib
Akun AWS aktif (region contoh: ap-southeast-1, Singapore).
IAM User (disarankan khusus lab) dengan akses:
Untuk lab cepat: AdministratorAccess (β οΈ hanya lab). Atau minimal: EC2, ELBv2, VPC, ACM, Route53.
variable "key_name" {
description = "Nama Key Pair EC2 untuk SSH"
type = string
}
variable "certificate_arn" {
description = "ARN sertifikat ACM (region sama dengan ALB: ap-southeast-1)"
type = string
}
2.2) outputs.tf
output "alb_dns" {
description = "DNS publik ALB"
value = aws_lb.app_lb.dns_name
}
output "alb_zone_id" {
description = "Hosted zone id ALB (untuk alias record)"
value = aws_lb.app_lb.zone_id
}
2.3) terraform.tfvars
key_name = "masdika-key"
# ARN diisi setelah ACM Issued (sementara kosongkan, atau isi bila sudah ada)
certificate_arn = "arn:aws:acm:ap-southeast-1:123456789012:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Kalau belum punya ARN (sertifikat belum dibuat), Anda bisa isi string kosong "" sementara dan aktifkan HTTPS nanti.
Buka https://lab.syslab.my.id beberapa kali β konten <h1>Hello from Server <hostname></h1> akan berganti antara web-1 dan web-2. π
9) Troubleshooting (Paling Sering)
A. 502 Bad Gateway dari ALB
Penyebab utama: target Unhealthy (Nginx tidak listen 80).
Cek di EC2: docker ps -a
Perbaikan:
Pastikan user_data memakai sleep 10 & --restart always.
Di Terraform, properti user_data_replace_on_change = truesudah ada.
Kalau tetap kosong, force recreate: terraform taint aws_instance.web[0] terraform taint aws_instance.web[1] terraform apply -auto-approve
B. Sertifikat ACM tak kunjung Issued
Cek CNAME validasi: nama & value harus persis (termasuk underscore _).
Di Cloudflare, Proxy harus DNS Only.
C. Tidak bisa SSH
Pakai .pem (OpenSSH), bukan .ppk.
chmod 600 your-key.pem
Format koneksi: ssh -i your-key.pem ubuntu@<public_ip_ec2>
D. DNS belum resolve
Cek: dig +short lab.syslab.my.id β harus mengarah ke ALB DNS.
Tunggu propagasi; kurangi TTL bila perlu.
10) (Opsional) Route53 Alias Record
Jika domain Anda di Route53 dan ingin alias ke ALB (bukan CNAME):
# Contoh (butuh hosted zone Anda)
resource "aws_route53_record" "lab_alias" {
zone_id = "ZXXXXXXXXXXXXX" # ganti dengan hosted zone ID domain Anda
name = "lab.syslab.my.id"
type = "A"
alias {
name = aws_lb.app_lb.dns_name
zone_id = aws_lb.app_lb.zone_id
evaluate_target_health = true
}
}
11) Cleanup (Hemat Biaya)
Jika lab selesai:
terraform destroy -auto-approve
Ini menghapus ALB, EC2, SG, dsb (kecuali DNS di Cloudflare/Route53 yang Anda buat manual).
Penutup
Dengan panduan ini, anda bisa build dari nol sampai live: infrastruktur dibuat oleh Terraform, aplikasi serve oleh Docker Nginx di 2 EC2, domain tersambung ke ALB dengan SSL valid (ACM) dan redirect otomatis ke HTTPS. Selamat ngelab! π