All Products
Search
Document Center

Function Compute:Fungsi Web

Last Updated:Sep 10, 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 HTTP 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 (disarankan): Memanggil fungsi melalui HTTP, misalnya dengan menggunakan Pemicu HTTP atau nama domain kustom.

  • Panggilan API: Memanggil fungsi dengan memanggil API InvokeFunction, misalnya dengan menggunakan SDK untuk memanggil fungsi atau dengan memicu fungsi melalui sumber event.

Metode pemanggilan yang berbeda menghasilkan format permintaan dan respons yang berbeda pada server HTTP Anda.

Batasan

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

  • Batasan permintaan HTTP

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

      • connection

      • keep-alive

    • Jika permintaan melebihi batasan berikut, kode status 400 dan kode kesalahan InvalidArgument akan dikembalikan.

      • 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 mendukung bidang kustom yang diawali dengan x-fc- atau bidang kustom berikut:

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        Catatan

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

    • Jika respons melebihi batasan berikut, kode status 502 dan kode kesalahan BadResponse akan dikembalikan.

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

  • Catatan penggunaan lainnya

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

Panggilan HTTP (disarankan)

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

Header permintaan

Saat Anda memanggil fungsi menggunakan Pemicu HTTP atau nama domain kustom, Function Compute memungkinkan Anda mengonfigurasi header permintaan untuk mengontrol perilaku permintaan. Tabel berikut menjelaskan header permintaan yang didukung.

Name

Type

Required

Example

Description

X-Fc-Invocation-Type

String

No

Sync

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

  • Sync: pemanggilan sinkron.

  • Async: pemanggilan asinkron.

X-Fc-Log-Type

String

No

Tail

Log yang dikembalikan dalam respons. Nilai yang valid:

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

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

Header respons

Saat Anda memanggil fungsi menggunakan Pemicu HTTP atau nama domain kustom, respons berisi beberapa header respons yang ditambahkan Function Compute secara default. Tabel berikut menjelaskan header respons tersebut.

Name

Description

Example

X-Fc-Request-Id

ID permintaan dari pemanggilan fungsi.

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

Panggilan API

Untuk pemanggilan menggunakan API InvokeFunction, Function Compute mengonversi permintaan InvokeFunction menjadi permintaan HTTP dan mengirimkannya ke server HTTP Anda. Aturan konversinya sebagai berikut:

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

  • path adalah /invoke.

  • method adalah POST.

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

Function Compute mengonversi respons server HTTP Anda menjadi respons InvokeFunction dan mengembalikannya ke klien. Aturan konversinya sebagai berikut:

  • Body respons HTTP dikonversi menjadi body respons InvokeFunction.

  • Header respons HTTP dan kode status hilang selama konversi.

Contoh konversi permintaan API Invoke

Invoke request

HTTP request (the request received by the HTTP server)

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 output respons API Invoke

HTTP response

Invoke response

< 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 respons serta header respons.

  • Kode respons StatusCode

    • 200: berhasil.

    • 404: gagal.

  • Header respons x-fc-status

    • 200: berhasil.

    • 404: gagal.

Anda dapat menggunakan header respons x-fc-status untuk melaporkan kepada Function Compute apakah eksekusi fungsi berhasil atau tidak.

  • Jika Anda tidak mengatur x-fc-status: Function Compute secara default mengasumsikan bahwa pemanggilan berhasil dieksekusi. Namun, fungsi Anda mungkin mengalami pengecualian yang tidak dilaporkan ke Function Compute. Function Compute menganggap eksekusi bebas kesalahan. Hal ini mungkin tidak memengaruhi logika bisnis Anda, tetapi 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))
        # Simulate an exception to trigger a runtime error
        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 x-fc-status: Jika fungsi Anda mengalami pengecualian, Anda dapat menggunakan header respons x-fc-status untuk melaporkan kegagalan eksekusi ke Function Compute, dan informasi stack kesalahan akan dicetak ke log. Seperti yang ditunjukkan pada contoh berikut, setelah Anda mengatur header respons x-fc-status ke 404, Function Compute mengidentifikasi pemanggilan tersebut sebagai eksekusi yang gagal. Jenis kesalahannya adalah InvocationError, dan hasil yang dikembalikan adalah mock exception. Contoh kode dalam app.py adalah sebagai berikut:

    @app.route('/', defaults={'path': ''})
    @app.route('/<path:path>', 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 menyarankan agar Anda mengatur baik StatusCode maupun x-fc-status.

Contoh kode

Jika pemicu dikonfigurasi untuk fungsi tersebut, Anda dapat mengimplementasikan server HTTP dalam bahasa apa pun. Topik ini menggunakan Python sebagai contoh. Kode contohnya adalah sebagai berikut.

Catatan

Kode contoh ini bergantung pada lingkungan Python dan library Flask. Kami menyarankan Anda memilih Web Function sebagai metode pembuatan fungsi dan 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)

Penjelasan kode contoh sebagai berikut:

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

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

  • rid = request.headers.get(REQUEST_ID_HEADER): mendapatkan nilai bidang x-fc-request-id dalam 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 badan respons yang berisi "Hello, World!", menetapkan kode status ke 200, dan menyertakan header Function-Name.