全部产品
Search
文档中心

Function Compute:Konteks

更新时间:Jul 02, 2025

Topik ini menjelaskan konteks dalam lingkungan runtime Java di Function Compute dan menyediakan contoh kode.

Apa itu konteks?

Saat Function Compute menjalankan suatu fungsi, sistem mengirimkan konteks ke metode yang digunakan untuk mengeksekusi fungsi tersebut. Konteks mencakup informasi tentang pemanggilan, layanan, fungsi, analisis penelusuran, dan lingkungan runtime. Baik Penanganan Event maupun Fungsi HTTP Java mendukung konteks sebagai parameter input. Format dan isinya identik. Tabel berikut menjelaskan parameter yang terdapat dalam konteks.

ParameterDeskripsi
RequestIdID permintaan. Anda dapat mencatat ID ini untuk pemecahan masalah jika terjadi kesalahan.
FunctionInformasi dasar tentang fungsi yang dipanggil, seperti nama, handler, memori, dan periode timeout dari fungsi tersebut.
Kredensial

Pasangan AccessKey sementara yang diperoleh Function Compute dengan mengasumsikan peran layanan terhubung Anda. Pasangan AccessKey sementara ini berlaku selama 36 jam. Anda dapat menggunakan credentials dalam kode Anda untuk mengakses layanan terkait seperti Object Storage Service (OSS). Dengan cara ini, Anda dapat mengakses layanan tanpa perlu menulis pasangan AccessKey Anda dalam kode fungsi. Untuk informasi lebih lanjut, lihat Berikan izin Function Compute untuk mengakses layanan Alibaba Cloud lainnya.

LoggerLogger yang dienkapsulasi oleh Function Compute.
ServiceInformasi dasar tentang layanan yang dipanggil.
OpenTracingInformasi tentang Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Ikhtisar.

Kode berikut menunjukkan definisi operasi:

package com.aliyun.fc.runtime;

public interface Context {

    public String getRequestId();

    public Credentials getExecutionCredentials();

    public FunctionParam getFunctionParam();

    public FunctionComputeLogger getLogger();

    public Service getService();

    public OpenTracing getTracing();

    public int getRetryCount();
}

Program contoh: Gunakan kunci sementara untuk mengakses OSS

Contoh kode berikut menunjukkan cara menggunakan kunci sementara dalam konteks untuk mengunggah file ke OSS. Untuk kode lengkap, lihat java11-oss.

package example;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.Credentials;
import com.aliyun.fc.runtime.StreamRequestHandler;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;

public class App implements StreamRequestHandler {

    @Override
    public void handleRequest(
            InputStream inputStream, OutputStream outputStream, Context context) throws IOException {

        // Nama bucket, yang harus dibuat terlebih dahulu.
        String bucketName = "my-bucket";
        // Tentukan endpoint wilayah tempat bucket berada. Kami merekomendasikan penggunaan endpoint internal. Dalam contoh ini, endpoint internal https://oss-cn-hangzhou-internal.aliyuncs.com wilayah China (Hangzhou) digunakan.
        String endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";

        // Dapatkan informasi kunci. Sebelum eksekusi, pastikan bahwa layanan tempat fungsi ini termasuk dikonfigurasi dengan peran yang dilampiri dengan kebijakan AliyunOSSFullAccess.
        // Kami merekomendasikan penggunaan peran AliyunFCDefaultRole.
        Credentials creds = context.getExecutionCredentials();

        // Buat instance OSSClient.
        /*
        Pasangan AccessKey akun Alibaba Cloud dapat digunakan untuk mengakses semua operasi API. Menggunakan kredensial ini untuk melakukan operasi di Function Compute adalah operasi berisiko tinggi. Kami merekomendasikan agar Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        Kami merekomendasikan agar Anda tidak menyimpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di bawah akun Anda mungkin terganggu.
        Dalam contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari konteks.
        */
        OSS ossClient = new OSSClientBuilder().build(endpoint, creds.getAccessKeyId(), creds.getAccessKeySecret(), creds.getSecurityToken());

        // Tentukan array byte.
        byte[] content = "Hello FC".getBytes();
        // Tentukan nama bucket seperti examplebucket dan jalur penuh objek seperti exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam jalur penuh.
        ossClient.putObject(bucketName, "exampledir/exampleobject.txt", new ByteArrayInputStream(content));

        // Tutup OSSClient Anda.
        ossClient.shutdown();

        outputStream.write(new String("done").getBytes());
    }
}