Anda dapat menggunakan penanganan Python untuk memproses event masuk dan menjalankan logika bisnis Anda. Topik ini menjelaskan konsep dan struktur penanganan Python serta menyediakan contoh.
Apa itu penanganan?
Penanganan fungsi FC adalah metode dalam kode fungsi yang memproses permintaan. Ketika fungsi FC Anda dipanggil, Function Compute menjalankan penanganan yang Anda sediakan untuk memproses permintaan tersebut. Anda dapat mengonfigurasi penanganan di pengaturan Handler pada Function Compute console.
Untuk fungsi FC Python, penanganan Anda memiliki format filename.method_name. Misalnya, jika file Anda bernama main.py dan metodenya bernama handler, maka penanganannya adalah main.handler.
Untuk informasi lebih lanjut tentang pembuatan fungsi FC, lihat Buat fungsi yang dipicu oleh event.
Konfigurasi penanganan harus sesuai dengan spesifikasi konfigurasi Function Compute. Spesifikasi konfigurasi bervariasi tergantung pada jenis penanganan.
Tanda tangan penanganan
Kode berikut menunjukkan tanda tangan penanganan dasar:
def handler(event, context):
return 'hello world'Tanda tangan penanganan mencakup parameter berikut:
handler: Nama metode. Ini harus sesuai dengan penanganan yang Anda konfigurasikan di Function Compute console menggunakan pengaturan Handler. Misalnya, jika Anda mengatur penanganan untuk FC menjadimain.handler, Function Compute memuat metodehandleryang didefinisikan dalammain.pydan menjalankan fungsihandler.event: Parameter yang berisi data yang diteruskan ke fungsi. Pada runtime Python 2.7, ini berupa string. Pada runtime Python 3, ini berupa bytes.context: Objek yang menyediakan informasi FC tentang pemanggilan tersebut.
Jika Anda ingin menggunakan pemicu HTTP atau nama domain kustom untuk mengakses fungsi, peroleh struktur request sebelum mendefinisikan respons HTTP. Untuk informasi lebih lanjut, lihat Gunakan pemicu HTTP untuk memanggil fungsi.
Contoh 1: Uraikan event berformat JSON
Kode contoh
Function Compute meneruskan konten event berformat JSON langsung ke fungsi Anda. Anda harus mengurai konten ini dalam kode Anda. Kode contoh berikut menunjukkan cara mengurai event berformat JSON.
# -*- coding: utf-8 -*-
import json
def handler(event, context):
evt = json.loads(event)
return evt['key']Prasyarat
Buat fungsi yang dipicu oleh event
Prosedur
Login ke Function Compute console. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.
Di halaman detail fungsi, klik tab Code. Di editor kode, masukkan kode contoh lalu klik Deploy.
PentingDalam kode contoh, penanganannya adalah metode
handlerdalamindex.py. Jika penanganan fungsi Anda dikonfigurasi berbeda, perbarui nama file dan nama metode sesuai kebutuhan.Di tab Code, klik ikon panah
di samping Test Function dan pilih Configure Test Parameters. Masukkan parameter contoh berikut, lalu klik OK.{ "key": "value" }Klik Test Function.
Setelah fungsi dieksekusi, respons yang diharapkan adalah
value.
Contoh 2: Akses resource OSS secara aman
Kode contoh Python 3.12
Runtime Python 3.12 menghapus bidang credentials dari context. Sebagai gantinya, 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). Kode berikut menunjukkan contohnya. Untuk informasi lebih lanjut, lihat Buat AccessKey dan AssumeRole.
import json
import oss2
import os
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 contoh Python 3.10
Anda dapat menggunakan Function Compute yang disediakan oleh Object Storage Service untuk mengakses OSS. Kode berikut menunjukkan contohnya.
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 contoh, creds = context.credentials mengambil pasangan AccessKey temporary dari objek context. Praktik ini mencegah Anda menyematkan informasi sensitif, seperti rahasia, secara langsung dalam kode Anda.
Pastikan role yang ditetapkan ke layanan memiliki izin untuk mengakses OSS. Anda dapat login ke Resource Access Management (RAM) console untuk memberikan izin yang diperlukan kepada role tersebut.
Prasyarat
Buat fungsi yang dipicu oleh event
Prosedur
Login ke Function Compute console. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.
Di halaman detail fungsi, klik tab Code. Di editor kode, masukkan kode contoh lalu klik Deploy.
PentingDalam kode contoh, penanganannya adalah metode
handlerdalamindex.py. Jika penanganan fungsi Anda dikonfigurasi berbeda, perbarui nama file dan nama metode sesuai kebutuhan.Di tab Code, klik ikon panah
di samping Test Function dan pilih Configure Test Parameters. Masukkan parameter contoh 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, respons yang diharapkan adalah
success.
Contoh 3: Panggil perintah eksternal
Fungsi Python Anda juga dapat membuat proses fork untuk memanggil perintah eksternal. Misalnya, Anda dapat menggunakan modul subprocess untuk memanggil perintah Linux ls -l, yang mencantumkan file dalam direktori saat ini. Kode berikut menunjukkan contohnya.
import os
import subprocess
def handler(event, context):
ret = subprocess.check_output(['ls', "-l"])
return retContoh 4: Panggil fungsi dengan pemicu HTTP
Kode contoh
Untuk informasi tentang format muatan request dan respons untuk pemanggilan 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 "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
}
Prasyarat
Contoh ini memerlukan fungsi yang dipicu HTTP yang dikonfigurasi dengan runtime Python dan berdasarkan kode contoh. Untuk informasi lebih lanjut, lihat Buat fungsi yang dipicu oleh event dan Konfigurasi pemicu HTTP.
Prosedur
Login ke Function Compute console. Di panel navigasi kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.
Di halaman detail fungsi, klik tab Triggers untuk menemukan titik akhir publik pemicu HTTP.
Jalankan perintah curl berikut untuk memanggil fungsi.
curl -i "https://test-python-ipgrwr****.cn-shanghai.fcapp.run" -d 'Hello fc3.0'Dalam perintah di atas,
https://test-python-ipgrwr****.cn-shanghai.fcapp.runadalah titik akhir publik pemicu HTTP.PentingJika Authentication Method untuk pemicu HTTP diatur ke No Authentication, Anda dapat langsung menggunakan tool seperti Postman atau curl untuk memanggil fungsi. Untuk informasi lebih lanjut, lihat Prosedur di bagian ini.
Jika Authentication Method diatur ke Signature Authentication, JWT Authentication, atau Bearer Authentication, Anda harus menggunakan metode autentikasi yang sesuai untuk memanggil fungsi. Untuk informasi lebih lanjut, lihat Autentikasi dan otorisasi.
Respons 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
Kemungkinan error
Kode contoh dalam contoh ini dirancang untuk dipanggil oleh pemicu HTTP atau nama domain kustom. Jika Anda memanggil fungsi melalui panggilan API dan parameter uji tidak sesuai dengan format request pemicu HTTP, akan terjadi error.
Misalnya, di Function Compute console, jika Anda mengatur event uji menjadi "Hello, FC!" dan mengklik Test Function, fungsi akan mengembalikan respons berikut.
The request did not come from an HTTP Trigger, event: "Hello, FC!"