Cara Deploy Backend FastAPI ke AWS EC2
Backend yang sudah rapi di laptop butuh rumah yang bisa diandalkan, dan EC2 adalah opsi "kendali penuh" di keluarga AWS: Anda mendapat server virtual utuh, memasang apa pun di dalamnya, dan membayar per jam pemakaian. Kendali penuh itu pedang dua sisi — tidak ada yang mengatur apa pun untuk Anda. Tutorial ini memetakan jalannya dari nol sampai API FastAPI yang hidup di balik HTTPS, plus bagian yang jarang ditulis: pos-pos biaya AWS yang berjalan diam-diam.
Kapan EC2 dipilih dibanding layanan serverless
Pilih EC2 kalau aplikasi Anda butuh proses yang hidup terus (websocket, background job, koneksi database persisten), library sistem khusus, atau Anda ingin satu server untuk beberapa layanan sekaligus. Kalau beban kerja Anda berupa fungsi pendek yang jarang dipanggil, serverless (Lambda) bisa lebih murah dan bebas perawatan; kalau Anda cuma butuh VPS murah tanpa ekosistem AWS, penyedia VPS biasa memberi harga lebih sederhana untuk barang serupa — jalurnya kami tulis di tutorial deploy ke VPS Ubuntu. EC2 unggul saat Anda memang berencana tumbuh di dalam ekosistem AWS: S3, RDS, load balancer kelak tinggal disambungkan.
Langkah 1: Buat instance dan atur security group
- Di console AWS, buka EC2 → Launch instance. Pilih Ubuntu Server LTS terbaru dan tipe instance kecil dulu —
t3.microcukup untuk API yang baru lahir, dan menaikkan ukuran belakangan itu mudah. - Buat key pair dan simpan file
.pem-nya baik-baik; itu satu-satunya kunci masuk. - Bagian paling penting: security group — firewall bawaan AWS. Buka hanya tiga port: 22 (SSH, idealnya dibatasi ke IP kantor Anda, bukan 0.0.0.0/0), 80, dan 443. Port aplikasi (8000) tidak dibuka — dunia luar hanya boleh bicara lewat Nginx.
Setelah instance hidup, alokasikan Elastic IP dan pasangkan ke instance — tanpa ini, IP publik berganti tiap instance berhenti-jalan, dan DNS Anda ikut kacau.
ssh -i kunci-anda.pem ubuntu@IP_ELASTIC_ANDA
Langkah 2: Pasang aplikasi FastAPI di instance
Dari dalam server, pasang kebutuhan dasar dan tarik kode Anda:
sudo apt update && sudo apt install -y python3-venv git nginx
git clone https://github.com/akun-anda/api-anda.git
cd api-anda
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt "gunicorn" "uvicorn"
Uji sebentar dengan uvicorn main:app lalu curl http://127.0.0.1:8000 dari sesi SSH kedua — pastikan aplikasinya sehat sebelum lapisan berikutnya ditumpuk. Konfigurasi rahasia (koneksi database, API key) taruh di file environment yang tidak ikut git.
Langkah 3: Jalankan dengan gunicorn dan systemd
Gunicorn mengelola beberapa worker uvicorn; systemd memastikan semuanya bangun sendiri setelah crash atau reboot. Buat /etc/systemd/system/api.service:
[Unit]
Description=FastAPI backend
After=network.target
[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/api-anda
EnvironmentFile=/home/ubuntu/api-anda/.env
ExecStart=/home/ubuntu/api-anda/.venv/bin/gunicorn \
-w 2 -k uvicorn.workers.UvicornWorker \
-b 127.0.0.1:8000 main:app
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now api
systemctl status api
Jumlah worker menyesuaikan ukuran instance — dua untuk instance mikro sudah pas; lebih banyak worker di mesin kecil justru berebut memori.
Langkah 4: Nginx, HTTPS, dan domain
Arahkan subdomain (misalnya api.usaha-anda.com) ke Elastic IP lewat record A, lalu pasang Nginx sebagai reverse proxy — konfigurasinya identik dengan yang ada di tutorial VPS: proxy_pass ke 127.0.0.1:8000 plus header forwarding. Tutup dengan sertifikat:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d api.usaha-anda.com
Uji dari luar jaringan Anda: endpoint menjawab lewat HTTPS, dokumentasi /docs terbuka, dan http://IP:8000 tidak bisa diakses. Terakhir, reboot instance sekali dan pastikan API bangun sendiri — ujian systemd yang sesungguhnya.
Biaya yang diam-diam berjalan di AWS
Tagihan AWS yang mengejutkan hampir tidak pernah datang dari instance-nya — ia datang dari pinggirannya:
- Elastic IP yang menganggur: alamat yang dialokasikan tapi tidak terpasang ke instance yang jalan tetap ditagih.
- Volume EBS yatim: disk dari instance yang sudah di-terminate bisa tertinggal dan terus ditagih.
- Transfer data keluar: trafik masuk gratis, keluar tidak — API yang mengirim respons besar ke banyak pengguna akan merasakannya.
- Snapshot yang menumpuk tanpa kebijakan penghapusan.
Dua kebiasaan penangkalnya: pasang billing alert di hari pertama, dan jadwalkan tengok bulanan ke halaman Cost Explorer. Lima menit sebulan menutup seluruh kategori kejutan ini.
Fondasi API-nya sendiri kami tulis di tutorial FastAPI. Dan kalau Anda butuh backend yang dirancang, di-deploy, dan dirawat sebagai satu paket — dengan arsitektur yang dipilih berdasarkan kebutuhan, bukan tren — itulah pekerjaan harian tim software Clovertechno.
Clovertechno