Topik ini menjelaskan konteks yang digunakan saat menulis kode di lingkungan runtime C# Function Compute.
Apa itu konteks?
Saat Function Compute menjalankan fungsi Anda, sistem mengirimkan objek konteks ke metode yang digunakan untuk mengeksekusi fungsi tersebut. Objek konteks berisi informasi tentang pemanggilan, layanan, fungsi, analisis penelusuran, dan lingkungan runtime. Baik Penangan Event maupun Penangan HTTP mendukung objek konteks sebagai parameter input. Format dan konten objek konteks sama di kedua jenis penangan. Tabel berikut menjelaskan bidang-bidang yang didukung oleh objek konteks.
Parameter | Deskripsi |
RequestId | ID permintaan. Anda dapat mencatat ID ini untuk pemecahan masalah jika terjadi kesalahan. |
Fungsi | Informasi dasar tentang fungsi yang dipanggil, seperti nama, penangan, memori, dan periode timeout fungsi tersebut. |
Kredensial | Pasangan AccessKey sementara yang diperoleh Function Compute dengan mengasumsikan peran layanan tertaut Anda. Pasangan AccessKey sementara ini berlaku selama 36 jam. Anda dapat menggunakan |
Logger | Logger yang dienkapsulasi oleh Function Compute. |
Layanan | Informasi dasar dari layanan yang dipanggil. |
OpenTracing | Informasi tentang Managed Service for OpenTelemetry. Untuk informasi lebih lanjut, lihat Ikhtisar. |
Anda dapat menggunakan antarmuka untuk mendapatkan informasi konteks. Contoh kode berikut mendefinisikan sebuah antarmuka. Untuk informasi lebih lanjut, lihat IFcContext.
public interface IFcContext
{
/// <summary>
/// ID permintaan AliFc yang terkait dengan permintaan.
/// Ini adalah ID yang sama yang dikembalikan ke klien yang memanggil invoke().
/// ID ini digunakan kembali untuk percobaan ulang pada permintaan yang sama.
/// </summary>
string RequestId { get; }
/// <summary>
/// Mendapatkan antarmuka parameter fungsi.
/// </summary>
/// <value>Antarmuka parameter fungsi.</value>
IFunctionParameter FunctionParam {get;}
/// <summary>
/// Logger AliFc yang terkait dengan objek Konteks.
/// </summary>
IFcLogger Logger { get; }
/// <summary>
/// Mendapatkan antarmuka kredensial.
/// </summary>
/// <value>Antarmuka kredensial.</value>
ICredentials Credentials {get;}
/// <summary>
/// Mendapatkan pengenal akun.
/// </summary>
/// <value>Pengenal akun.</value>
string AccountId { get; }
/// <summary>
/// Mendapatkan wilayah.
/// </summary>
/// <value>Wilayah.</value>
string Region { get; }
/// <summary>
/// Mendapatkan meta layanan.
/// </summary>
/// <value>Meta layanan.</value>
IServiceMeta ServiceMeta { get; }
}Program contoh: Gunakan kunci sementara untuk mengakses OSS
Program contoh berikut menunjukkan cara menggunakan kunci sementara dalam konteks untuk mengunggah file ke OSS.
using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;
namespace Example
{
public class OssExample
{
public Stream HandleRequest(Stream stream, IFcContext context)
{
context.Logger.LogInformation("Menangani permintaan: {0}", context.RequestId);
// Nama bucket. Anda harus membuat bucket terlebih dahulu.
string bucketName = "my-****";
// Jalur objek.
string objectName = "exampledir/exampleobject.txt";
// Tentukan endpoint wilayah tempat bucket berada. Kami merekomendasikan Anda menggunakan 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 telah dikonfigurasi dengan peran yang dilampirkan dengan kebijakan AliyunOSSFullAccess.
// Kami merekomendasikan Anda menggunakan peran AliyunFCDefaultRole.
ICredentials creds = context.Credentials;
// Buat instance OSSClient.
/*
Pasangan AccessKey akun Alibaba Cloud dapat digunakan untuk mengakses semua operasi API. Menggunakan kredensial ini untuk melakukan operasi di Function Compute merupakan operasi berisiko tinggi. Kami merekomendasikan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan operasi rutin.
Kami merekomendasikan 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 AccessKey diperoleh dari konteks.
*/
OssClient ossClient =
new OssClient(endpoint,
creds.AccessKeyId,
creds.AccessKeySecret,
creds.SecurityToken);
// Tentukan nama bucket seperti examplebucket dan jalur lengkap objek seperti exampledir/exampleobject.txt.
ossClient
.PutObject(bucketName,
objectName,
stream);
OssObject obj = ossClient.GetObject(bucketName,objectName);
context.Logger.LogInformation("Unggah objek ke oss berhasil: {0}", obj.ToString());
return obj.Content;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Halo Dunia!");
}
}
}