Fargate #

Di dalam ekosistem komputasi awan modern, kontainerisasi menggunakan Docker telah menjadi standar de facto untuk membungkus, mendeploy, dan menjalankan aplikasi secara konsisten di berbagai lingkungan. Namun, mengoperasikan aplikasi berbasis kontainer pada skala produksi secara tradisional menuntut kita untuk mengelola infrastruktur server virtual (seperti AWS EC2) yang mendasarinya. Kita harus mengonfigurasi kluster server, mengatur auto-scaling group untuk VM, dan terus melakukan patching sistem operasi.

Di sinilah AWS Fargate hadir sebagai solusi revolusioner: sebuah mesin komputasi (compute engine) berbasis serverless yang dirancang khusus untuk menjalankan kontainer. Dengan Fargate, kita tidak perlu lagi memikirkan keberadaan mesin virtual di bawah kluster kontainer kita. Fokus tim pengembang bergeser sepenuhnya dari mengelola server menjadi menjalankan kontainer aplikasi.


Apa itu AWS Fargate? #

AWS Fargate adalah mesin komputasi serverless untuk kontainer yang bertindak sebagai opsi backend eksekusi untuk dua layanan orkestrasi kontainer utama di AWS:

  1. Amazon ECS (Elastic Container Service): Layanan orkestrasi kontainer milik AWS yang simpel, cepat, dan terintegrasi erat dengan ekosistem AWS.
  2. Amazon EKS (Elastic Kubernetes Service): Layanan Kubernetes terkelola standar industri untuk menjalankan beban kerja Kubernetes.

Saat menggunakan ECS atau EKS tanpa Fargate, kita harus memilih tipe instans EC2 (VM) untuk dijadikan node worker di dalam kluster kita. Kita bertanggung jawab penuh atas ketersediaan dan kapasitas node tersebut. Sebaliknya, saat kita memilih Fargate sebagai tipe peluncuran (launch type), AWS akan mengabstraksikan seluruh worker node tersebut. AWS menyediakan daya komputasi secara dinamis untuk setiap tugas (task) ECS atau pod EKS yang kita minta, lalu mematikannya kembali ketika tugas tersebut selesai.

flowchart TD
    Client["Klien Internet"] -->|HTTP/HTTPS| ALB["Application Load Balancer"]
    
    subgraph VPC["Virtual Private Cloud (VPC)"]
        subgraph SubnetAZ1["Public Subnet (AZ 1)"]
            ALB
        end
        
        subgraph SubnetAZ2["Private Subnet (AZ 1)"]
            Task1["Fargate Task (MicroVM 1)<br/>IP: 10.0.1.50"]
        end
        
        subgraph SubnetAZ3["Private Subnet (AZ 2)"]
            Task2["Fargate Task (MicroVM 2)<br/>IP: 10.0.2.75"]
        end
        
        ALB -->|Rute Traffic| Task1
        ALB -->|Rute Traffic| Task2
        
        Task1 -.->|Simpan Data| EFS["AWS EFS (Persistent Storage)"]
        Task2 -.->|Simpan Data| EFS
    end

    Task1 -->|IAM Task Role| AWS_Services["AWS Services (S3, DynamoDB)"]
    Task2 -->|IAM Task Role| AWS_Services

Perbandingan Komparatif: Lambda vs. Fargate vs. EC2 #

Untuk menentukan kapan kita harus menggunakan Fargate dibandingkan opsi komputasi AWS lainnya, mari kita tinjau matriks perbandingan berikut:

Kriteria AWS Lambda (FaaS) AWS Fargate (Serverless Container) AWS EC2 (Mesin Virtual)
Abstraksi Utama Fungsi Tunggal (Single Function) Container Image (Docker) Sistem Operasi (Virtual Machine)
Batas Waktu Eksekusi Maksimal 15 menit Tidak ada batas (Bisa long-running) Tidak ada batas
Model Biaya Per invokasi & per milidetik eksekusi Per vCPU & RAM per detik eksekusi Flat rate per jam/detik uptime server
Kecepatan Startup Milidetik (Sangat cepat) Detik ke menit (Menengah) Menit (Lambat)
Fleksibilitas Protokol Terbatas (HTTP, event trigger) Bebas (TCP, UDP, WebSockets, dll) Bebas penuh
Overhead Operasional Hampir nol (Hanya kelola kode) Sangat rendah (Kelola container) Tinggi (Kelola OS, patch, network, VM)

Konfigurasi Esensial AWS Fargate #

Mengonfigurasi Fargate dengan benar memastikan performa aplikasi yang optimal serta efisiensi anggaran cloud.

1. Alokasi vCPU dan Memori (RAM) #

Saat mendefinisikan kontainer di Fargate, kita harus menetapkan kombinasi kapasitas vCPU dan memori yang kaku sesuai standar yang didukung oleh AWS. Kita tidak bisa mengalokasikan RAM yang sangat besar dengan CPU yang sangat kecil.

Kombinasi kapasitas yang umum didukung meliputi:

  • 0.25 vCPU: Alokasi RAM 0.5 GB, 1 GB, atau 2 GB.
  • 0.50 vCPU: Alokasi RAM 1 GB, 2 GB, 3 GB, atau 4 GB.
  • 1.00 vCPU: Alokasi RAM antara 2 GB hingga 8 GB (kelipatan 1 GB).
  • 2.00 vCPU: Alokasi RAM antara 4 GB hingga 16 GB.
  • 4.00 vCPU: Alokasi RAM antara 8 GB hingga 30 GB.

2. Mode Jaringan awsvpc #

Semua tugas yang berjalan di atas AWS Fargate wajib menggunakan mode jaringan awsvpc. Ini adalah mode jaringan paling canggih dan aman di ECS.

Karakteristik mode awsvpc:

  • Setiap tugas (task) Fargate mendapatkan Elastic Network Interface (ENI) miliknya sendiri di dalam subnet VPC kita.
  • Setiap tugas mendapatkan alamat IP privat tersendiri layaknya instans EC2 normal.
  • Kita dapat menerapkan aturan keamanan lalu lintas data menggunakan Security Groups secara granular langsung di tingkat tugas individu, bukan di tingkat kluster global.

3. Dua Jenis Peran IAM (Task Role vs. Task Execution Role) #

Salah satu aspek keamanan paling krusial di ECS Fargate adalah pemisahan dua peran IAM yang berbeda:

  • Task Execution Role: Peran IAM yang digunakan oleh agen ECS AWS untuk melakukan tindakan administratif luar sebelum kontainer aplikasi kita menyala. Contohnya: hak untuk menarik (pull) Docker image dari Amazon Elastic Container Registry (ECR) dan hak untuk menulis log stdout ke Amazon CloudWatch Logs.
  • Task Role: Peran IAM yang digunakan oleh aplikasi di dalam kontainer kita ketika sudah berjalan untuk mengakses layanan AWS lainnya. Contohnya: memberikan izin bagi kode Node.js kita untuk membaca file dari bucket Amazon S3 atau menulis data ke Amazon DynamoDB.

Integrasi Penyimpanan Data (Storage) #

Kontainer secara default bersifat tidak tetap (ephemeral). Saat kontainer mati atau dihancurkan, seluruh file baru yang tertulis di dalam memori lokal kontainer akan hilang. Fargate menyediakan dua opsi penyimpanan data untuk mengatasi hal ini:

Ephemeral Storage (Penyimpanan Sementara) #

Setiap tugas Fargate secara default mendapatkan penyimpanan lokal sementara sebesar 20 GB secara gratis (dapat kita tingkatkan hingga maksimal 200 GB dengan biaya tambahan). Penyimpanan ini sangat cepat karena berada di disk lokal fisik server host, namun file di dalamnya akan ikut terhapus secara permanen saat tugas Fargate tersebut dimatikan atau di-restart. Cocok untuk caching sementara atau buffer file sebelum di-upload ke S3.

Persistent Storage menggunakan Amazon EFS #

Untuk aplikasi yang membutuhkan penyimpanan file permanen yang dapat dibagikan secara aman ke banyak kontainer sekaligus (seperti CMS WordPress atau aplikasi legacy), Fargate mendukung pemasangan (mounting) volume Amazon Elastic File System (EFS) berbasis protokol NFS. Data di dalam EFS akan tetap aman tersimpan meskipun seluruh kontainer Fargate kita dihancurkan dan diganti dengan instans baru.


Optimasi Startup dengan Multi-Stage Docker Build #

Kecepatan startup kontainer Fargate sangat dipengaruhi oleh ukuran file Docker image yang kita gunakan. Setiap kali Fargate memunculkan tugas baru, ia harus mengunduh image tersebut dari registry ECR melalui jaringan. Image yang berukuran gigabyte akan memicu cold start tugas yang lambat.

Berikut adalah contoh penulisan Dockerfile yang dioptimalkan menggunakan teknik Multi-Stage Build untuk menghasilkan image seminimal mungkin untuk aplikasi Node.js.

# ==========================================
# STAGE 1: Tahap Pembangunan (Build Stage)
# ==========================================
FROM node:20-alpine AS builder

# Tentukan direktori kerja di dalam container
WORKDIR /app

# Salin manifest dependensi
COPY package*.json ./

# Install seluruh dependensi (termasuk devDependencies untuk kompilasi TypeScript/babal)
RUN npm ci

# Salin seluruh kode sumber aplikasi
COPY . .

# Jalankan proses build (misalnya kompilasi TypeScript ke Javascript)
RUN npm run build

# Hapus dependensi development untuk menghemat ruang penyimpanan
RUN npm prune --production

# ==========================================
# STAGE 2: Tahap Produksi (Production Stage)
# ==========================================
# ✓ BENAR: Menggunakan image dasar minimal (alpine) di tahap akhir
FROM node:20-alpine AS runner

WORKDIR /app

# Tentukan environment variable produksi
ENV NODE_ENV=production

# ✓ BENAR: Hanya menyalin file hasil kompilasi dan dependensi produksi dari Stage 1
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./

# Jalankan aplikasi sebagai user non-root demi keamanan kontainer
USER node

# Tentukan port aplikasi
EXPOSE 3000

# Jalankan aplikasi Node.js
CMD ["node", "dist/index.js"]

Dengan teknik Multi-Stage Build ini, pustaka pembantu pengembangan (devDependencies) dan file source TypeScript mentah dibuang dari hasil akhir image, sehingga ukuran image Docker turun dari ~800 MB menjadi kurang dari ~120 MB. Ini mempercepat waktu startup Fargate secara drastis.


Ringkasan #

  • AWS Fargate adalah compute engine serverless yang mengeksekusi kontainer Docker tanpa mengharuskan kita mengelola server virtual (EC2) atau kluster node worker.
  • Fargate menjembatani celah FaaS (Lambda) dengan mendukung proses yang berjalan lama (long-running), mendukung protokol network non-HTTP bebas, dan membebaskan batasan runtime.
  • Mode jaringan awsvpc memberikan ENI khusus dan IP privat unik untuk setiap tugas Fargate, memungkinkan pengamanan lalu lintas menggunakan Security Groups secara granular.
  • Pahami perbedaan peran IAM: Task Execution Role digunakan oleh platform ECS untuk persiapan running, sedangkan Task Role digunakan oleh kode aplikasi kita untuk akses SDK.
  • Gunakan teknik Multi-Stage Docker Build untuk meminimalkan ukuran image Docker guna memangkas durasi unduhan image dan mempercepat startup kontainer Fargate.

← Sebelumnya: Lambda   Berikutnya: SQS →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact