全部产品
Search
文档中心

Function Compute:Konteks

更新时间:Jul 06, 2025

Topik ini menjelaskan penggunaan lingkungan runtime Go di Function Compute untuk menulis kode serta memberikan contoh implementasi dari konteks tersebut.

Apa itu konteks?

Saat Function Compute mengeksekusi suatu fungsi, objek konteks context.Context diteruskan ke penanganan yang digunakan untuk mengeksekusi fungsi tersebut. Konteks ini mencakup informasi tentang pemanggilan, layanan, fungsi, analisis pelacakan, dan lingkungan runtime.

Tabel berikut menjelaskan parameter yang terdapat dalam konteks.

Tabel 1. Konteks

Parameter

Deskripsi

Variabel

RequestID

ID unik dari permintaan yang digunakan untuk memanggil fungsi. Anda dapat mencatat ID ini untuk pemecahan masalah jika terjadi kesalahan.

Credentials

Setelah Anda mengonfigurasi peran untuk suatu fungsi, Function Compute mendapatkan satu set kunci sementara melalui API AssumeRole. Kunci-kunci ini berlaku selama 36 jam. Anda dapat menggunakan Credentials dalam kode Anda untuk mengakses layanan terkait seperti OSS. Dengan cara ini, Anda dapat mengakses layanan tanpa perlu menuliskan pasangan AccessKey dalam kode fungsi. Untuk informasi lebih lanjut, lihat Berikan izin Function Compute untuk mengakses layanan Alibaba Cloud lainnya.

Fungsi

Informasi dasar tentang fungsi yang dipanggil, seperti nama, penanganan, memori, dan periode timeout fungsi.

Layanan

Informasi tentang layanan tempat fungsi tersebut berada, seperti nama, proyek terkait, dan penyimpanan log dalam Layanan Log Sederhana, versi, serta alias layanan tersebut. Parameter qualifier menunjukkan versi atau alias layanan yang ditentukan saat Anda memanggil suatu fungsi. Parameter versionId menunjukkan versi layanan yang sebenarnya dipanggil.

Wilayah

ID wilayah tempat fungsi dipanggil. Sebagai contoh, jika fungsi dipanggil di wilayah Tiongkok (Shanghai), ID wilayahnya adalah cn-shanghai. Untuk informasi lebih lanjut, lihat Titik akhir layanan.

AccountId

ID akun Alibaba Cloud tempat fungsi tersebut berada.

Metode

deadline

Periode timeout eksekusi fungsi. Nilainya adalah timestamp UNIX. Satuan: milidetik.

Untuk detail lebih lanjut mengenai struktur data lengkapnya, lihat fc-runtime-go-sdk di GitHub.

Contoh kode

Contoh kode untuk menampilkan informasi konteks

Tambahkan parameter context ke handler suatu fungsi. Function Compute meneruskan variabel-variabel yang dijelaskan dalam tabel Konteks sebelumnya ke parameter context. Kemudian, impor paket aliyun/fc-runtime-go-sdk/fccontext dan panggil metode fccontext.FromContext untuk mendapatkan fccontext.

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
}

Contoh kode untuk mendapatkan durasi eksekusi tersisa dari suatu fungsi

Contoh kode berikut menunjukkan cara menggunakan parameter deadline untuk mendapatkan durasi eksekusi tersisa dari suatu fungsi:

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("sekarang: %s\nbatas waktu: %s\n", time.Now().String(), deadline.String())
    deadline = deadline.Add(-100 * time.Millisecond)
    timeoutChannel := time.After(time.Until(deadline))

    for {
        select {
        case <-timeoutChannel:
            return "Selesai sebelum waktu habis.", nil
        default:
            log.Print("halo!")
            time.Sleep(50 * time.Millisecond)
        }
    }
}

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