All Products
Search
Document Center

Function Compute:Fungsi Web

Last Updated:Jun 22, 2026

Topik ini menjelaskan metode pemanggilan, batasan, dan contoh kode untuk fungsi dalam runtime kustom.

Informasi latar belakang

Runtime kustom dapat menghosting server HTTP Anda. Function Compute mengonversi permintaan pemanggilan fungsi menjadi permintaan HTTP dan mengirimkannya ke server HTTP Anda. Function Compute kemudian mengonversi respons dari server Anda menjadi respons pemanggilan fungsi dan mengembalikannya ke klien. Gambar berikut menunjukkan proses tersebut.

Anda dapat memanggil fungsi dengan salah satu dari dua cara berikut:

  • Panggilan HTTP (Direkomendasikan): Panggil fungsi melalui HTTP menggunakan http trigger atau nama domain kustom.

  • Panggilan API: Panggil fungsi dengan memanggil API InvokeFunction, misalnya menggunakan SDK atau sumber event.

Format permintaan dan respons HTTP bergantung pada metode pemanggilan.

Batasan

  • Anda hanya dapat membuat satu http trigger untuk setiap versi atau alias fungsi. Untuk informasi selengkapnya, lihat Mengelola versi dan Mengelola alias.

  • Batasan permintaan HTTP

    • Header permintaan tidak boleh berisi bidang kustom yang diawali dengan x-fc- atau bidang-bidang berikut:

      • connection

      • keep-alive

    • Jika permintaan melebihi batasan berikut, Function Compute mengembalikan kode status 400 dan kode kesalahan InvalidArgument.

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

      • Ukuran path: Ukuran total path, termasuk semua parameter kueri, tidak boleh melebihi 4 KB.

      • Ukuran body: Ukuran total body permintaan untuk pemanggilan sinkron tidak boleh melebihi 32 MB. Ukuran total body permintaan untuk pemanggilan asinkron tidak boleh melebihi 128 KB.

  • Batasan respons HTTP

    • Header respons tidak boleh berisi bidang kustom yang diawali dengan x-fc- atau bidang-bidang berikut:

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        Catatan

        Karena alasan keamanan, saat Anda menggunakan domain aliyuncs.com bawaan untuk Function Compute, server secara paksa menambahkan header content-disposition: attachment ke respons. Header ini menyebabkan respons diunduh sebagai lampiran di browser Anda. Untuk menghapus pembatasan ini, konfigurasikan nama domain kustom.

    • Jika respons melebihi batasan berikut, Function Compute mengembalikan kode status 502 dan kode kesalahan BadResponse.

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

  • Catatan tambahan

    Anda dapat memetakan path akses HTTP yang berbeda ke fungsi Anda dengan mengikat nama domain kustom. Untuk informasi selengkapnya, lihat Konfigurasi nama domain kustom.

Panggilan HTTP (Direkomendasikan)

Untuk panggilan HTTP, Function Compute menggunakan mode passthrough. Permintaan HTTP dari klien diteruskan ke server HTTP Anda, dan respons server diteruskan kembali ke klien. Function Compute tidak meneruskan beberapa bidang yang dicadangkan sistem. Untuk informasi selengkapnya, lihat Batasan.

Header permintaan

Saat memanggil fungsi dengan http trigger atau nama domain kustom, gunakan header permintaan yang dijelaskan di bawah ini untuk mengontrol permintaan.

Nama

Tipe

Wajib

Contoh

Deskripsi

X-Fc-Invocation-Type

String

Tidak

Sync

Menentukan metode pemanggilan. Untuk informasi selengkapnya, lihat Metode pemanggilan. Nilai yang valid:

  • Sync: pemanggilan sinkron.

  • Async: pemanggilan asinkron.

X-Fc-Log-Type

String

Tidak

Tail

Menentukan apakah log dikembalikan dalam respons. Nilai yang valid:

  • Tail: Mengembalikan 4 KB terakhir dari log yang dihasilkan untuk permintaan tersebut.

  • None: Tidak mengembalikan log permintaan. Ini adalah nilai default.

Header respons

Function Compute menambahkan header default yang dijelaskan di bawah ini ke respons.

Nama

Deskripsi

Contoh

X-Fc-Request-Id

ID permintaan unik untuk pemanggilan fungsi.

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

Panggilan API

Saat fungsi dipanggil menggunakan API InvokeFunction, Function Compute mengonversi permintaan API menjadi permintaan HTTP dan mengirimkannya ke server HTTP Anda. Konversi mengikuti aturan berikut:

  • Parameter event dari permintaan InvokeFunction menjadi body pesan permintaan HTTP.

  • path adalah /invoke.

  • method adalah POST.

  • Header permintaan Content-Type adalah application/octet-stream.

Function Compute mengonversi respons dari server HTTP Anda menjadi respons API InvokeFunction dan mengembalikannya ke klien. Konversi mengikuti aturan berikut:

  • Body respons HTTP menjadi body respons InvokeFunction.

  • Konversi ini mengabaikan header respons HTTP dan kode status.

Contoh konversi permintaan API InvokeFunction

Permintaan invoke

Permintaan HTTP

Isi permintaan API Invoke:

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

hello world

Contoh respons API InvokeFunction

Respons HTTP

Respons invoke

< 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 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 28
< Connection: keep-alive

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

Kode respons dan header respons Function Compute

Runtime kustom pada dasarnya adalah server HTTP yang Anda implementasikan. Oleh karena itu, setiap pemanggilan fungsi merupakan permintaan HTTP, dan setiap respons mencakup kode status serta header respons.

  • Kode status respons

    • 200: Berhasil.

    • 404: Gagal.

  • Header respons x-fc-status

    • 200: Berhasil.

    • 404: Gagal.

Anda dapat menggunakan header respons x-fc-status untuk melaporkan status eksekusi fungsi ke Function Compute.

  • Jika Anda tidak mengatur header x-fc-status, Function Compute secara default mengasumsikan pemanggilan berhasil. Namun, jika fungsi Anda mengalami kesalahan tanpa melaporkannya, Function Compute tidak akan mengenali kegagalan tersebut. Hal ini mungkin tidak memengaruhi logika bisnis Anda, tetapi akan berdampak pada pemantauan dan observabilitas. Kode berikut menunjukkan contohnya:

        print("FC Invoke Start RequestId: " + rid)
        data = request.stream.read()
        print("Path: " + path)
        print("Data: " + str(data))
        # Simulasikan pengecualian untuk memicu error runtime
        raise Exception("mock exception")
        print("FC Invoke End RequestId: " + rid)
        return "Hello, World!"
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=9000)
  • Jika Anda mengatur header x-fc-status, Anda dapat melaporkan kegagalan ke Function Compute dan mencetak jejak stack error ke log saat fungsi Anda mengalami kesalahan. Misalnya, setelah Anda mengatur header respons x-fc-status ke 404, Function Compute mengidentifikasi pemanggilan sebagai kegagalan dengan tipe InvocationError, dan hasil pemanggilan adalah mock exception. File app.py berikut memberikan contohnya:

    @app.route('/', defaults={'path': ''})
    @app.route('/&lt;path:path&gt;', methods=['GET', 'POST', 'PUT', 'DELETE'])
    def hello_world(path):
        rid = request.headers.get(REQUEST_ID_HEADER)
        print("FC Invoke Start RequestId: " + rid)
        try:
            raise Exception("mock exception")
        except Exception as e:
            print("FC Invoke End RequestId: " + rid + ", Error: Unhandled Exception")
            print(str(e))
            return str(e), 404, [{"x-fc-status", "404"}]
Catatan

Dalam respons HTTP yang dikembalikan, kami merekomendasikan agar Anda mengatur baik kode status maupun header x-fc-status.

Contoh kode

Saat Anda mengonfigurasi trigger untuk fungsi Anda, Anda dapat mengimplementasikan server HTTP dalam bahasa pemrograman apa pun. Topik ini menggunakan Python sebagai contoh.

Catatan

Kode contoh ini memerlukan lingkungan Python dan pustaka Flask. Kami merekomendasikan agar Anda membuat fungsi dengan memilih Web Function dan menggunakan Python 3.10 sebagai runtime.

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)
            

Kode ini bekerja sebagai berikut:

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

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']): Ini adalah rute dinamis dengan parameter path yang dapat menangani permintaan GET, POST, PUT, dan DELETE. Rute ini meneruskan nilai parameter path ke fungsi hello_world sebagai argumen path.

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

  • data = request.stream.read(): Membaca konten permintaan dan menetapkannya ke variabel data.

  • return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]: Mengembalikan body respons yang berisi "Hello, World!", kode status 200, dan header respons Function-Name.