全部产品
Search
文档中心

Function Compute:Konteks

更新时间:Jul 06, 2025

Topik ini menjelaskan konteks dalam waktu proses Java di Function Compute. Contoh disediakan dalam topik ini.

Apa itu konteks?

Ketika Function Compute menjalankan suatu fungsi, sistem meneruskan objek konteks ke metode yang digunakan untuk mengeksekusi fungsi tersebut. Objek konteks mencakup informasi tentang pemanggilan, layanan, fungsi, dan lingkungan eksekusi. Tabel berikut menjelaskan parameter yang terdapat dalam konteks.

Parameter

Deskripsi

RequestId

ID permintaan. Anda dapat mencatat ID permintaan dan menggunakannya untuk memecahkan kesalahan.

Fungsi

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

Kredensial

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

Logger

Logger yang dienkapsulasi oleh Function Compute.

Layanan

Informasi dasar dari layanan yang dipanggil.

Definisi:

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();
}

Contoh: Menggunakan kunci sementara untuk mengakses OSS

Program sampel berikut memberikan contoh cara menggunakan kunci sementara dalam konteks untuk mengunggah file ke Object Storage Service (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 titik akhir wilayah tempat bucket berada. Kami merekomendasikan penggunaan titik akhir internal. Dalam contoh ini, titik akhir internal https://oss-cn-hangzhou-internal.aliyuncs.com wilayah China (Hangzhou) digunakan. 
        String endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";

        // Memperoleh informasi kunci. Sebelum Anda mengeksekusi fungsi, pastikan bahwa layanan tempat fungsi tersebut termasuk dikonfigurasi dengan peran yang dilampirkan dengan kebijakan AliyunOSSFullAccess.
        // Kami merekomendasikan penggunaan peran AliyunFCDefaultRole.
        Credentials creds = context.getExecutionCredentials();

        // Buat instance OSSClient.
        /*
        Pasangan AccessKey dari akun Alibaba Cloud memiliki izin pada 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 ke kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di akun Anda mungkin terganggu.
        Dalam contoh ini, pasangan Access Key diperoleh dari konteks.
        */
        OSS ossClient = new OSSClientBuilder().build(endpoint, creds.getAccessKeyId(), creds.getAccessKeySecret(), creds.getSecurityToken());

        // Tentukan larik byte.
        byte[] content = "Hello FC".getBytes();
        // Tentukan nama bucket dan jalur penuh objek. Dalam contoh ini, nama bucket adalah examplebucket dan jalur penuh objek adalah exampledir/exampleobject.txt. Jangan masukkan nama bucket dalam jalur penuh objek.
        ossClient.putObject(bucketName, "exampledir/exampleobject.txt", new ByteArrayInputStream(content));

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

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