Cloud Functions #

Dalam lanskap komputasi awan modern, Google Cloud Platform (GCP) menawarkan berbagai solusi serverless yang sangat dioptimalkan untuk memangkas overhead operasional infrastruktur. Bagi para pengembang yang ingin mendeploy potongan kode kecil secara responsif tanpa memikirkan kontainerisasi secara manual, Google Cloud Functions (GCF) adalah solusi Function-as-a-Service (FaaS) utama.

Cloud Functions bertindak sebagai perekat logis (logical glue) di dalam ekosistem GCP. Ia mampu bereaksi terhadap perubahan data di Cloud Storage, pesan baru di Pub/Sub, atau panggilan HTTP dari pengguna secara instan. Dengan peluncuran generasi kedua (Gen 2), Cloud Functions mendesain ulang arsitektur internalnya secara radikal untuk menghadirkan performa, skalabilitas, dan batas batasan eksekusi yang jauh lebih tinggi. Artikel ini akan membedah secara mendalam evolusi GCF, integrasi internalnya dengan Eventarc, konfigurasi concurrency, serta contoh implementasi nyata di tingkat produksi.


Evolusi Google Cloud Functions: Gen 1 vs. Gen 2 #

Generasi kedua (Gen 2) Cloud Functions membawa lompatan performa yang sangat signifikan karena tidak lagi berjalan di atas infrastruktur FaaS legacy, melainkan dibangun sebagai abstraksi di atas Google Cloud Run dan Eventarc.

flowchart TD
    EventSource["Event Source (Cloud Storage, Pub/Sub, Audit Logs)"] -->|Event| Eventarc["GCP Eventarc (Event Router)"]
    Eventarc -->|Trigger| GCFGen2["Cloud Functions Gen 2 (Cloud Run Service)"]
    GCFGen2 -->|Eksekusi| Code["Kode Aplikasi (Functions Framework)"]
    
    Client["Klien HTTP"] -->|Request HTTP| GCFGen2

Berikut adalah perbandingan fitur krusial antara Gen 1 dengan Gen 2:

Parameter Evaluasi GCF Generasi 1 GCF Generasi 2 (Recommended)
Infrastruktur Bawah VM Ephemeral Terisolasi Google Cloud Run + Knative
Waktu Eksekusi Maksimal 9 menit (HTTP & Event) 60 menit (HTTP), 10 menit (Event)
Kapasitas Memori Maksimal Hingga 8 GB RAM Hingga 32 GB RAM
Kapasitas CPU Maksimal Hingga 2 vCPU Hingga 8 vCPU
Konkurensi (Concurrency) 1 request per instans (seperti AWS Lambda) Hingga 1.000 request per instans
Sistem Event Router Integrasi trigger asinkron langsung GCP Eventarc (Mendukung 90+ event sources)
Traffic Splitting Tidak didukung secara native Didukung penuh (A/B testing, Canary deployment)

Integrasi Eventarc dan Cloud Run di Gen 2 #

Kekuatan utama Cloud Functions Gen 2 berasal dari sinergi dua layanan canggih GCP di latar belakang:

1. Google Cloud Run sebagai Runtime Engine #

Ketika kita mendeploy fungsi Gen 2, Google Cloud secara otomatis membungkus kode kita ke dalam container image menggunakan Cloud Buildpacks (kita tidak perlu menulis Dockerfile sendiri) dan mendeploynya sebagai layanan privat di Google Cloud Run. Karena berjalan di atas Cloud Run, fungsi kita mendapatkan seluruh keunggulan performa kontainer Knative: startup cepat, alokasi CPU melimpah, dan dukungan concurrency.

2. Eventarc sebagai Event Router #

Untuk memicu fungsi berdasarkan peristiwa asinkron (misalnya file baru diunggah ke Cloud Storage), GCF Gen 2 menggunakan Eventarc. Eventarc bertindak sebagai sistem perutean event terpusat yang membaca Cloud Audit Logs, Pub/Sub, dan event eksternal lainnya, menerjemahkannya ke dalam standar format industri CloudEvents, dan mengirimkannya secara aman ke fungsi target melalui request HTTP POST.


Konfigurasi Konkurensi (Concurrency Tuning) #

Salah satu keunggulan terbesar Cloud Functions Gen 2 dibandingkan AWS Lambda adalah dukungan Concurrency.

Pada AWS Lambda, satu instans lingkungan eksekusi hanya dapat memproses tepat satu request dalam satu waktu. Jika ada 100 request masuk bersamaan, Lambda harus membuat 100 instans paralel, yang memicu 100 kali cold start.

Di GCF Gen 2, satu instans runtime fungsi dapat menangani hingga 1.000 request secara bersamaan (nilai default-nya adalah 80).

Mindset Concurrency:
- Request 1-80 masuk: Diproses oleh Instans Runtime 1 (Tanpa Cold Start baru!)
- Request 81 masuk: Google Cloud memicu pembuatan Instans Runtime 2 (Cold Start baru terjadi)

Dengan mengaktifkan concurrency yang tepat, kita dapat mengurangi fenomena cold start secara drastis pada traffic puncak dan menghemat biaya penggunaan instans cloud secara signifikan. Namun, pastikan kode aplikasi kita aman terhadap concurrency (thread-safe) dan tidak mengalami kebocoran memori (memory leak).


Cloud Functions vs. Cloud Run #

Sebagai pengembang di GCP, kita sering kali dihadapkan pada dilema memilih antara Cloud Functions dengan Cloud Run. Tabel berikut merangkum kapan harus memilih masing-masing layanan:

Karakteristik Google Cloud Functions Google Cloud Run
Abstraksi Developer Sangat Tinggi (Hanya menulis fungsi) Sedang (Menulis Dockerfile & kelola container)
Unit Kode File fungsi tunggal (e.g., index.js, main.py) Aplikasi web lengkap, REST API, Microservice
Peralatan Deploy Dibuat otomatis oleh Cloud Buildpacks Di-build mandiri menggunakan Cloud Build / Docker
Learning Curve Sangat Rendah Menengah (Membutuhkan pemahaman Docker)
Skenario Terbaik Glue code asinkron, webhook, cron job ringan REST API utama, web app full-stack, legacy migration

Contoh Implementasi: GCF Gen 2 (Node.js) #

Berikut adalah contoh penulisan fungsi Cloud Functions Gen 2 menggunakan Node.js dan Google Functions Framework v2 untuk memproses event unggahan file ke Cloud Storage secara asinkron.

// BENAR: Menggunakan eventhandler dari Google Functions Framework v2
import { cloudEvent } from '@google-cloud/functions-framework';
import { Storage } from '@google-cloud/storage';

// Inisiasi Cloud Storage Client di luar scope handler (Global Scope)
// Memanfaatkan warm start untuk efisiensi performa
const storage = new Storage();

// Daftarkan fungsi asinkron bertipe CloudEvent
cloudEvent('processUploadedFile', async (cloudevent) => {
    // ✓ Menerapkan logging terstruktur menggunakan format JSON standar GCP
    console.log(JSON.stringify({
        message: "Menerima event unggahan file baru dari Cloud Storage",
        eventId: cloudevent.id,
        eventType: cloudevent.type
    }));

    // Data event dibungkus dalam format standar CloudEvents
    const fileMetadata = cloudevent.data;

    const bucketName = fileMetadata.bucket;
    const fileName = fileMetadata.name;

    if (!bucketName || !fileName) {
        console.warn(JSON.stringify({
            message: "Metadata file tidak lengkap. Mengabaikan eksekusi.",
            metadata: fileMetadata
        }));
        return;
    }

    try {
        console.log(JSON.stringify({
            message: `Memulai pemrosesan file: ${fileName} di bucket: ${bucketName}`
        }));

        // Unduh file untuk pemrosesan (Simulasi pembacaan metadata)
        const [metadata] = await storage.bucket(bucketName).file(fileName).getMetadata();
        
        console.log(JSON.stringify({
            message: "Sukses membaca metadata file",
            fileSize: metadata.size,
            contentType: metadata.contentType
        }));

        // Lakukan pemrosesan file lainnya di sini (misal: resize, analisis AI)...

    } catch (error) {
        // ✗ JANGAN abaikan penanganan error. Tulis ke log agar terdeteksi Error Reporting
        console.error(JSON.stringify({
            message: "Gagal memproses file dari Cloud Storage",
            error: error.message,
            stack: error.stack
        }));
        
        // Lempar kembali error agar Eventarc melakukan retry jika diaktifkan
        throw error;
    }
});

Ringkasan #

  • Google Cloud Functions Gen 2 adalah layanan FaaS yang dibangun di atas Google Cloud Run (engine Knative) dan Eventarc (perutean event terpusat).
  • Mendukung kapasitas komputasi besar (hingga 32 GB RAM, 8 vCPU, dan timeout eksekusi HTTP hingga 60 menit) jauh melampaui limitasi Gen 1.
  • Mendukung Concurrency tingkat instans (hingga 1.000 request paralel per instans), yang secara drastis mereduksi cold start pada saat traffic puncak.
  • Semua event dikemas dalam format CloudEvents standar industri, mempermudah interoperabilitas kode lintas cloud provider.
  • Pahami trade-off dengan Cloud Run: gunakan GCF untuk fungsi penengah/event-driven ringan, dan gunakan Cloud Run untuk web service monolitik/REST API penuh.

← Sebelumnya: Terraform   Berikutnya: Cloud Run →

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