← Semua pembelajaran / Laravel Nol β†’ Enterprise
Fase 9 Β· Deploy di AWS

Memilih compute di AWS

Keputusan ini menentukan bentuk seluruh sisa fase. Untungnya, karakteristik Laravel mempersempit pilihannya jauh lebih cepat daripada yang terlihat dari panjangnya daftar layanan AWS.

Intisari

  • ECS Fargate adalah default yang tepat: kontainer tanpa mengelola server, terintegrasi penuh dengan layanan AWS lain.
  • EKS hanya kalau organisasimu memang sudah berjalan di atas Kubernetes.
  • Lambda menuntut aplikasi stateless berdurasi pendek β€” bisa untuk Laravel, tapi dengan kompromi yang nyata.
  • EC2 saat butuh kendali penuh atas kernel, ekstensi, atau tipe instans khusus.
  • Beban kerja Laravel biasanya berumur panjang dan terikat I/O β€” itu profil kontainer, bukan fungsi.

Peta pilihan

LayananModelUntuk Laravel
ECS + FargateKontainer, tanpa server yang dikelolaDefault yang disarankan
ECS + EC2Kontainer di atas instans milikmuSaat butuh tipe instans khusus atau lebih murah pada skala besar
EKSKubernetes terkelolaHanya kalau organisasi sudah memakai Kubernetes
LambdaFungsi, per pemanggilanBisa (lewat Bref/Vapor), dengan kompromi
App RunnerKontainer, sangat disederhanakanPrototipe; kendalinya terbatas
Elastic BeanstalkPlatform lamaHindari untuk proyek baru
LightsailVPS sederhanaProyek kecil, satu server

Kenapa ECS Fargate untuk Laravel

Kebutuhan aplikasi LaravelFargate menjawabnya dengan
Proses web berumur panjangTask yang terus hidup, bukan fungsi berumur pendek
Worker antreanService terpisah dengan penskalaan sendiri
PenjadwalSatu task, atau dipicu EventBridge Scheduler
Worker mode (Fase 8)Proses yang tetap hidup β€” syarat mutlak
Rahasia dari secret storeIntegrasi secrets di task definition
Tidak mau mengelola OSTidak ada instans yang perlu di-patch
Skala mendatarNaikkan jumlah task; ALB menyeimbangkannya

Poin keempat itu yang menentukan. Kalau kamu berencana memakai FrankenPHP atau RoadRunner, kamu butuh proses yang tetap hidup di antara permintaan. Lambda membangun dan membekukan lingkungan eksekusi per pemanggilan, jadi model worker mode tidak cocok dengan bentuknya. Fargate memberimu proses biasa yang berjalan terus β€” persis yang dibutuhkan.

Kompromi kalau memilih Lambda

HalKonsekuensi di Lambda
Cold startPermintaan pertama setelah menganggur terasa lambat
Durasi maksimum15 menit β€” cukup untuk web, mengikat untuk job berat
BerkasFilesystem hanya baca kecuali /tmp
Koneksi databaseButuh RDS Proxy; ribuan pemanggilan bisa menghabiskan koneksi
Worker modeTidak berlaku
Biaya saat lalu lintas stabilSering lebih mahal daripada kontainer
Biaya saat lalu lintas sangat tidak merataBisa jauh lebih murah

Aturan praktisnya soal biaya. Lambda menang saat aplikasimu benar-benar menganggur sebagian besar waktu lalu melonjak tajam. Untuk lalu lintas yang berjalan sepanjang hari dengan puncak yang bisa diperkirakan, kontainer yang berjalan terus hampir selalu lebih murah β€” dan lebih sederhana, karena tidak perlu proxy koneksi dan tidak perlu memikirkan cold start.

Arsitektur acuan yang dibangun di fase ini

                  Route 53
                     β”‚
                CloudFront  ──────────►  S3 (aset & media)
                     β”‚
                    WAF
                     β”‚
            Application Load Balancer          (subnet publik)
                     β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚      ECS Fargate        β”‚            (subnet privat)
        β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
        β”‚  β”‚ service: web      β”‚  β”‚  FrankenPHP + Laravel
        β”‚  β”‚ service: worker   β”‚  β”‚  queue:work
        β”‚  β”‚ service: schedulerβ”‚  β”‚  schedule:work
        β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  Aurora        ElastiCache          SQS       Secrets Manager
 (writer +        (Redis)                       + CloudWatch
  reader)
KomponenPerannyaMateri
CloudFront + S3Aset, media, dan halaman publik yang di-cacheS3 & CloudFront
ALBTLS, health check, penyebaran lalu lintasALB
ECS FargateMenjalankan kontainer web, worker, penjadwalFargate, task definition
AuroraDatabase, writer dan reader terpisahAurora
ElastiCacheCache, session, lockElastiCache
SQSAntrean yang tahan gangguanSQS
Secrets ManagerKredensial dan APP_KEYSecrets Manager

Tentang jaringan

  1. Task ECS tinggal di subnet privat. Hanya ALB yang boleh menghubunginya.
  2. Database dan Redis di subnet privat, security group-nya hanya menerima dari security group task.
  3. Akses keluar lewat NAT Gateway β€” atau lewat VPC endpoint untuk layanan AWS, yang lebih murah pada volume besar.
  4. Jangan pernah memberi alamat IP publik pada task aplikasi.

Aturan pertama itu punya kaitan langsung dengan Fase 1. Karena hanya ALB yang bisa menjangkau task, konfigurasi trusted proxy dengan at: '*' menjadi aman β€” tidak ada seorang pun di luar yang bisa memalsukan X-Forwarded-For. Kalau task punya IP publik, asumsi itu runtuh dan rate limiting-mu bisa ditembus.

Latihan: gambar ulang diagram di atas untuk aplikasimu sendiri, dan tandai untuk setiap komponen: apakah ia di subnet publik atau privat, dan siapa saja yang boleh menghubunginya. Diagram inilah yang nanti kamu terjemahkan jadi security group.

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