全部产品
Search
文档中心

Function Compute:Pengembangan kode untuk runtime Custom Container

更新时间:Jul 02, 2025

Topik ini menjelaskan metode dan batasan pemanggilan fungsi dalam runtime Custom Container serta menyediakan contoh kode.

Latar Belakang

Runtime Custom Container mendukung hosting server HTTP. Sistem mengonversi permintaan pemanggilan fungsi menjadi permintaan HTTP, mengirimkan permintaan tersebut ke server HTTP, mengonversi respons HTTP menjadi respons pemanggilan fungsi, dan kemudian mengembalikan respons pemanggilan fungsi ke klien. Gambar berikut menunjukkan prosesnya.

Fungsi dapat dipanggil menggunakan salah satu metode berikut:

  • Panggilan HTTP (direkomendasikan): Fungsi dapat dipanggil menggunakan panggilan HTTP. Sebagai contoh, Anda dapat memanggil fungsi menggunakan Pemicu HTTP atau nama domain default.

  • Panggilan API: Anda dapat memanggil fungsi dengan memanggil operasi InvokeFunction. Sebagai contoh, Anda dapat memanggil fungsi menggunakan SDK atau memicu fungsi menggunakan sumber acara.

Format permintaan dan respons server HTTP bervariasi tergantung pada metode pemanggilan.

Batasan

  • Hanya satu Pemicu HTTP yang dapat dibuat untuk fungsi HTTP di setiap versi atau alias. Untuk informasi lebih lanjut, lihat Kelola versi dan Kelola alias.

  • Batasan pada permintaan HTTP

    • Header permintaan tidak mendukung bidang kustom yang dimulai dengan x-fc- atau bidang-bidang berikut:

      • connection

      • keep-alive

    • Sistem mengembalikan kode status 400 dan kode kesalahan InvalidArgument jika permintaan melebihi salah satu batasan berikut:

      • Ukuran header: Total ukuran semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.

      • Ukuran path: Total ukuran path, termasuk semua parameter query, tidak boleh melebihi 4 KB.

      • Ukuran body: Total ukuran body dari permintaan pemanggilan sinkron tidak boleh melebihi 32 MB. Total ukuran body dari permintaan pemanggilan asinkron tidak boleh melebihi 128 KB.

  • Batasan pada respons HTTP

    • Header respons tidak mendukung bidang kustom yang dimulai dengan x-fc- atau bidang-bidang berikut:

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        Catatan

        Untuk alasan keamanan, jika Anda menggunakan nama domain default aliyuncs.com dari Function Compute, server secara paksa menambahkan bidang content-disposition: attachment ke header respons. Bidang ini membuat hasil yang dikembalikan diunduh sebagai lampiran di browser. Untuk menghapus batasan ini, Anda harus menentukan nama domain kustom. Untuk informasi lebih lanjut, lihat Konfigurasi nama domain kustom.

    • Jika respons melebihi salah satu batasan berikut, sistem mengembalikan kode status 502 dan kesalahan BadResponse:

      • Ukuran header: Total ukuran semua kunci dan nilai dalam header tidak boleh melebihi 8 KB.

  • Lainnya

    Anda dapat memetakan jalur HTTP yang berbeda untuk fungsi dengan mengikat nama domain kustom. Untuk informasi lebih lanjut, lihat Konfigurasi nama domain kustom.

Panggilan HTTP (direkomendasikan)

Untuk panggilan HTTP, Function Compute meneruskan permintaan HTTP dari klien ke server HTTP dan respons server HTTP ke klien menggunakan mode passthrough. Beberapa bidang cadangan sistem tidak dapat diteruskan. Untuk informasi lebih lanjut, lihat Batasan.

Header permintaan HTTP

Jika Anda menggunakan Pemicu HTTP atau nama domain default untuk memanggil fungsi, Anda dapat menggunakan header permintaan untuk mengontrol perilaku permintaan dalam Function Compute. Tabel berikut menjelaskan detailnya.

Parameter

Tipe

Diperlukan

Contoh

Deskripsi

X-Fc-Invocation-Type

String

Tidak

Sync

Mode pemanggilan. Untuk informasi lebih lanjut, lihat Metode pemanggilan. Nilai valid:

  • Sync: pemanggilan sinkron

  • Async: pemanggilan asinkron

X-Fc-Log-Type

String

Tidak

Tail

Metode yang digunakan untuk mengembalikan log. Nilai valid:

  • Tail: mengembalikan 4 KB terakhir log yang dihasilkan untuk permintaan saat ini.

  • None: tidak mengembalikan log untuk permintaan saat ini. Ini adalah nilai default.

Header respons HTTP

Ketika Anda menggunakan Pemicu HTTP atau nama domain default untuk memanggil fungsi, respons berisi beberapa header respons yang secara otomatis ditambahkan oleh Function Compute. Tabel berikut menjelaskan detailnya.

Parameter

Deskripsi

Contoh

X-Fc-Request-Id

ID permintaan pemanggilan fungsi.

dab25e58-9356-4e3f-97d6-f044c4****

Panggilan API

Untuk pemanggilan fungsi yang diinisiasi oleh operasi InvokeFunction, Function Compute mengonversi permintaan yang dikirim dari operasi InvokeFunction menjadi permintaan HTTP dan meneruskan permintaan tersebut ke klien. Aturan konversi berikut berlaku:

  • Parameter event dari InvokeFunction dikonversi menjadi badan pesan permintaan HTTP.

  • path disetel ke /invoke.

  • method disetel ke POST.

  • Content-Type disetel ke application/octe-stream.

Function Compute mengonversi respons server HTTP menjadi respons InvokeFunction dan mengembalikan respons tersebut ke klien. Aturan konversi berikut berlaku:

  • Badan respons HTTP dikonversi menjadi badan respons InvokeFunction.

  • Informasi header respons HTTP dan kode status hilang selama konversi.

Contoh konversi permintaan InvokeFunction

Permintaan InvokeFunction

Permintaan HTTP yang diterima oleh server HTTP

Konten permintaan InvokeFunction:

"hello world"
> POST /invoke HTTP/1.1
> Host: 21.0.X.X
> Content-Length: 11
> Content-Type: application/octet-stream

hello world

Contoh keluaran respons InvokeFunction

Respons HTTP

Respons InvokeFunction

< HTTP/1.1 200 OK
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 11
< Connection: keep-alive

hello world

hello world
< HTTP/1.1 400 Bad Request
< Date: Mon, 10 Jul 2023 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 28
< Connection: keep-alive

{"errorMessage":"exception"}
{"errorMessage":"exception"}

Contoh kode

Saat Anda mengonfigurasi pemicu untuk fungsi Anda, Anda dapat mengimplementasikan server HTTP dalam bahasa apa pun. Python digunakan sebagai contoh dalam topik ini.

import os
from flask import Flask
from flask import request

REQUEST_ID_HEADER = 'x-fc-request-id'
app = Flask(__name__)


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def hello_world(path):
    rid = request.headers.get(REQUEST_ID_HEADER)
    data = request.stream.read()
    print("Path: " + path)
    print("Data: " + str(data))
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

    

Deskripsi:

  • @app.route('/', defaults={'path': ''}): rute default, yang sesuai dengan direktori root.

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']): rute dinamis yang berisi parameter path. Permintaan GET, POST, PUT, dan DELETE dapat diproses. Nilai parameter path diteruskan ke fungsi hello_world sebagai parameter path.

  • rid = request.headers.get(REQUEST_ID_HEADER): mendapatkan nilai bidang x-fc-request-id dalam header permintaan.

  • data = request.stream.read(): membaca isi permintaan dan menetapkannya ke variabel data.

  • return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]: mengembalikan badan respons yang berisi "Hello, World!" dan menetapkan kode status menjadi 200 serta tuple yang berisi header Function-Name.