Anda dapat menggunakan penangan Python untuk menanggapi peristiwa yang diterima dan menjalankan logika bisnis yang sesuai. Topik ini menjelaskan konsep serta struktur penangan Python dan memberikan contoh.
Apa itu penangan?
Penangan suatu fungsi di Function Compute adalah metode yang digunakan untuk memproses permintaan dalam kode fungsi. Saat fungsi dipanggil, Function Compute menggunakan penangan yang dikonfigurasi untuk memproses permintaan. Anda dapat mengonfigurasi penangan dengan parameter Handler di Konsol Function Compute.
Penangan fungsi Python di Function Compute mengikuti format NamaFile.NamaMetode. Sebagai contoh, jika nama file Anda adalah main.py dan nama metode Anda adalah handler, maka penanganannya adalah main.handler.
Untuk informasi lebih lanjut tentang fungsi di Function Compute dan operasi terkait, lihat Buat Fungsi Acara.
Konfigurasi penangan harus sesuai dengan spesifikasi konfigurasi Function Compute. Spesifikasi konfigurasi bervariasi berdasarkan jenis penangan.
Tanda tangan penangan
Berikut adalah contoh kode yang menunjukkan tanda tangan penangan sederhana:
def handler(event, context):
return 'hello world'Deskripsi Parameter:
handler: Nama metode. Metode ini sesuai dengan nilai yang ditentukan untuk parameter Handler di Konsol Function Compute. Sebagai contoh, jika Anda menetapkan penangan untuk fungsi Function Compute menjadimain.handler, Function Compute memuat metodehandleryang didefinisikan dimain.pydan menjalankan fungsi darihandler.event: Parameter yang dilewatkan saat Anda memanggil fungsi. Di runtime Python 2.7, nilai parameter ini bertipe string. Di runtime Python 3, nilai parameter ini bertipe bytes.context: Informasi konteks runtime yang disediakan saat fungsi Function Compute dipanggil.
Jika Anda ingin menggunakan pemicu HTTP atau nama domain kustom untuk mengakses fungsi, peroleh struct permintaan sebelum mendefinisikan respons HTTP. Untuk informasi lebih lanjut, lihat Gunakan Pemicu HTTP untuk Memanggil Fungsi.
Contoh 1: Mengurai parameter berformat JSON
Kode sampel
Saat Anda melewatkan parameter berformat JSON ke fungsi di Function Compute, Function Compute meneruskan parameter tersebut, dan Anda perlu mengurai parameter tersebut di dalam kode. Kode sampel berikut menunjukkan cara mengurai peristiwa dalam format JSON.
# -*- coding: utf-8 -*-
import json
def handler(event, context):
evt = json.loads(event)
return evt['key']Sebelum Anda mulai
Prosedur
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
Pada halaman detail fungsi, klik tab Code. Di editor kode, masukkan kode sampel sebelumnya dan klik Deploy.
PentingPada kode sampel sebelumnya, penangan adalah metode
handlerdiindex.py. Jika penangan fungsi Anda berbeda, gunakan konfigurasi penangan aktual.Pada tab Code, klik ikon
di sebelah Test Function, klik Configure Test Parameters dari daftar drop-down, masukkan parameter uji dalam kode sampel berikut, lalu klik OK.{ "key": "value" }Klik Test Function.
Setelah fungsi dieksekusi, hasil eksekusi dikembalikan. Hasil eksekusi dalam contoh ini adalah
value.
Contoh 2: Membaca dan menulis sumber daya OSS menggunakan pasangan AccessKey sementara
Kode sampel Python 3.12
Di runtime Python 3.12, bidang credentials di context dihapus. Anda dapat menggunakan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN untuk mengakses Object Storage Service (OSS). Potongan kode berikut menunjukkan sebuah contoh: Untuk informasi lebih lanjut, lihat Memperoleh AccessKey dan AssumeRole.
import json
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'Kode sampel Python 3.10
Anda dapat menggunakan pasangan kunci sementara yang disediakan oleh Function Compute untuk mengakses Object Storage Service. Potongan kode berikut memberikan sebuah contoh:OSS
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'Dalam kode sampel sebelumnya, creds = context.credentials menentukan untuk memperoleh pasangan AccessKey sementara dari context. Ini mencegah pengkodean keras informasi sensitif seperti rahasia.
Pastikan bahwa peran yang dikonfigurasi memiliki izin untuk mengakses OSS. Anda dapat masuk ke Konsol Resource Access Management (RAM) dan memberikan peran izin untuk mengakses OSS.
Sebelum Anda mulai
Prosedur
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
Pada halaman detail fungsi, klik tab Code. Di editor kode, masukkan kode sampel sebelumnya dan klik Deploy.
PentingPada kode sampel sebelumnya, penangan adalah metode
handlerdiindex.py. Jika penangan fungsi Anda berbeda, gunakan konfigurasi penangan aktual.Pada tab Code, klik ikon
di sebelah Test Function, klik Configure Test Parameters dari daftar drop-down, masukkan parameter uji dalam kode sampel 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.
Setelah fungsi dieksekusi, hasil eksekusi dikembalikan. Dalam contoh ini,
successdikembalikan.
Contoh 3: Memanggil perintah eksternal
Anda dapat menggunakan program Python untuk membuat proses fork untuk memanggil perintah eksternal. Sebagai contoh, Anda dapat menggunakan modul subprocess untuk memanggil perintah ls -l di Linux. File di direktori saat ini akan dikembalikan. Kode sampel berikut menunjukkan sebuah contoh:
import os
import subprocess
def handler(event, context):
ret = subprocess.check_output(['ls', "-l"])
return retContoh 4: Gunakan pemicu HTTP untuk memanggil fungsi
Kode Sampel
Untuk informasi lebih lanjut tentang format payload permintaan dan payload respons pemicu HTTP, lihat Gunakan Pemicu HTTP untuk Memanggil Fungsi.
# -*- 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:
return "Permintaan tidak berasal dari pemicu HTTP karena peristiwa bukan string json, peristiwa: {}".format(event)
if "body" not in event_json:
return "Permintaan tidak berasal dari pemicu HTTP karena peristiwa tidak mencakup bidang 'body', peristiwa: {}".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
}
Sebelum Anda mulai
Gunakan contoh sebelumnya untuk membuat fungsi dalam runtime Python. Konfigurasikan pemicu HTTP untuk fungsi tersebut. Untuk informasi lebih lanjut, lihat Buat Fungsi Acara dan Konfigurasikan Pemicu HTTP.
Prosedur
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
Pada halaman detail fungsi, klik tab Pemicu untuk memperoleh titik akakhir publik pemicu HTTP.
Jalankan perintah berikut di curl untuk memanggil fungsi:
curl -i "https://test-python-ipgrwr****.cn-shanghai.fcapp.run" -d 'Hello fc3.0'Dalam perintah sebelumnya,
https://test-python-ipgrwr****.cn-shanghai.fcapp.runadalah titik akhir publik pemicu HTTP yang diperoleh.PentingJika parameter Authentication Method pemicu HTTP diatur ke No Authentication, Anda dapat menggunakan Postman atau curl untuk memanggil fungsi. Untuk informasi lebih lanjut, lihat Prosedur.
Jika parameter Authentication Method pemicu HTTP diatur ke Signature Authentication atau JWT Authentication, gunakan metode tandatangan atau metode otentikasi JWT untuk memanggil fungsi. Untuk informasi lebih lanjut, lihat Otentikasi.
Hasil berikut dikembalikan:
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
Kesalahan yang mungkin terjadi
Kode sampel dapat dipanggil menggunakan pemicu HTTP atau nama domain kustom. Jika Anda menggunakan operasi API tetapi parameter uji yang dikonfigurasikan tidak sesuai dengan persyaratan format permintaan pemicu HTTP, kesalahan akan dilaporkan.
Sebagai contoh, respons berikut dikembalikan jika Anda memanggil fungsi dengan mengklik Test Function di Konsol Function Compute setelah Anda mengonfigurasi parameter permintaan sebagai "Hello, FC!".
Permintaan tidak berasal dari pemicu HTTP, peristiwa: "Hello, FC!"