All Products
Search
Document Center

Function Compute:Context

Last Updated:Apr 01, 2026

Runtime Go di Function Compute meneruskan objek context.Context ke penanganan Anda pada setiap pemanggilan. Objek ini membawa metadata pemanggilan, kredensial sementara, informasi waktu eksekusi, dan data pelacakan analitik—semua yang Anda butuhkan untuk membangun fungsi yang berinteraksi dengan layanan Alibaba Cloud lainnya atau merespons timeout secara mulus.

Kapan menggunakan objek context

Gunakan objek context ketika penanganan Anda perlu:

  • Mengidentifikasi pemanggilan saat ini (ID permintaan, akun, wilayah)

  • Mengakses layanan Alibaba Cloud lainnya—seperti Object Storage Service (OSS)—tanpa hardcoding kredensial di kode Anda

  • Memantau waktu eksekusi dan menerapkan shutdown yang mulus sebelum fungsi mengalami timeout

  • Memeriksa konfigurasi fungsi atau layanan saat runtime

Baik penanganan event maupun penanganan HTTP menerima objek context yang sama dengan bidang yang identik.

Bidang Context

Impor paket aliyun/fc-runtime-go-sdk/fccontext dan panggil fccontext.FromContext(ctx) untuk mengekstrak objek fccontext bertipe dari context.Context standar Go.

Untuk struktur data lengkap, lihat context.go.

Variabel

FieldDescription
RequestIDID unik untuk pemanggilan. Catat ID ini untuk membantu pemecahan masalah error.
CredentialsPasangan Kunci Akses temporary yang diperoleh dengan mengasumsikan peran terkait layanan. Berlaku selama 36 jam. Gunakan ini untuk memanggil layanan seperti OSS tanpa hardcoding Pasangan Kunci Akses Anda di kode fungsi. Untuk informasi lebih lanjut, lihat Grant permissions across Alibaba Cloud accounts by using a RAM role.
FunctionInformasi dasar tentang fungsi yang dipanggil: nama, penanganan, memori, dan periode timeout.
ServiceInformasi tentang layanan tempat fungsi tersebut berada: nama, Proyek terkait dan penyimpanan log di Log Service, versi, dan alias. Bidang qualifier menentukan versi atau alias; version_id menentukan versi.
RegionID wilayah tempat fungsi dipanggil. Misalnya, cn-shanghai untuk wilayah China (Shanghai). Untuk informasi lebih lanjut, lihat Endpoints.
AccountIdID Akun Alibaba Cloud yang digunakan untuk memanggil fungsi.

Metode

MethodDescription
deadlineTitik waktu ketika eksekusi fungsi mengalami timeout, dinyatakan sebagai Stempel waktu UNIX dalam milidetik. Gunakan ctx.Deadline() untuk mengambil nilai ini.

Contoh

Menampilkan informasi context

Contoh ini menunjukkan cara mengekstrak objek fccontext dan mencatat semua bidangnya. Contoh ini berguna untuk debugging metadata pemanggilan atau memverifikasi bahwa kredensial dan informasi wilayah telah diisi dengan benar.

package main

import (
    "context"
    "encoding/json"
    "log"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
    "github.com/aliyun/fc-runtime-go-sdk/fccontext"
)

func main() {
    fc.Start(echoContext)
}

func echoContext(ctx context.Context) (string, error) {
    fctx, _ := fccontext.FromContext(ctx)
    log.Println(fctx.AccountId)
    log.Printf("%#v\n", fctx)
    res, _ := json.Marshal(fctx)
    return string(res), nil
}

Mendapatkan sisa waktu eksekusi

Contoh ini menunjukkan cara menggunakan ctx.Deadline() untuk menentukan berapa banyak waktu tersisa sebelum fungsi mengalami timeout, lalu keluar secara bersih 100 milidetik sebelum batas waktu habis alih-alih dihentikan di tengah operasi.

package main

import (
    "context"
    "fmt"
    "log"
    "time"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
)

func LongRunningHandler(ctx context.Context) (string, error) {
    deadline, _ := ctx.Deadline()
    fmt.Printf("now: %s\ndeadline: %s\n", time.Now().String(), deadline.String())
    deadline = deadline.Add(-100 * time.Millisecond)
    timeoutChannel := time.After(time.Until(deadline))

    for {
        select {
        case <-timeoutChannel:
            return "Finished before timing out.", nil
        default:
            log.Print("hello!")
            time.Sleep(50 * time.Millisecond)
        }
    }
}

func main() {
    fc.Start(LongRunningHandler)
}