All Products
Search
Document Center

Function Compute:Handler

Last Updated:Apr 01, 2026

Handler adalah titik masuk fungsi Function Compute Anda—menerima event masuk dan berisi logika untuk memprosesnya. Topik ini mencakup tanda tangan handler Python, parameter, properti objek konteks, serta pola penggunaan umum disertai contoh yang dapat dijalankan.

Cara kerja

Saat sebuah fungsi dipanggil, Function Compute memanggil metode yang Anda tentukan dalam parameter Handler. Handler menerima dua argumen—muatan event dan konteks waktu proses—memproses event tersebut, lalu mengembalikan hasil.

Handler Python menggunakan format namafile.nama_metode. Misalnya, jika file Anda bernama main.py dan metode Anda bernama handler, atur Handler menjadi main.handler.

Untuk mengubah nama handler:

  1. Di Konsol Function Compute, klik Functions di panel navigasi sebelah kiri.

  2. Klik fungsi yang ingin Anda perbarui.

  3. Pada tab Code, gulir ke pengaturan waktu proses dan edit bidang Handler.

Catatan

Untuk menggunakan pemicu HTTP atau nama domain kustom, uraikan struktur permintaan HTTP terlebih dahulu sebelum menyusun respons. Lihat Gunakan pemicu HTTP untuk memanggil fungsi.

Tanda tangan handler

def handler(event, context):
    return 'hello world'

Parameter

ParameterTipeDeskripsi
eventstr (Python 2.7) / bytes (Python 3)Muatan event yang diteruskan saat pemanggilan. Muatan JSON diteruskan apa adanya dan harus diurai dalam kode Anda.
contextobjectKonteks waktu proses yang disediakan saat pemanggilan. Berisi kredensial dan metadata tentang fungsi yang sedang berjalan.

Pemetaan tipe JSON

Saat event berupa objek JSON, uraikan dengan json.loads() untuk mendapatkan tipe Python asli:

Tipe JSONTipe Python
objectdict
arraylist
numberint atau float
stringstr
Booleanbool
nullNoneType

Objek konteks

Objek context menyediakan informasi waktu proses tentang pemanggilan saat ini:

PropertiDeskripsi
context.credentials.access_key_idID AccessKey sementara (Python 3.10 dan sebelumnya)
context.credentials.access_key_secretRahasia AccessKey sementara (Python 3.10 dan sebelumnya)
context.credentials.security_tokenToken keamanan Security Token Service (STS) (Python 3.10 dan sebelumnya)
Penting

Pada waktu proses Python 3.12, bidang credentials dihapus dari context. Gunakan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN sebagai gantinya.

Praktik terbaik

PraktikAlasan
Pisahkan logika handler dari logika bisnisJaga agar handler tetap ringkas dan delegasikan ke fungsi pembantu. Hal ini mempermudah pengujian unit.
Gunakan variabel lingkungan untuk kredensialJangan pernah menyematkan pasangan AccessKey secara langsung. Gunakan kredensial sementara dari context.credentials (Python 3.10) atau variabel lingkungan (Python 3.12).
Uraikan event di awalPanggil json.loads(event) segera agar sisa kode Anda bekerja dengan tipe Python asli.

Prasyarat

Sebelum menjalankan contoh di bawah, pastikan Anda telah:

Contoh 1: Uraikan parameter JSON

Function Compute meneruskan muatan event tanpa modifikasi. Uraikan JSON dalam handler Anda menggunakan json.loads().

# -*- coding: utf-8 -*-
import json

def handler(event, context):
    evt = json.loads(event)
    return evt['key']
Penting

Handler pada contoh ini adalah metode handler dalam index.py. Jika fungsi Anda menggunakan nama handler berbeda, perbarui pengaturan Handler sesuai kebutuhan.

Uji contoh ini

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi untuk membukanya.

  3. Pada tab Code, tempel kode contoh ke editor lalu klik Deploy.

  4. Klik ikon down di samping Test Function, pilih Configure Test Parameters, masukkan muatan berikut, lalu klik OK:

    {
      "key": "value"
    }
  5. Klik Test Function.

Fungsi mengembalikan value.

Contoh 2: Baca dan tulis objek OSS menggunakan kredensial sementara

Gunakan kredensial sementara yang disediakan oleh Function Compute untuk mengakses Object Storage Service (OSS)—tidak perlu rahasia yang disematkan.

Dua varian di bawah hanya berbeda dalam cara memperoleh kredensial. Logika lainnya identik.

Python 3.12

Pada Python 3.12, baca kredensial dari variabel lingkungan. Untuk informasi lebih lanjut tentang penyiapan kredensial, lihat Peroleh AccessKey dan AssumeRole.

import json
import os
import oss2

def handler(event, context):
    evt = json.loads(event)
    auth = oss2.StsAuth(
        os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
        os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
        os.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")
    )
    bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
    bucket.put_object(evt['objectName'], evt['message'])
    return 'success'

Python 3.10

Pada Python 3.10 dan sebelumnya, baca kredensial dari context.credentials.

import json
import oss2

def handler(event, context):
    evt = json.loads(event)
    creds = context.credentials
    # Sertakan security_token saat menggunakan kredensial sementara STS
    auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
    bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
    bucket.put_object(evt['objectName'], evt['message'])
    return 'success'
Penting

Pastikan role yang dikonfigurasi untuk fungsi memiliki izin menulis OSS. Berikan izin di Konsol Resource Access Management (RAM).

Uji contoh ini

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi untuk membukanya.

  3. Pada tab Code, tempel kode contoh ke editor lalu klik Deploy.

    Penting

    Handler pada contoh ini adalah metode handler dalam index.py. Jika fungsi Anda menggunakan nama handler berbeda, perbarui pengaturan Handler sesuai kebutuhan.

  4. Klik ikon down di samping Test Function, pilih Configure Test Parameters, masukkan muatan berikut, lalu klik OK:

    {
      "endpoint": "http://oss-cn-shenzhen-internal.aliyuncs.com",
      "bucket": "oss-********",
      "objectName": "oss-test-object",
      "message": "oss-test-content"
    }
  5. Klik Test Function.

Fungsi mengembalikan success.

Contoh 3: Jalankan perintah eksternal

Gunakan modul subprocess untuk membuat proses fork dan menjalankan perintah sistem.

import subprocess

def handler(event, context):
    ret = subprocess.check_output(['ls', '-l'])
    return ret

Contoh ini menjalankan ls -l dan mengembalikan daftar direktori.

Contoh 4: Tangani permintaan pemicu HTTP

Fungsi yang dipanggil melalui pemicu HTTP menerima event JSON terstruktur. Respons harus mencakup statusCode, headers, isBase64Encoded, dan body.

Prasyarat

# -*- coding: utf-8 -*-
import logging
import json
import base64

def handler(event, context):
    logger = logging.getLogger()
    logger.info("receive event: %s", event)

    try:
        event_json = json.loads(event)
    except Exception:
        return "The request did not come from an HTTP Trigger because the event is not a json string, event: {}".format(event)

    if "body" not in event_json:
        return "The request did not come from an HTTP Trigger because the event does not include the 'body' field, event: {}".format(event)

    req_body = event_json['body']
    if 'isBase64Encoded' in event_json and event_json['isBase64Encoded']:
        req_body = base64.b64decode(event_json['body']).decode("utf-8")

    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'text/plain'},
        'isBase64Encoded': False,
        'body': req_body
    }

Uji contoh ini

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi untuk membukanya.

  3. Pada tab Code, tempel kode contoh ke editor lalu klik Deploy.

  4. Pada tab Triggers, salin titik akhir publik pemicu HTTP.

  5. Jalankan perintah berikut untuk memanggil fungsi:

    curl -i "https://test-python-ipgrwr****.cn-shanghai.fcapp.run" -d 'Hello fc3.0'

    Ganti https://test-python-ipgrwr****.cn-shanghai.fcapp.run dengan titik akhir yang Anda salin.

    Penting
    • Jika Authentication Method diatur ke No Authentication, panggil fungsi langsung dengan curl atau Postman.

    • Jika Authentication Method diatur ke Signature Authentication atau JWT Authentication, tandatangani permintaan sesuai ketentuan. Lihat Authentication.

Tanggapan akan tampak seperti:

HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Length: 12
Content-Type: application/json
X-Fc-Request-Id: 1-64f7449a-127fbe39cd7681596e33ebad
Date: Tue, 05 Sep 2023 15:09:14 GMT

Hello fc3.0

Kemungkinan error

Handler ini mengharapkan event pemicu HTTP. Jika Anda memanggilnya menggunakan Test Function di konsol dengan string biasa seperti "Hello, FC!", fungsi akan mengembalikan:

The request did not come from an HTTP Trigger, event: "Hello, FC!"

Langkah selanjutnya