Topik ini menjelaskan struktur event handler untuk fungsi Python di Function Compute dan menyediakan contoh kode untuk skenario umum: menguraikan event JSON, mengakses OSS menggunakan kredensial temporary, serta menjalankan perintah eksternal.
Signatur handler
Semua event handler Python menggunakan signature berikut:
def handler(event, context):
return 'hello world'| Parameter | Deskripsi |
|---|---|
handler | Metode yang memproses permintaan masuk. Nama metode ini harus sesuai dengan nilai Request Handler yang dikonfigurasi di Konsol Function Compute. Misalnya, jika request handler diatur ke main.handler, Function Compute akan memuat main.py dan memanggil fungsi handler yang didefinisikan dalam file tersebut. |
event | Input yang diberikan saat fungsi dipanggil. Di Python 2.7, nilainya berupa str (STRING). Di Python 3, nilainya berupa bytes (BYTES). |
context | Konteks waktu proses yang disediakan saat pemanggilan. Gunakan konteks ini untuk mengakses kredensial temporary dan metadata waktu proses lainnya. |
Contoh 1: Menguraikan event JSON
Function Compute meneruskan data event sebagai byte mentah. Uraikan muatan tersebut dengan json.loads() sebelum mengakses bidang-bidang individual.
# -*- coding: utf-8 -*-
import json
def handler(event, context):
evt = json.loads(event)
return evt['key']Prasyarat
Sebelum memulai, pastikan Anda telah:
Menguji fungsi
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan target.
Di halaman Functions, klik nama fungsi target.
Di halaman Function Details, klik tab Code, tempel kode contoh ke editor kode, lalu klik Deploy.
PentingDalam kode contoh, handler adalah metode
handlerdiindex.py. Jika konfigurasi handler fungsi Anda berbeda, sesuaikan kodenya.Di tab Code, klik ikon
di samping Test Function, pilih Configure Test Parameters dari daftar drop-down, masukkan input uji berikut, lalu klik OK.{ "key": "value" }Klik Test Function.
Hasil eksekusi adalah value.
Contoh 2: Mengakses OSS menggunakan kredensial temporary
Gunakan kredensial temporary dari context.credentials untuk mengakses Object Storage Service (OSS). Pendekatan ini menghindari hardcoding informasi sensitif seperti pasangan AccessKey di dalam kode Anda.
import json
import oss2
def handler(event, context):
evt = json.loads(event)
creds = context.credentials
# jangan lupa security_token
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'context.credentials menyediakan tiga bidang:
| Bidang | Deskripsi |
|---|---|
access_key_id | Temporary AccessKey ID |
access_key_secret | Temporary AccessKey secret |
security_token | Token Security Token Service (STS)—wajib digunakan saat memakai oss2.StsAuth |
Peran yang ditetapkan ke fungsi harus memiliki izin untuk mengakses Object Storage Service (OSS). Berikan izin tersebut di Konsol Resource Access Management (RAM).
Prasyarat
Sebelum memulai, pastikan Anda telah:
Izin akses OSS telah diberikan ke peran fungsi melalui Konsol RAM
Menguji fungsi
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan target.
Di halaman Functions, klik nama fungsi target.
Di halaman Function Details, klik tab Code, tempel kode contoh ke editor kode, lalu klik Deploy.
PentingDalam kode contoh, handler adalah metode
handlerdiindex.py. Jika konfigurasi handler fungsi Anda berbeda, sesuaikan kodenya.Di tab Code, klik ikon
di samping Test Function, pilih Configure Test Parameters dari daftar drop-down, masukkan input uji berikut, lalu klik OK.{ "endpoint": "http://oss-cn-shenzhen-internal.aliyuncs.com", "bucket": "oss-********", "objectName": "oss-test-object", "message": "oss-test-content" }Klik Test Function.
Hasil eksekusi adalah success.
Contoh 3: Menjalankan perintah eksternal
Gunakan modul subprocess Python untuk menjalankan perintah shell Linux dari fungsi Anda. Contoh berikut menjalankan ls -l dan mengembalikan daftar direktori.
import os
import subprocess
def handler(event, context):
ret = subprocess.check_output(['ls', "-l"])
return retsubprocess.check_output() menjalankan perintah, menunggu hingga selesai, lalu mengembalikan output dalam bentuk bytes. Jika perintah berakhir dengan status non-nol, fungsi ini akan memunculkan CalledProcessError.