Este tópico descreve o objeto de contexto disponível ao escrever código no ambiente de execução C# do Function Compute. Quando o Function Compute executa sua função, ele passa um objeto de contexto para o método handler. Use esse objeto para acessar metadados de invocação, credenciais temporárias e utilitários de log sem codificar valores sensíveis no código da função.
Propriedades do contexto
Cada invocação recebe um objeto de contexto com as seguintes propriedades:
RequestId(string): ID exclusivo da invocação atual. Registre este valor em log para correlacionar solicitações durante a solução de problemas.Function(IFunctionParameter): Informações básicas sobre a função invocada, como nome, handler, memória e tempo limite.Credentials(ICredentials): Credenciais temporárias obtidas pelo Function Compute ao assumir sua função vinculada ao serviço. Essas credenciais têm validade de 36 horas e incluem um AccessKey ID, AccessKey secret e token de segurança. Use-as para acessar outros serviços da Alibaba Cloud, como o Object Storage Service (OSS), sem codificar um par de AccessKeys no código da função. Para mais informações, consulte Conceder permissões ao Function Compute para acessar outros serviços da Alibaba Cloud.Logger(IFcLogger): Logger encapsulado pelo Function Compute.Service(IServiceMeta): Informações básicas sobre o serviço ao qual a função pertence.OpenTracing
Interface IFcContext
A interface IFcContext define o conjunto completo de propriedades disponíveis no objeto de contexto. Para ver a definição completa da interface, consulte IFcContext.
public interface IFcContext
{
/// <summary>
/// The AliFc request ID associated with the request.
/// This is the same ID returned to the client that called invoke().
/// This ID is reused for retries on the same request.
/// </summary>
string RequestId { get; }
/// <summary>
/// Gets the function parameter interface.
/// </summary>
/// <value>The function parameter interface.</value>
IFunctionParameter FunctionParam {get;}
/// <summary>
/// AliFc logger associated with the Context object.
/// </summary>
IFcLogger Logger { get; }
/// <summary>
/// Gets the credentials interface.
/// </summary>
/// <value>The credentials interface.</value>
ICredentials Credentials {get;}
/// <summary>
/// Gets the account identifier.
/// </summary>
/// <value>The account identifier.</value>
string AccountId { get; }
/// <summary>
/// Gets the region.
/// </summary>
/// <value>The region.</value>
string Region { get; }
/// <summary>
/// Gets the service meta.
/// </summary>
/// <value>The service meta.</value>
IServiceMeta ServiceMeta { get; }
}
Uso de credenciais temporárias para acessar o OSS
O exemplo a seguir lê credenciais temporárias do objeto de contexto e as usa para fazer upload de um objeto no OSS. A função exige que a função vinculada ao serviço tenha a política AliyunOSSFullAccess anexada. A função recomendada é AliyunFCDefaultRole.
Usar o par de AccessKeys de uma conta Alibaba Cloud para realizar operações no Function Compute é uma prática de alto risco. Use um usuário RAM ou a função vinculada ao serviço. Nunca armazene um par de AccessKeys diretamente no código da função.
Para uma implementação de referência, consulte dotnet3-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("Handle request: {0}", context.RequestId);
// The bucket name. Create the bucket before running this function.
string bucketName = "my-****";
// The full path of the object to upload.
string objectName = "exampledir/exampleobject.txt";
// Use the internal endpoint of the region where the bucket resides.
// This example uses the internal endpoint for the China (Hangzhou) region.
string endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";
// Get temporary credentials from the context object.
// These credentials are issued by the service-linked role configured for the function.
ICredentials creds = context.Credentials;
// Create an OssClient instance using the temporary credentials.
OssClient ossClient =
new OssClient(endpoint,
creds.AccessKeyId,
creds.AccessKeySecret,
creds.SecurityToken);
// Upload the input stream as an object.
ossClient.PutObject(bucketName, objectName, stream);
// Retrieve the uploaded object and return its content.
OssObject obj = ossClient.GetObject(bucketName, objectName);
context.Logger.LogInformation("Put object to OSS success: {0}", obj.ToString());
return obj.Content;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}