全部产品
Search
文档中心

Function Compute:Penangan

更新时间:Jul 06, 2025

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 menjadi main.handler, Function Compute memuat metode handler yang didefinisikan di main.py dan menjalankan fungsi dari handler.

  • 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.

Catatan

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

Buat Fungsi Acara

Prosedur

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

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.

  3. Pada halaman detail fungsi, klik tab Code. Di editor kode, masukkan kode sampel sebelumnya dan klik Deploy.

    Penting

    Pada kode sampel sebelumnya, penangan adalah metode handler di index.py. Jika penangan fungsi Anda berbeda, gunakan konfigurasi penangan aktual.

  4. Pada tab Code, klik ikon down di sebelah Test Function, klik Configure Test Parameters dari daftar drop-down, masukkan parameter uji dalam kode sampel berikut, lalu klik OK.

    {
      "key": "value"
    }
  5. 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.

Penting

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

Buat Fungsi Acara

Prosedur

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

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.

  3. Pada halaman detail fungsi, klik tab Code. Di editor kode, masukkan kode sampel sebelumnya dan klik Deploy.

    Penting

    Pada kode sampel sebelumnya, penangan adalah metode handler di index.py. Jika penangan fungsi Anda berbeda, gunakan konfigurasi penangan aktual.

  4. Pada tab Code, klik ikon down 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"
    }
  5. Klik Test Function.

    Setelah fungsi dieksekusi, hasil eksekusi dikembalikan. Dalam contoh ini, success dikembalikan.

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 ret

Contoh 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

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

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.

  3. Pada halaman detail fungsi, klik tab Pemicu untuk memperoleh titik akakhir publik pemicu HTTP.

  4. 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.run adalah titik akhir publik pemicu HTTP yang diperoleh.

    Penting
    • Jika 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!"