← Semua pembelajaran / AI Engineer Nol β†’ Production
Fase 7 Β· Deployment ke Production

Deploy arsitektur produksi ke AWS

Aplikasi AI pada akhirnya adalah aplikasi backend biasa yang salah satu dependency-nya adalah API eksternal yang lambat & mahal. Arsitektur deploy-nya lebih mirip aplikasi web biasa daripada yang dibayangkan orang.

Intisari

  • Aplikasi AI di produksi bukan infrastruktur baru β€” ia backend biasa (container, database, load balancer) ditambah satu dependency eksternal (API LLM) yang punya sifat latensi & biaya khusus (Fase 2, 7).
  • ECS Fargate (atau layanan container serverless serupa) cocok untuk pola ini: kamu tidak mengelola server API LLM sendiri, jadi tidak butuh GPU atau orkestrasi model β€” cukup container aplikasi biasa yang memanggil API eksternal.
  • API key provider LLM adalah rahasia berisiko tinggi β€” sama seperti kredensial database, wajib lewat secrets manager, tidak pernah di environment variable plaintext di image atau ter-commit ke git.
  • Health check & graceful shutdown perlu memperhitungkan panggilan LLM yang sedang berjalan β€” container yang dimatikan paksa di tengah streaming akan memotong jawaban yang sedang dikirim ke pengguna.
  • CI/CD untuk aplikasi AI menambah satu langkah yang jarang ada di CI backend biasa: menjalankan dataset evaluasi (Fase 5) sebagai bagian dari test suite, supaya perubahan prompt yang menurunkan kualitas terdeteksi sebelum deploy β€” bukan setelah pengguna komplain.

Arsitektur yang menyatukan semua fase

                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
Pengguna ──────────▢│ Load Balancerβ”‚
                    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                           β–Ό
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚ Container backend │───────▢│ API LLM eksternal β”‚  (Fase 1-3, 6)
                 β”‚ (ECS Fargate)     │◀───────│ (Anthropic, dll.) β”‚
                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β–Ό            β–Ό             β–Ό
      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚ Postgres +    β”‚ β”‚ Redis  β”‚ β”‚ Secrets     β”‚
      β”‚ pgvector      β”‚ β”‚ (rate  β”‚ β”‚ Manager     β”‚
      β”‚ (Fase 4, 6)   β”‚ β”‚ limit) β”‚ β”‚ (API key)   β”‚
      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Poin paling penting di fase penutup ini: tidak ada infrastruktur "AI" yang eksotis di sini. Kamu tidak menjalankan GPU, tidak meng-hosting model sendiri, tidak butuh orkestrasi khusus machine learning. Ini backend Postgres + container + load balancer yang sudah biasa kamu kenal β€” bedanya satu dependency eksternalnya (API LLM) punya sifat latensi tinggi & biaya per-pemakaian yang sudah dibahas panjang di Fase 2 dan materi sebelumnya.

Kenapa container serverless (Fargate) cocok

Karena komputasi model beratnya ada di sisi provider (bukan di server-mu), aplikasi AI engineer pada umumnya tidak butuh GPU sendiri β€” beban kerja container-mu didominasi I/O (menunggu respons API LLM), bukan komputasi berat lokal. Ini membuatnya cocok dengan container serverless seperti ECS Fargate: kamu tidak mengelola instance EC2, cukup mendefinisikan resource (CPU/memori) yang dibutuhkan container aplikasi biasa.

API key sebagai rahasia berisiko tinggi

❌ ANTHROPIC_API_KEY di Dockerfile atau environment plaintext di task definition
❌ API key di-commit ke git (bahkan di branch/history lama)
βœ… Disimpan di AWS Secrets Manager, di-inject sebagai environment variable saat container start

API key LLM yang bocor sama berbahayanya dengan kredensial database bocor β€” penyerang bisa memakainya untuk memanggil API atas nama akunmu, menghabiskan kuota/biaya, atau (tergantung scope key) mengakses data yang terhubung. Perlakukan dengan level proteksi yang sama seperti rahasia produksi lainnya.

Graceful shutdown untuk request yang sedang streaming

Ingat dari Fase 1: chatbot production sering memakai streaming. Container yang menerima sinyal shutdown (saat deploy baru, atau scale-down) sementara sedang mem-proxy sebuah stream jawaban ke pengguna perlu menyelesaikan stream itu dulu β€” bukan langsung memutus koneksi di tengah kalimat.

Langkah shutdownKenapa
Berhenti menerima request baruLoad balancer sudah mengarahkan trafik baru ke instance lain
Tunggu stream/request yang sedang berjalan selesai (dengan batas waktu wajar)Jawaban LLM yang sedang di-stream (bisa 10+ detik) tidak terpotong paksa
Baru benar-benar matiSetelah semua request aktif selesai atau timeout tercapai

CI/CD: evaluasi sebagai bagian dari test suite

Selain test unit/integrasi biasa, aplikasi AI punya satu jenis pengujian tambahan yang layak masuk pipeline CI: menjalankan dataset evaluasi (Fase 5) setiap ada perubahan ke prompt, model, atau parameter retrieval β€” supaya regresi kualitas terdeteksi sebelum deploy, bukan lewat komplain pengguna.

pipeline CI:
  1. Test unit & integrasi biasa (seperti aplikasi lain)
  2. Jalankan dataset evaluasi RAG/chatbot (Fase 5) β€” gagal kalau skor turun signifikan dari baseline
  3. Build & push image container
  4. Deploy ke staging, smoke test
  5. Deploy ke production

Latihan penutup roadmap: gambarkan (di kertas atau teks) arsitektur lengkap untuk chatbot RAG dari Fase 6 kalau harus di-deploy sungguhan: container apa saja yang dibutuhkan, di mana API key disimpan, bagaimana rate limit per pengguna (Fase 6) dan budget alert (materi sebelumnya) terpasang, dan langkah apa yang kamu tambahkan ke pipeline CI/CD. Bandingkan gambarmu dengan diagram di awal materi ini β€” bagian mana yang sudah sama, bagian mana yang perlu kamu sesuaikan untuk kasus nyatamu.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.