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