Bahasa Indonesia

Buka kekuatan komputasi tanpa server dengan Google Cloud Functions. Panduan ini membahas pemicu HTTP, memberi pengembang di seluruh dunia pengetahuan untuk membangun aplikasi berbasis peristiwa yang dapat diskalakan.

Google Cloud Functions: Panduan Lengkap untuk Pemicu HTTP

Google Cloud Functions (GCF) adalah lingkungan eksekusi tanpa server yang memungkinkan Anda membangun dan menghubungkan layanan cloud. Dengan Cloud Functions, Anda menulis fungsi sederhana dan khusus yang dilampirkan ke peristiwa yang dipancarkan dari infrastruktur dan layanan cloud Anda. Fungsi Anda dieksekusi ketika peristiwa yang Anda pantau terjadi. Pendekatan ini memungkinkan Anda mengembangkan aplikasi berbasis peristiwa tanpa mengelola server atau runtime.

Salah satu cara paling umum untuk memicu Cloud Function adalah melalui permintaan HTTP. Panduan ini akan membahas dunia pemicu HTTP di Google Cloud Functions, memberi Anda pengetahuan untuk membangun aplikasi yang kuat, dapat diskalakan, dan hemat biaya.

Apa itu Pemicu HTTP?

Pemicu HTTP memungkinkan Anda menjalankan Cloud Function sebagai respons terhadap permintaan HTTP. Pada dasarnya, ketika permintaan HTTP dikirim ke URL tertentu, Google Cloud Functions akan secara otomatis menjalankan fungsi yang terkait. Ini menjadikan pemicu HTTP ideal untuk membangun API, webhook, dan aplikasi web berbasis peristiwa.

Manfaat Utama Menggunakan Pemicu HTTP:

Membuat Cloud Function dengan Pemicu HTTP

Mari kita telusuri proses pembuatan Cloud Function sederhana dengan pemicu HTTP. Kita akan membuat fungsi yang merespons dengan pesan "Halo, Dunia!". Contoh ini dapat diadaptasi untuk berbagai lokal global hanya dengan memodifikasi string keluaran.

Prasyarat:

Langkah-langkah:

  1. Buat Proyek Baru (jika Anda belum memilikinya):

    Jika Anda belum memiliki proyek GCP, buatlah di Google Cloud Console.

  2. Aktifkan Cloud Functions API:

    Di Cloud Console, navigasikan ke Cloud Functions API dan aktifkan.

  3. Buat Direktori Fungsi:

    Buat direktori baru untuk Cloud Function Anda. Contohnya:

    mkdir hello-http
    cd hello-http
  4. Tulis Kode Fungsi:

    Buat file bernama `main.py` (atau `index.js` untuk Node.js) dengan kode berikut:

    Python (main.py):

    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            <https://flask.palletsprojects.com/en/1.1.x/api/#flask.Request>
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            <https://flask.palletsprojects.com/en/1.1.x/api/#flask.Flask.make_response>.
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and 'name' in request_json:
            name = request_json['name']
        elif request_args and 'name' in request_args:
            name = request_args['name']
        else:
            name = 'World'
        return f'Hello, {name}!'

    Node.js (index.js):

    exports.helloHttp = (req, res) => {
      let name = 'World';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Hello, ${name}!`);
    };
    
  5. Buat File Requirements (khusus Python):

    Jika Anda menggunakan Python, buat file bernama `requirements.txt` dan tambahkan dependensi apa pun yang dibutuhkan fungsi Anda. Untuk contoh ini, ini tidak terlalu diperlukan, tetapi merupakan praktik yang baik untuk menyertakannya. Anda dapat membiarkannya kosong jika Anda tidak memiliki dependensi apa pun.

  6. Deploy Fungsi:

    Gunakan perintah `gcloud functions deploy` untuk men-deploy fungsi Anda. Ganti `YOUR_FUNCTION_NAME` dengan nama yang Anda inginkan untuk fungsi Anda.

    Python:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime python39 \
        --trigger-http \
        --allow-unauthenticated

    Node.js:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime nodejs16 \
        --trigger-http \
        --allow-unauthenticated

    Penjelasan parameter:

    • `YOUR_FUNCTION_NAME`: Nama yang ingin Anda berikan untuk Cloud Function Anda.
    • `--runtime`: Lingkungan runtime untuk fungsi Anda (misalnya, `python39`, `nodejs16`).
    • `--trigger-http`: Menentukan bahwa fungsi harus dipicu oleh permintaan HTTP.
    • `--allow-unauthenticated`: Memungkinkan siapa pun untuk memanggil fungsi tanpa otentikasi. Peringatan: Berhati-hatilah saat mengaktifkan ini di lingkungan produksi! Pertimbangkan untuk menerapkan otentikasi dan otorisasi yang tepat.
  7. Uji Fungsi:

    Setelah deployment, perintah `gcloud` akan mengeluarkan URL fungsi Anda. Anda kemudian dapat mengujinya dengan mengirimkan permintaan HTTP ke URL tersebut menggunakan alat seperti `curl` atau Postman.

    curl YOUR_FUNCTION_URL

    Anda akan melihat pesan "Halo, Dunia!" dalam respons. Anda juga dapat meneruskan nama sebagai parameter kueri:

    curl "YOUR_FUNCTION_URL?name=YourName"

    Ini akan mengembalikan "Halo, YourName!"

Memahami Permintaan dan Respons HTTP

Ketika Cloud Function dipicu oleh permintaan HTTP, ia menerima objek yang berisi informasi tentang permintaan tersebut. Objek ini biasanya mencakup:

Fungsi Anda kemudian harus mengembalikan respons HTTP, yang mencakup:

Contoh: Menangani Metode HTTP yang Berbeda

Berikut adalah contoh cara menangani metode HTTP yang berbeda dalam Cloud Function Anda:

Python (main.py):

from flask import escape

def http_method(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response`<https://flask.palletsprojects.com/en/2.0.x/api/#flask.Flask.make_response>.
    """
    if request.method == 'GET':
        return 'This is a GET request!'
    elif request.method == 'POST':
        request_json = request.get_json(silent=True)
        if request_json and 'message' in request_json:
            message = escape(request_json['message'])
            return f'This is a POST request with message: {message}'
        else:
            return 'This is a POST request without a message.'
    else:
        return 'Unsupported HTTP method.', 405

Node.js (index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('This is a GET request!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`This is a POST request with message: ${message}`);
      } else {
        res.status(200).send('This is a POST request without a message.');
      }
      break;
    default:
      res.status(405).send('Unsupported HTTP method!');
      break;
  }
};

Ingatlah untuk men-deploy fungsi yang diperbarui menggunakan perintah `gcloud functions deploy`.

Mengamankan Pemicu HTTP Anda

Keamanan adalah yang terpenting saat bekerja dengan pemicu HTTP, terutama saat berurusan dengan data sensitif atau operasi penting. Berikut adalah beberapa pertimbangan keamanan utama:

Otentikasi dan Otorisasi

Secara default, Cloud Functions yang dipicu oleh HTTP dapat diakses secara publik jika Anda menggunakan `--allow-unauthenticated`. Dalam sebagian besar skenario produksi, Anda ingin membatasi akses ke pengguna atau layanan yang berwenang. Google Cloud menyediakan beberapa opsi untuk otentikasi dan otorisasi:

Validasi Input

Selalu validasi data input yang diterima oleh Cloud Function Anda untuk mencegah kerentanan keamanan seperti injeksi SQL atau cross-site scripting (XSS). Gunakan teknik sanitasi dan pelolosan yang sesuai untuk melindungi dari input berbahaya.

HTTPS

Pastikan bahwa Cloud Function Anda hanya dapat diakses melalui HTTPS untuk mengenkripsi komunikasi antara klien dan fungsi. Google Cloud Functions secara otomatis menyediakan endpoint HTTPS.

Pembatasan Laju

Terapkan pembatasan laju untuk mencegah penyalahgunaan dan serangan denial-of-service (DoS). Anda dapat menggunakan layanan seperti Google Cloud Armor untuk melindungi Cloud Functions Anda dari lalu lintas yang berlebihan.

Kasus Penggunaan untuk Pemicu HTTP

Pemicu HTTP serbaguna dan dapat digunakan dalam berbagai aplikasi. Berikut adalah beberapa kasus penggunaan umum:

Contoh di Berbagai Industri

Teknik Tingkat Lanjut

Menggunakan Variabel Lingkungan

Variabel lingkungan memungkinkan Anda mengonfigurasi Cloud Function Anda tanpa mengkodekan informasi sensitif atau nilai konfigurasi secara permanen dalam kode Anda. Anda dapat mengatur variabel lingkungan menggunakan perintah `gcloud functions deploy` atau di Google Cloud Console.

gcloud functions deploy YOUR_FUNCTION_NAME \
    --runtime python39 \
    --trigger-http \
    --set-env-vars API_KEY=YOUR_API_KEY,DATABASE_URL=YOUR_DATABASE_URL

Dalam kode Anda, Anda dapat mengakses variabel lingkungan menggunakan kamus `os.environ` (Python) atau objek `process.env` (Node.js).

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Use the API key in your function
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Use the API key in your function
  res.status(200).send(`API Key: ${apiKey}`);
};

Menangani Tugas Asinkron

Untuk tugas yang berjalan lama atau intensif secara komputasi, yang terbaik adalah menggunakan pemrosesan asinkron untuk menghindari pemblokiran permintaan HTTP. Anda dapat menggunakan layanan seperti Google Cloud Tasks atau Cloud Pub/Sub untuk memindahkan tugas-tugas ini ke antrian terpisah.

Penanganan Kesalahan dan Pencatatan Log

Terapkan penanganan kesalahan dan pencatatan log yang kuat di Cloud Functions Anda untuk mengidentifikasi dan menyelesaikan masalah dengan cepat. Gunakan Google Cloud Logging untuk mengumpulkan log dari fungsi Anda dan memantau kinerjanya.

Praktik Terbaik

Memecahkan Masalah Umum

Kesimpulan

Google Cloud Functions dengan pemicu HTTP menyediakan cara yang ampuh dan fleksibel untuk membangun aplikasi tanpa server. Dengan memahami konsep dan teknik yang dibahas dalam panduan ini, Anda dapat memanfaatkan kekuatan Cloud Functions untuk membuat solusi berbasis peristiwa, hemat biaya, dan dapat diskalakan untuk audiens global. Rangkul revolusi tanpa server dan buka potensi penuh aplikasi cloud Anda!